1

私は通常同時に開いたままにしている 2 つの Excel ファイルを持っています。問題は、それらの両方が開かれると、マクロがマクロを持たないファイルでも機能し、問題になることです。作成されたファイルでのみ機能することを確認するにはどうすればよいですか?

OS : WIN Vista Business 16

大きい :

Sub riordino()
'
' riordino Macro
' Macro recorded 4/14/2007 by User
'
' Keyboard Shortcut: Ctrl+l
'
    Range("A1:L200").Select
    Selection.Sort Key1:=Range("C2"), Order1:=xlAscending, Key2:=Range("D2") _
        , Order2:=xlAscending, Key3:=Range("A2"), Order3:=xlAscending, Header:= _
        xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
    Range("A2").Select
    ActiveWorkbook.Save
End Sub
4

3 に答える 3

0

マクロ コードを実行するシートのワークシート モジュール内に配置できます。これを行うと、オブジェクトにアクセスできるようになりMeます。この場合は、ワークシートを参照します。したがって、シート名をハードコードする必要はありません。また、他の場所からサブを呼び出すことはできますが、変更が行われる前に終了します。

例: マクロを sheet1 で実行する場合は、それを sheet1 モジュール内に配置します。

Sub riordino()

If Not Me.Name = Application.ActiveSheet.Name Then Exit Sub

Me.Range("A1:L22").Sort _
    Key1:=Me.Range("C2"), _
    Order1:=xlAscending, _
    Key2:=Me.Range("D2"), _
    Order2:=xlAscending, _
    Key3:=Me.Range("A2"), _
    Order3:=xlAscending, _
    Header:=xlGuess, _
    OrderCustom:=1, _
    MatchCase:=False, _
    Orientation:=xlSortRows

Me.Range("A2").Select

ThisWorkbook.Save

End Sub

アップデート

マクロ レコーダーを使用してマクロを作成すると、「モジュール 1」(または 2 または 3 など) と呼ばれるモジュールが作成されます。VBA エディターを開いてプロジェクト エクスプローラーを見ると、"Sheet 1" (この場合は "Current") という項目があります。その項目をダブルクリックして、エディター ウィンドウにコードを貼り付けます。

VBA プロジェクト エクスプローラーのワークシート モジュールを示す画像

更新 2

コードを投稿するときは質問を編集してそこに含めてください。読みやすくなり、誰もがコメントを調べなくても読むことができます。

生成されたコードを私のものと同じように変更する必要があります。違いは最小限であるため、他に同様のマクロがある場合は、残りを調整するのはかなり簡単です。(コードのフォーマットは関係ありません。読みやすさのためだけです)

Sub Ordinare()
If Not Me.Name = Application.ActiveSheet.Name Then Exit Sub
Me.Range("A2:L201").Sort _
    Key1:=Me.Range("C2"), _
    Order1:=xlAscending, _
    Key2:=Me.Range("D2"), _
    Order2:=xlAscending, _
    Key3:=Me.Range("A2"), _
    Order3:=xlAscending, _
    Header:= xlGuess, _
    OrderCustom:=1, _
    MatchCase:=False, _
    Orientation:=xlTopToBottom, _
    DataOption1:=xlSortNormal, _
    DataOption2:=xlSortNormal, _
    DataOption3:= xlSortNormal
Me.Range("A2").Select
ThisWorkbook.Save
End Sub

これを「Sheet N(Current)」モジュールに貼り付けると、「Module11」は不要になります。(そのままにしておくと問題が発生します) キーボード ショートカットも機能しなくなります。メインの Excel ウィンドウのマクロ ダイアログの [編集] ボタンを使用して再構成する必要があります。

于 2013-05-24T19:22:54.050 に答える
0

これは、マクロをアクティブにする必要があるかどうかをテストするのに役立ちます - チェックThisWorkbookしてくださいActiveWorkbook

例:

Public Sub test1()
If ThisWorkbook.Name = ActiveWorkbook.Name Then
    Debug.Print "ok to run"
Else
    Debug.Print "not ok"
End If
End Sub
于 2013-05-24T19:05:53.327 に答える