2017-02-09 11 views
0

ドロップダウンリストでマクロをトリガーしようとしています。これまでは、データを選択して列ごとにソートする作業マクロがあります。マクロは完全に機能します。ドロップダウンリストでマクロをトリガーする

マクロの例:

Sub Macro1() 
' 
' Macro1 Macro 
' 
' Keyboard Shortcut: Option+Cmd+s 
' 
    Range("A1:AO125").Select 
    Range("A2").Activate 
    ActiveWorkbook.Worksheets("Test Model").Sort.SortFields.Clear 
    ActiveWorkbook.Worksheets("Test Model").Sort.SortFields.Add Key:=Range(_ 
     "R2:R125"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _ 
     xlSortNormal 
    With ActiveWorkbook.Worksheets("Test Model").Sort 
     .SetRange Range("A1:AO125") 
     .Header = xlYes 
     .MatchCase = False 
     .Orientation = xlTopToBottom 
     .SortMethod = xlPinYin 
     .Apply 
    End With 
    Range("C7").Select 
End Sub 

私は、ドロップダウンリストで、このマクロをトリガしたいと思います。私はドロップダウンリストを作成し、VBエディタでExcelのブックの列の下にいくつかの構文を書いています。ここで

は、これまでの構文は次のとおりです。

Private Sub Worksheet_Change(ByVal Target As Range) 

If Not Intersect(Target, Range("J15")) Is Nothing Then 

    Select Case Range("J15") 


     Case "Engagement Rate % ": Macro1 


    End Select 

End If 

End Sub 

私は、コードは何も実行しないようにしようとすると起こる...誰かが私の構文で私を助けることができますか?

説明に役立つように私の下の画面のスナップショットを追加しました。

Drop Down Example

+0

をあなたは間違いなく有効イベントを持っていますか? %の後ろにスペースがありますか? – SJR

+0

あなたのお返事ありがとうございますSRJこれは初めてVBAを使用しているので、イベントはデフォルトではオンにならないはずですか? –

+0

通常は、直接ウィンドウ(Ctrl + G)を開き、 '?application.enableevents'と入力してreturnキーを押すことで確認できます。 Falseを返す場合は、 'application.enableevents = true'と入力します。また、このコードを正しいシートモジュールに入れてください。 – SJR

答えて

0

ただ、以下のコードにWorksheet_Changeイベントにコードを変更します。

セル「J15」の値が「エンゲージメント率%」の場合は、Macro1と表示されます(末尾にのスペース?!)。

Private Sub Worksheet_Change(ByVal Target As Range) 

Application.EnableEvents = True ' <-- just for tests 
If Not Intersect(Target, Range("J15")) Is Nothing Then  
    Select Case Target.Value 
     Case "Engagement Rate % " 
      Macro1 

    End Select  
End If 

End Sub 

し、代わりにあなたの"にMacro1"MsgBoxポップどうかを確認)のこのコード試してみてください。

Option Explicit 

Sub Macro1() 
    ' Macro1 Macro 
    ' Keyboard Shortcut: Option+Cmd+s 

    MsgBox "Hello Test" 
    'Range("A1:AO125").Select 
    'Range("A2").Activate 

    With Worksheets("Test Model") 
     .Sort.SortFields.Clear 
     .Sort.SortFields.Add Key:=Range("R2:R125"), SortOn:=xlSortOnValues, Order:=xlDescending, _ 
          DataOption:=xlSortNormal 

     With .Sort 
      .SetRange Range("A1:AO125") 
      .Header = xlYes 
      .MatchCase = False 
      .Orientation = xlTopToBottom 
      .SortMethod = xlPinYin 
      .Apply 
     End With 
     '.Activate ' <-- not sure why it's needed 
     '.Range("C7").Select ' <-- not sure why it's needed 
    End With 

End Sub 
+0

お返事ありがとうございます。私は変更を加えたが、何も起こらない。私はまた、それが実行されているが、何もないかどうかを確認するためにスペースを削除しました。おそらく上記のSJRのように私はイベントを有効にする必要がありますか? –

+0

@ c.p.manは私の答えを読んで、私の編集したコードを試してみて、何が起こったのか教えてください –

+0

ありがとう!今、マクロを発射しているようだ。素晴らしい助け! –

関連する問題