0

私のハード ドライブには、多数の Excel ワークブックを含むフォルダーがあります。このフォルダー内の各 Excel ワークブックのすべてのワークシートをループ処理して、すべてのセルのフォント、フォント サイズ、およびテキストの配置を変更したいと考えています。

私自身の VBA に関する限られた知識と、SO に関する他の関連する質問を読んだことから、Personal.xls に保存したマクロをまとめました。

今のところ、ワークブックをループしているように見えますが、どのワークブックでもテキストをフォーマットしていません。

    Sub Format_Workbooks()

    'This macro requires that a reference to Microsoft Scripting Routine

    'be selected under Tools\References in order for it to work.

    Application.DisplayAlerts = False

    Application.ScreenUpdating = False

    Dim fso As New FileSystemObject

    Dim source As Scripting.Folder

    Dim wbFile As Scripting.File

    Dim book As Excel.Workbook

    Dim sheet As Excel.Worksheet

    Set source = fso.GetFolder("C:\Documents and Settings\The Thing\My Documents\Excel Workbooks")

    For Each wbFile In source.Files

    If fso.GetExtensionName(wbFile.Name) = "xls" Then

      Set book = Workbooks.Open(wbFile.Path)

      For Each sheet In book.Sheets

        With sheet       

        .Cells.Font.Name = "Whatever font I want to use"

        .Cells.Font.Size = 10

        .Cells.HorizontalAlignment = xlLeft

        End With

      Next

      book.Close

    End If

    Next

End Sub

マクロを意図したとおりに動作させるには、どのような変更を加える必要がありますか?

また、「Microsoft Scripting Routine」を使用したことがないので、このマクロを作成する際に取ったアプローチが、自分が述べた目標に対して正しいのか、それとも最初から書き直すべきなのか疑問に思っています。

ご協力いただきありがとうございます。

4

2 に答える 2

4

ファイルタイプが混在している場合は、次のようにファイルタイプをフィルタリングできるため、Dir関数を使用してパフォーマンスが向上する可能性があります。

ブレットの提案に従って編集

Sub FormatFiles()
    Const fPath As String = "D:\My Documents\"
    Dim sh As Worksheet
    Dim sName As String

    With Application
        .Calculation = xlCalculationManual
        .EnableEvents = False
        .ScreenUpdating = False
    End With

    sName = Dir(fPath & "*.xls*")

    Do Until sName = ""
        With GetObject(fPath & sName)
            For Each sh In .Worksheets
                With sh
                    .Cells.HorizontalAlignment = xlLeft
                    .Cells.Font.Name = "Tahoma"
                    .Cells.Font.Size = 10
                End With
            Next sh
            .Close True
        End With
        sName = Dir
    Loop

    With Application
        .Calculation = xlAutomatic
        .EnableEvents = True
        .ScreenUpdating = True
    End With
End Sub
于 2012-03-04T21:48:24.683 に答える
1

次のステートメントは、警告が表示されないことを意味します。

Application.DisplayAlerts = False

あなたが見逃している警告は次のものです:

book.Close

行った変更を保存するかどうかを尋ねられます。この質問を無視すると、「いいえ」と答えることになります。

推奨されるアクション:

  1. 消去Application.DisplayAlerts = False
  2. book.Save各保存を確認したくない場合は、終了前に追加してください。
于 2012-03-04T21:31:33.413 に答える