打开CSV并复制

tul*_*osh 5 csv excel vba excel-vba

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

谢谢!

这是我的代码:

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
Run Code Online (Sandbox Code Playgroud)

Lub*_*Suk 5

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

接下来的问题是粘贴。我不知道为什么,但是当调用范围时,您需要使用 PasteSpecial (Excel 中的 VBA 有点神奇,而不是编程/脚本)

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
Run Code Online (Sandbox Code Playgroud)

  • 虽然您在这里提到的父子关系是正确的,但直接复制也可以正常工作,请尝试以下行: `thatWS.Range("A1:G150").Copy Destination:= thisWS.Range("A1")` 要清楚,“PasteSpecial”方法也可以工作。只是没有必要。 (2认同)