VBA Excel赢得';不要将数据复制到工作表中
我试图将一手CSV文件中的数据复制到excel文件的单独表格中。我想为每个CSV文件创建一张图纸,如果图纸已经存在,我想在复制新数据之前删除这些图纸(这部分似乎工作正常) 不幸的是,我的脚本似乎没有复制数据。脚本运行时没有给我一个错误,但是各个表中仍然没有数据。 省略删除已建立连接的最后一位不会改变任何内容 事先非常感谢你 “导入”工作表如下所示:VBA Excel赢得';不要将数据复制到工作表中,excel,vba,Excel,Vba,我试图将一手CSV文件中的数据复制到excel文件的单独表格中。我想为每个CSV文件创建一张图纸,如果图纸已经存在,我想在复制新数据之前删除这些图纸(这部分似乎工作正常) 不幸的是,我的脚本似乎没有复制数据。脚本运行时没有给我一个错误,但是各个表中仍然没有数据。 省略删除已建立连接的最后一位不会改变任何内容 事先非常感谢你 “导入”工作表如下所示: ColumnA ColumnB file_name sheet_name <pathTo>\1.c
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;”
啊,你说得对。然而,这并没有解决我的问题。我又搜索了半个小时,发现了这个错误(见我的帖子)。谢谢你的解释。在这里,错误处理似乎是个好主意。