現在、次の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
その結果、接続はブックに残り、最初のファイルが再挿入されます