我正在编写一个宏,我从CSV中获取数据并将其复制到另一个Excel文件(不是当前或活动文件)。
将复制的数据发送到同一目录中的另一个文件的代码是什么。
这是我的代码,我已经注释掉导致宏无法工作的行。我想将变量wshT
设置为WTF.xlsx文件的Sheet1,该文件位于同一目录但不是活动工作簿。我没打开那个。因此,目标是使用此宏从CSV复制额外数据并将其发送到WTF.xlsx文件并将其保存为新内容,在本例中为" BBB"。任何帮助深表感谢。当我取消注释这些行时,会弹出错误。
Sub Import()
Dim MyPath As String
Dim strFileName As String
'Dim strFileName1 As String
MyPath = ActiveWorkbook.Path
strFileName = MyPath & "\borgwich_die_BM1940_profile.csv"
'strFileName1 = Workbooks("WTF.xlsx").Activate
'strFileName1 = Workbooks("WTF.xlsx").Worksheets("Sheet1").Select
Dim wbkS As Workbook
Dim wshS As Worksheet
Dim wshT As Worksheet
'Set wshT = strFileName1
Set wbkS = Workbooks.Open(Filename:=strFileName)
Set wshS = wbkS.Worksheets(1)
wshS.Range("A1:A3").EntireRow.Delete
'wshS.UsedRange.Copy Destination:=wshT.Range("A1")
wbkS.Close SaveChanges:=False
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:=MyPath & "\BBB", FileFormat _
:=51, CreateBackup:=False
Application.DisplayAlerts = False
'ActiveWindow.Close
End Sub
答案 0 :(得分:1)
您通过使用.Activate
和/或.Select
对 strFileName1 进行值分配是不好的方法。如果WTF.xlsx处于打开状态,您可以直接将 Sheet1 和Set
工作表对象引用引用到变量。
Sub Import()
Dim MyPath As String, strFileName As String
Dim wbkS As Workbook, wshS As Worksheet, wshT As Worksheet
MyPath = ActiveWorkbook.Path
strFileName = MyPath & "\borgwich_die_BM1940_profile.csv"
Set wbkS = Workbooks.Open(Filename:=strFileName)
Set wshS = wbkS.Worksheets(1)
Set wshT = Workbooks("WTF.xlsx").Worksheets("Sheet1")
wshS.Range("A1:A3").EntireRow.Delete
With wshS.Cells(1, 1).CurrentRegion
.Copy Destination:=wshT.Range("A1")
End With
wbkS.Close SaveChanges:=False
Application.DisplayAlerts = False
wshT.Parent.SaveAs Filename:=MyPath & "\BBB", FileFormat:=51, CreateBackup:=False
wshT.Parent.Close SaveChanges:=False
Application.DisplayAlerts = True
End Sub
另一种替代方法是使用VBA等效的数据►获取外部数据►来自文本,但您可能应该知道预先使用CSV引入的字段的数量和类型。如果您正在创建的临时工作表通过将CSV打开为工作簿而错误地解释CSV数据,这肯定是首选方法。