2016-03-15 41 views
5

朋友, 我试图每天打开一个CSV文件(每天从另一个程序生成),并将CSV表格中的数据复制到当前工作簿中的某个工作表中。我已经在这段代码上工作了一段时间,我认为它非常接近正确,但我一直在我的复制/粘贴行上收到运行时错误438。任何帮助?打开CSV并复制

谢谢!

这里是我的代码:

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 

回答

4

尝试看看这个。我从复制和粘贴部分代码中删除了这个WB和ThatWB,因为它是第一个问题的来源(并且我将工作簿规范移动到了表单声明中)。

然后下一个问题是粘贴。林不知道为什么,但在范围内打电话时,你需要使用PasteSpecial的(VBA在Excel中是有点神奇,而不是编程/脚本)

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

,而你在这里提到的parentaging是正确的,直接拷贝也将工作很好,试试这一行:'thatWS.Range(“A1:G150”)。复制目的地:= thisWS.Range(“A1”)'为了清楚,'PasteSpecial'方法也可以工作。这只是没有必要。 –

+0

谢谢你们两位。两种解决方案都能正常工我将卢博斯标记为正确,但斯科特的作品同样出色。 – tulanejosh