Excel VBA在工作表循环和调用子例程

时间:2016-03-31 01:19:27

标签: excel vba excel-vba

当我在单张纸上运行时,我的子程序运行正常,但是我在每张纸上运行它时遇到了很多问题。子例程是对在线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

1 个答案:

答案 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运行。您可能希望在创建连接时删除连接,或仅使用刷新方法来维护数据。

相关问题