私は時々htmlファイルをExcelに変換する必要があります。テーブルを含む約9000個のhtmlファイルがあります。
Excel 2007 vbaを使用してそれらを変換し、その仕事をするためのマクロを作成すると便利だと思います。ワークブックのマクロを停止するExcelのバグを考慮しました。Shiftキーを押すと機能を開きます。アラート、イベント、画面の更新を行い、他のことをしているときに邪魔をしたくないので、アプリケーションを非表示にします。
'Declare API
Declare Function GetKeyState Lib "User32" _
(ByVal vKey As Integer) As Integer
Const SHIFT_KEY = 16
Function ShiftPressed() As Boolean
'Returns True if shift key is pressed
ShiftPressed = GetKeyState(SHIFT_KEY) < 0
End Function
Sub ConvertHtmlToExcel()
Dim wb As Workbook
Dim strFile As String
Dim strPath As String
With Application
.EnableEvents = False
.DisplayAlerts = False
.ScreenUpdating = False
.Visible = False
End With
strPath = "c:\FolderToConvert\"
strFile = Dir(strPath & "*.html")
Do While strFile <> ""
Do While ShiftPressed()
DoEvents
Loop
Set wb = Workbooks.Open(strPath & strFile)
strFile = Mid(strFile, 1, Len(strFile) - 5) & ".xls"
wb.SaveAs strPath & strFile, XlFileFormat.xlWorkbookNormal
wb.Close
Set wb = Nothing
strFile = Dir
Loop
With Application
.EnableEvents = True
.DisplayAlerts = True
.ScreenUpdating = True
.Visible = True
End With
End Sub
マクロは問題ないようですが、実行すると、1分あたりのコンバージョン率は次のようになります。
- 40
- 31
- 25
- 21
- 19
- 18
そして、500ファイルが変換された後も現在は減少し続けています。現在の速度は1分あたり8です。
2359ファイル後、速度は1分あたり2に減少しました。テストすると、visible = trueであり、ワークブックを開くのに時間がかかることがわかりました。
したがって、問題はWorkbooks.Openにあるように見えます。ループの開始時に可能な限り高速に動作しますが、それ以降のループでは速度が低下し始めます。
誰かがこれにつまずいたことがありますか?回避策はありますか?私のコードには何かが欠けていますか?また、マクロがまだ実行を停止することがあります。Shiftキーがその関数によってキャッチされなかったと思います。