2016-03-15 15 views
5

Bạn bè, Tôi đang cố gắng mở tệp CSV (được tạo hàng ngày từ một chương trình khác) mỗi ngày và sao chép dữ liệu trong trang tính CSV vào một trang tính nhất định trong sổ làm việc hiện tại của tôi. Tôi đã làm việc trên mã này trong một thời gian và tôi nghĩ rằng nó thực sự là gần đúng, nhưng tôi tiếp tục nhận được một lỗi thời gian chạy 438 trên dòng sao chép/dán của tôi. Bất kỳ giúp đỡ?Mở CSV và sao chép

Cảm ơn bạn!

Đây là mã của tôi:

Sub GetCSV() 

Dim thatWB As Workbook, thisWB As Workbook 
Dim thisWS As Worksheet, thatWS As Worksheet 
Dim zOpenFileName As String 
Dim inputData As String 

'get name of sheet to open 
inputData = InputBox("Enter name of file") 

'open CSV file 
zOpenFileName = Application.GetOpenFilename 

'error handling 
If zOpenFileName = "" Then Exit Sub 

Application.ScreenUpdating = False 

Set thisWB = ThisWorkbook 'destination workbook 
Set thisWS = Sheets("f_dump") 'destination worksheet 

Set thatWB = Workbooks.Open(zOpenFileName) 'source CSV 
Set thatWS = thatWB.Sheets(inputData) 'source worksheet 

Application.CutCopyMode = False 

thatWB.thatWS.Range("A1:G150").Copy Destination:=thisWB.thisWS.Range("A1") 

thatWB.Close 

End Sub 

Trả lời

4

Cố gắng xem xét điều này. Tôi đã xóa WW và ThatWB này khỏi phần sao chép và dán mã của bạn, vì đó là nguồn của vấn đề đầu tiên (và tôi đã chuyển đặc tả sổ làm việc thành tờ khai bảng).

Sau đó, vấn đề tiếp theo là với Dán. Im không chắc chắn lý do tại sao, nhưng khi gọi về phạm vi, bạn cần phải sử dụng PasteSpecial (VBA trong excel là một chút kỳ diệu thay vì lập trình/scripting)

Sub GetCSV() 

Dim thatWB As Workbook, thisWB As Workbook 
Dim thisWS As Worksheet, thatWS As Worksheet 
Dim zOpenFileName As String 
Dim inputData As String 

'get name of sheet to open 
inputData = InputBox("Enter name of file") 

'open CSV file 
zOpenFileName = Application.GetOpenFilename 

'error handling 
If zOpenFileName = "" Then Exit Sub 

Application.ScreenUpdating = False 

Set thisWB = ThisWorkbook 'destination workbook 
Set thisWS = ThisWorkbook.Sheets("Sheet1") 'destination worksheet 

Set thatWB = Workbooks.Open(zOpenFileName) 'source CSV 
Set thatWS = thatWB.Sheets(inputData) 'source worksheet 

Application.CutCopyMode = False 

thatWS.Range("A1:G150").Copy 
thisWS.Range("A1:G150").PasteSpecial xlPasteAll 
thatWB.Close 

End Sub 
+2

trong khi parentaging bạn đề cập đến ở đây là đúng, sao chép trực tiếp cũng sẽ làm việc tốt, hãy thử dòng này: 'thatWS.Range (" A1: G150 ") Sao chép đích: = thisWS.Range (" A1 ")' Để rõ ràng, phương thức 'PasteSpecial' cũng sẽ hoạt động. Nó chỉ là không cần thiết. –

+0

Cảm ơn cả hai. Cả hai giải pháp đều hoạt động chính xác. Tôi đã đánh dấu Lubos là chính xác, nhưng Scott hoạt động tốt như nhau. – tulanejosh

Các vấn đề liên quan