当我在单张纸上运行时,我的子程序运行正常,但是我在每张纸上运行它时遇到了很多问题。子例程是对在线CSV数据库的简单查询,但它仅在第一张表上执行25次。无法弄清楚为什么会这样。
我能够通过同一个循环进行计算,但无法让它在每个工作表上运行子程序。
Sub Datacollection()
Dim ws As Worksheet
For Each ws In Worksheets
ws.Application.Run "Gethistory"
Next ws
End Sub
Sub Gethistory()
Dim Target As Variant
Dim Name As Variant
'
Set Target = Range("B1")
Set Name = Range("B2")
With ActiveSheet.QueryTables.Add(Connection:= _
"Text;" & Target, _
Destination:=Range("$A$3"))
.Name = Name
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlOverwriteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 437
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = True
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = True
.TextFileSpaceDelimiter = True
.TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
End Sub
答案 0 :(得分:2)
收集要在主循环中处理的工作表,并将其作为参数传递给 getHistory 子。
Option Explicit
Sub dataCollection()
Dim w As Long
For w = 1 To Worksheets.Count
getHistory Worksheets(w)
Next w
End Sub
Sub getHistory(ws As Worksheet)
Dim trgt As Range, nm As Range
With ws
Set trgt = .Range("B1")
Set nm = .Range("B2")
With .QueryTables.Add(Connection:= _
"Text;" & trgt.Value, _
Destination:=.Range("$A$3"))
.Name = nm.Value
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlOverwriteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 437
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = True
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = True
.TextFileSpaceDelimiter = True
.TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
End With
End Sub
如果反复执行此操作,最终会出现大量连接,这些连接可能会影响一般工作簿的效率以及将来的getHistory运行。您可能希望在创建连接时删除连接,或仅使用刷新方法来维护数据。