VBA Excel赢得';不要将数据复制到工作表中

VBA Excel赢得';不要将数据复制到工作表中,excel,vba,Excel,Vba,我试图将一手CSV文件中的数据复制到excel文件的单独表格中。我想为每个CSV文件创建一张图纸,如果图纸已经存在,我想在复制新数据之前删除这些图纸(这部分似乎工作正常) 不幸的是,我的脚本似乎没有复制数据。脚本运行时没有给我一个错误,但是各个表中仍然没有数据。 省略删除已建立连接的最后一位不会改变任何内容 事先非常感谢你 “导入”工作表如下所示: ColumnA ColumnB file_name sheet_name <pathTo>\1.c

我试图将一手CSV文件中的数据复制到excel文件的单独表格中。我想为每个CSV文件创建一张图纸,如果图纸已经存在,我想在复制新数据之前删除这些图纸(这部分似乎工作正常)

不幸的是,我的脚本似乎没有复制数据。脚本运行时没有给我一个错误,但是各个表中仍然没有数据。 省略删除已建立连接的最后一位不会改变任何内容

事先非常感谢你

“导入”工作表如下所示:

ColumnA           ColumnB
file_name         sheet_name

<pathTo>\1.csv    file_1
<pathTo>\2.csv    file_2
<pathTo>\3.csv    file_3
<pathTo>\4.csv    file_4
Sub AddAllFiles()
    Dim inputRow As Integer
    For inputRow = 3 To 20
        Dim fileName As String
        Dim outputSheet As String

        fileName = Sheets("import").Range("A" & inputRow).Value
        outputSheet = Sheets("import").Range("B" & inputRow).Value

        Dim checkSheetName As String
        On Error Resume Next
        checkSheetName = Worksheets(outputSheet).Name
        If checkSheetName <> "" Then
            Sheets(outputSheet).Delete
        End If
        Worksheets.Add.Name = outputSheet

        With Sheets(outputSheet).QueryTables.Add(Connection:="TEXT" & fileName, Destination:=Sheets(outputSheet).Range("$A$1"))
            .FieldName = True
            .RowNumbers = False
            .FillAdjacentFormulas = False
            .PreserveFormatting = True
            .RefreshOnFileOpen = False
            .BackgroundQuery = True
            .RefreshStyle = xlInsertDeleteCells
            .SavePassword = False
            .SaveData = True
            .AdjustColumnWidth = True
            .RefreshPeriod = 0
            .TextFilePlatform = 65001
            .TextFilePromptOnRefresh = False
            .TextFileTextQualifier = xlTextQualifierDoubleQuote
            .TextFileStartRow = 1
            .TextFileParseType = xlDelimited
            .TextFileConsecutiveDelimiter = True
            .TextFileSemicolonDelimiter = True
            .TextFileTabDelimiter = False
            .TextFileCommaDelimiter = False
            .TextFileSpaceDelimiter = False
            .TextFileTrailingMinusNumbers = True
            .PreserveColumnInfo = True
        End With

        Dim wb_connection As WorkbookConnection
        For Each wb_connection In ActiveWorkbook.Connections
            If InStr(fileName, wb_connection) > 0 Then
                wb_connection.Delete
            End If
        Next wb_connection

    Next inputRow

    MsgBox "Imported CSV Files"

End Sub
ColumnA ColumnB
文件名表名
\1.csv文件\u 1
\2.csv文件\u 2
\3.csv文件\u 3
\4.csv文件\u 4
我的宏如下所示:

ColumnA           ColumnB
file_name         sheet_name

<pathTo>\1.csv    file_1
<pathTo>\2.csv    file_2
<pathTo>\3.csv    file_3
<pathTo>\4.csv    file_4
Sub AddAllFiles()
    Dim inputRow As Integer
    For inputRow = 3 To 20
        Dim fileName As String
        Dim outputSheet As String

        fileName = Sheets("import").Range("A" & inputRow).Value
        outputSheet = Sheets("import").Range("B" & inputRow).Value

        Dim checkSheetName As String
        On Error Resume Next
        checkSheetName = Worksheets(outputSheet).Name
        If checkSheetName <> "" Then
            Sheets(outputSheet).Delete
        End If
        Worksheets.Add.Name = outputSheet

        With Sheets(outputSheet).QueryTables.Add(Connection:="TEXT" & fileName, Destination:=Sheets(outputSheet).Range("$A$1"))
            .FieldName = True
            .RowNumbers = False
            .FillAdjacentFormulas = False
            .PreserveFormatting = True
            .RefreshOnFileOpen = False
            .BackgroundQuery = True
            .RefreshStyle = xlInsertDeleteCells
            .SavePassword = False
            .SaveData = True
            .AdjustColumnWidth = True
            .RefreshPeriod = 0
            .TextFilePlatform = 65001
            .TextFilePromptOnRefresh = False
            .TextFileTextQualifier = xlTextQualifierDoubleQuote
            .TextFileStartRow = 1
            .TextFileParseType = xlDelimited
            .TextFileConsecutiveDelimiter = True
            .TextFileSemicolonDelimiter = True
            .TextFileTabDelimiter = False
            .TextFileCommaDelimiter = False
            .TextFileSpaceDelimiter = False
            .TextFileTrailingMinusNumbers = True
            .PreserveColumnInfo = True
        End With

        Dim wb_connection As WorkbookConnection
        For Each wb_connection In ActiveWorkbook.Connections
            If InStr(fileName, wb_connection) > 0 Then
                wb_connection.Delete
            End If
        Next wb_connection

    Next inputRow

    MsgBox "Imported CSV Files"

End Sub
Sub AddAllFiles()
作为整数的Dim inputRow
对于inputRow=3到20
将文件名设置为字符串
将输出表变暗为字符串
fileName=Sheets(“导入”).Range(“A”和“inputRow”).Value
outputSheet=工作表(“导入”).范围(“B”和“inputRow”).值
Dim checkSheetName作为字符串
出错时继续下一步
checkSheetName=工作表(outputSheet).Name
如果选中SheetName“”,则
工作表(outputSheet)。删除
如果结束
Worksheets.Add.Name=输出工作表
带工作表(outputSheet).QueryTables.Add(连接:=“文本”和文件名,目标:=工作表(outputSheet).Range($A$1))
.FieldName=True
.rowNumber=False
.FillAdjacentFormulas=False
.PreserveFormatting=True
.refreshinfoleopen=False
.BackgroundQuery=True
.RefreshStyle=xlInsertDeleteCells
.SavePassword=False
.SaveData=True
.AdjustColumnWidth=True
.RefreshPeriod=0
.TextFilePlatform=65001
.TextFilePromptOnRefresh=False
.TextFileTextQualifier=xlTextQualifierDoubleQuote
.TextFileStartRow=1
.TextFileParseType=xlDelimited
.textfileconsutivedelimiter=True
.TextFileSemicolonDelimiter=True
.TextFileTabDelimiter=False
.textfilecommadelimitor=False
.TextFileSpaceDelimiter=False
.TextFileTrailingMinusNumbers=True
.PreserveColumnInfo=True
以
作为工作簿连接的Dim wb_连接
对于ActiveWorkbook.Connections中的每个wb_连接
如果InStr(文件名,wb_连接)>0,则
wb_connection.Delete
如果结束
下一个wb_连接
下一个输入
MsgBox“导入的CSV文件”
端接头

我更改了您的设置并使用了
刷新功能。见下文。我还将分号添加到
连接
字符串中

刷新方法使Microsoft Excel连接到QueryTable对象的数据源,执行SQL查询,并将数据返回到基于QueryTable对象的范围除非调用此方法,否则QueryTable对象不会与数据源通信。

因此,连接存在,但尚未尝试打开连接

同样,这种方法也可能失败。如果您在代码中没有输入
“TEXT;”
,则可能收到错误。只是想一想。您可能需要对其进行一些错误处理

建立数据库连接后,将验证SQL查询。如果查询无效,刷新方法将失败,并出现SQL语法错误异常

分号后加上
“TEXT”
(感谢直布罗陀)

及加入

.Refresh BackgroundQuery:=False

就在
部分结束之前,我的问题似乎已经解决了。因为我是VBA的新手,也许有人能告诉我确切的错误是什么。

您缺少了一个
“TEXT”
之后是code>,不是吗?i、 e.
“TEXT;”
啊,你说得对。然而,这并没有解决我的问题。我又搜索了半个小时,发现了这个错误(见我的帖子)。谢谢你的解释。在这里,错误处理似乎是个好主意。