将信息复制到外部工作簿

时间:2015-05-09 20:19:55

标签: excel vba excel-vba csv

我正在编写一个宏,我从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

1 个答案:

答案 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数据,这肯定是首选方法。