3

多数の .xlsx ワークブックを .xls にバッチ変換するためにこのコードを作成しました (2003 を使用しているエンド ユーザーが多数います)。それは仕事をしますが、非常に遅いです.20個のワークブックでこれをテストしましたが、それぞれのサイズは約30kbで、ローカルで実行するのに9.78秒かかりました. 私のシェアポイント サーバーでは 262 秒かかりましたが、シェアポイントの信じられないほど遅い速度は別の問題だと思います。

コード

Option Explicit
Sub Convert_to972003()
    Dim orgwb As Workbook
    Dim mypath As String, strfilename As String
    Dim nname As String

    '--> Error Handling
    On Error GoTo WhatHappened

    '--> Disable Alerts
    With Application
        .DisplayAlerts = False
        .ScreenUpdating = False
    End With

    '--> Specify location of workbooks
    mypath = "C:\xxx"
    strfilename = Dir(mypath & "\*.xlsx", vbNormal)

    '--> Check the specified folder contains files
    If Len(strfilename) = 0 Then Exit Sub

    '--> Start Loop, end when last file reached
    Do Until strfilename = ""

    '--> Open a workbook
        Set orgwb = Application.Workbooks.Open _
        (mypath & "\" & strfilename)

        '--> Create new Filename, Save in new File Format and Close
        nname = Replace(strfilename, ".xlsx", ".xls")
        orgwb.SaveAs mypath & "\" & nname, FileFormat:=xlExcel8
        orgwb.Close
        strfilename = Dir()
    Loop

    '--> Enable Alerts
    With Application
        .DisplayAlerts = True
        .ScreenUpdating = True
    End With

Exit Sub

WhatHappened: MsgBox Err.Description

End Sub

質問

フォルダー/開く/保存/閉じるをループするよりも、ファイル形式を変換するためのより速い方法はありますか?

4

1 に答える 1

3

これがまだ関連している場合。同様の問題が発生したとき、ほぼ同じコードになりましたが、少し高速化するのに役立ったのは、を無効にすることでしたApplication.EnableEvents

Application.EnableEvents = False
...
Application.EnableEvents = True

適切な部分で。これは、ワークブックを開いたり閉じたりするなどのさまざまな Excel イベントによってトリガーされる他のアドインまたはマクロがある場合に特に役立ちます。

于 2012-10-09T11:05:25.550 に答える