Tôi đang cố giải quyết một vấn đề tương đối đơn giản nhưng tôi không thể nhận ra nó. Mục đích của tôi là sao chép một phạm vi ô trong một trang tính của Ứng dụng Excel chính sang một phạm vi khác (có cùng kích thước) trong một trang tính của Ứng dụng Excel mới được tạo thứ hai. Tôi tạo Ứng dụng thứ hai bằng cách sử dụngVB: Sao chép một phạm vi sang một ứng dụng Excel khác
Set secondExApp = CreateObject("Excel.Application")
Tôi đang sử dụng tham chiếu này để xử lý thêm. Cho đến bây giờ tôi đã thử hai cách khác nhau. Cả hai đều không hoạt động đúng.
0 .: Chuẩn bị/Giới thiệu
Set srcWb = Application.ActiveWorkbook
Set srcSheet = srcWb.Worksheets("example")
Set dstApp = CreateObject("Excel.Application")
Set dstWb = dstApp.Workbooks(1)
Set dstSheet = dstWb.Worksheets(1)
1 .: PasteSpecial - cung cấp một hình ảnh thay vì chỉ khoảng
srcSheet.Range("A1:B2").Copy
dstSheet.Range("A1:B2").PasteSpecial xlPasteAll
2 .: Range.Copy [Destination (!) ] - không hoạt động - Có phải tôi chỉ có thể sử dụng phương pháp này cho các trang tính trong cùng một ứng dụng không?
srcSheet.Range(srcSheet.Cells(..., ...), srcSheet.Cells(..., ...)).Copy _
dstSheet.Range(dstSheet.Cells(..., ...), dstSheet.Cells(..., ...))
Mọi trợ giúp đều được đánh giá cao.
Sửa: Tôi đã chơi với "kỷ lục vĩ mô" chức năng nhưng tôi thích mã hóa nó trên của riêng tôi mà không "chọn" hoặc "kích hoạt" tế bào/tờ/vv
Sửa (giải quyết): Cảm ơn bạn cả GSerg và iDevlop rất nhiều, bạn cung cấp một điểm khởi đầu hơn nữa tốt cho tôi. Tôi đã làm một số nghiên cứu như xa như các hằng số Excel như xlClipboardFormatDspText
có liên quan.
Điều gì thực sự giúp tôi là việc mở một phiên bản Excel mới sẽ thay đổi menu Dán (Đặc biệt).
Vì vậy, thay vì tạo một trường hợp mới, tôi chỉ cần thêm một sổ làm việc (có thể ẩn) và sử dụng đối tượng này để thêm nội dung của tôi. Vì nó được giữ trong cùng một thể hiện (cũng có một cái nhìn tại trình quản lý tác vụ), menu Paste (Special) hoàn toàn giống nhau.
Bây giờ, bạn có thể sử dụng Range.Copy [destination] ngay cả khi không chọn!
quả:
'Hides the new workbook
Application.ScreenUpdating = False
Set dstWb = Workbooks.Add
Set dstSheet = dstWb.Worksheets(1)
srcSheet.Range(srcSheet.Cells(..., ...), srcSheet.Cells(..., ...)).Copy
dstSheet.Paste dstSheet.Range(dstSheet.Cells(..., ...), dstSheet.Cells(..., ...))
'Avoids the often seen dashed border around the copied range
Application.CutCopyMode = False
'Setting the initial change back
Application.ScreenUpdating = True
phần mềm: Excel 2007
Tại sao lại sử dụng ứng dụng Excel thứ hai thay vì một sổ làm việc khác trong cùng một phiên bản Excel? Tiền thưởng duy nhất tôi có thể thấy là tận dụng bộ xử lý lõi kép để tính toán rất lớn. Nhưng nó sẽ chậm hơn nếu bạn không cần điều đó. –
@iDevlop Vui nhộn. Tôi chỉ đọc bình luận của bạn sau khi tôi phát hiện ra bản thân mình. Nhận xét rất hữu ích! – Mic