0

販売見積もりを作成して書式設定する Excel VBA マクロがあります。結合されたセルを自動調整する機能があります。説明フィールドには長いものと短いものがあるため、この関数を使用して説明フィールドを自動調整します。典型的な見積もりでは、この関数は約 40 回呼び出されます。マクロは 1 秒以内に完了します。まったく同じマクロをもう一度実行すると (おそらく、表示方法の設定が異なる可能性があります)、30 ~ 60 秒以上かかります。次のブロックを除いて、実行ごとに遅くなるマクロの残りの部分はありません。

まったく同じ入力セットに対して、このコードの実行を遅くする可能性のあるものはありますか?

Sub AutoFit_Height(ByVal Target As Range)
Dim MergeWidth As Single
Dim cM As Range
Dim CWidth As Double
Dim NewRowHt As Double

With Target
    .MergeCells = False
    CWidth = .Cells(1).ColumnWidth
    MergeWidth = 0
    For Each cM In Target
        cM.WrapText = True
        MergeWidth = cM.ColumnWidth + MergeWidth
    Next
    'small adjustment to temporary width
    MergeWidth = MergeWidth + Target.Cells.count * 0.66
    .Cells(1).ColumnWidth = MergeWidth
    .EntireRow.AutoFit
    NewRowHt = .RowHeight
    .Cells(1).ColumnWidth = CWidth
    .MergeCells = True
    .RowHeight = NewRowHt
End With
End Sub
4

3 に答える 3

0

コードの本体 (このサブルーチンを呼び出すもの) の先頭に移動し、追加します。

Application.ScreenUpdating = False

最初の行の 1 つとして。次に、その関数の最後で、このサブルーチンが呼び出された後、再びオンにします。

Application.ScreenUpdating = True

これにより、列/行のサイズが変更されるたびに画面が再描画されなくなり、実行時間が大幅に短縮されます。

于 2013-09-05T21:58:43.757 に答える