0

現在、次のvbaを使用して12000以上のxmlファイルをExcelブックにインポートしています。

Public Sub XMLIMport()

    Dim lngRow As Long
    Dim strXML As String
    Dim ct As Integer, XMLMap

    Const maxXMLDel = 1
    lngRow = 2

    Do While Cells(lngRow, 1) <> ""
        strXML = Cells(lngRow, 1)
        ActiveWorkbook.XMLIMport url:=strXML, _
        ImportMap:=Nothing, Overwrite:=False, _
        Destination:=Range("$B$" & lngRow)
        lngRow = lngRow + 1
        For Each XMLMap In ActiveWorkbook.XmlMaps
                  XMLMap.Delete
        Next
    Loop

End Sub

次に、アクセス2007でExcelからテーブルにワークブックシートをインポートします。インポートでは、サーバーへのリンクを使用して個々のファイルをダウンロードします。

したがって、列Aにはxmlリンクがあり、マクロはxmlデータの結果を列B、C、Dなどに配置し、次の行に進み、ファイルごとにプロセスを繰り返します。しかし、ファイルが非常に多い場合、プロセスが完了するまでにかなりの時間がかかります。プロセスを高速化するためにxmlマップを削除することも含めましたが、Excel 2007はプロセスを完了するのにかなりの時間がかかります(2時間以上)。

このマクロは、私が望んでいるものに対して「最適化された」というより良い言葉がないために推測しますか、それともこれを行うべき別の方法がありますか?

更新:画面の更新を無効にしましたが、接続を削除しようとするとエラーが発生しました。

マクロレコーダを実行すると、いくつかの接続を削除すると次のようになりますが、次のファイルに進む前に、これを上記のマクロに追加して、xmlmapに加えて接続を削除する方法がわかりません。

Sub deleteconnection()
'
' deleteconnection Macro
'

'
    ActiveWorkbook.Connections("itemResponse").Delete
    ActiveWorkbook.Connections("itemResponse1").Delete
    ActiveWorkbook.Connections("itemResponse10").Delete
    ActiveWorkbook.Connections("itemResponse100").Delete
    ActiveWorkbook.Connections("itemResponse101").Delete
    ActiveWorkbook.Connections("itemResponse102").Delete
    ActiveWorkbook.Connections("itemResponse103").Delete
    ActiveWorkbook.Connections("itemResponse104").Delete
    ActiveWorkbook.Connections("itemResponse105").Delete
    ActiveWorkbook.Connections("itemResponse106").Delete
    ActiveWorkbook.Connections("itemResponse107").Delete
    ActiveWorkbook.Connections("itemResponse108").Delete
    ActiveWorkbook.Connections("itemResponse109").Delete
    ActiveWorkbook.Connections("itemResponse11").Delete
    ActiveWorkbook.Connections("itemResponse110").Delete
    ActiveWorkbook.Connections("itemResponse111").Delete
    ActiveWorkbook.Connections("itemResponse112").Delete
    ActiveWorkbook.Connections("itemResponse113").Delete
    ActiveWorkbook.Connections("itemResponse114").Delete
    ActiveWorkbook.Connections("itemResponse115").Delete
    ActiveWorkbook.Connections("itemResponse116").Delete
    ActiveWorkbook.Connections("itemResponse117").Delete
    ActiveWorkbook.Connections("itemResponse118").Delete
    ActiveWorkbook.Connections("itemResponse119").Delete

End Sub

編集:以下を使用して接続の削除を追加しようとしています

Public Sub XMLIMport()

    Dim lngRow As Long
    Dim strXML As String
    Dim ct As Integer, XMLMap
    Dim QTable As QueryTables


    'Application.ScreenUpdating = False

    Const maxXMLDel = 1
    lngRow = 2

    Do While Cells(lngRow, 1) <> ""
        strXML = Cells(lngRow, 1)
        ActiveWorkbook.XMLIMport url:=strXML, ImportMap:=Nothing, Overwrite:=False, Destination:=Range("$B$" & lngRow)
        lngRow = lngRow + 1
        For Each XMLMap In ActiveWorkbook.XmlMaps
                  XMLMap.Delete
         Next
         For Each QTable In ActiveSheet.QueryTables
                  QTable.Delete

         Next
    Loop

    'Application.ScreenUpdating = True

End Sub

その結果、接続はブックに残り、最初のファイルが再挿入されます

4

2 に答える 2

1

すべての接続を削除するには:

Dim Conn As Object        '* connection collection

For Each Conn In ActiveWorkbook.Connections

    Conn.Delete

Next Conn
于 2012-09-27T11:48:17.893 に答える