2016-05-10 2 views
0

データ検証メニュー呼び出しマクロに関していくつか質問がありました。私は私の問題を解決するために非常に近くに来ました。ただし、ワークシートにコードを適用すると、最後のマクロの内容を常に印刷することができます。 ワークシートのための私のコードは以下の通りです:データ検証コールマクロが失敗しました

Option Explicit 

Private Sub Worksheet_Change(ByVal Target As Range) 
If Target.Address = "$B$3" Then 
    On Error GoTo bm_Safe_Exit 
    Application.EnableEvents = False 
    Select Case Target.Value2 
     Case "ABCP" 
      Call Macro1 
     Case "Accounting Policy" 
      Call Macro2 
     Case "Audit Committee" 
      Call Macro3 
     Case "Auto" 
      Call Macro4 
     Case "Auto Issuer Floorplan" 
      Call Macro5 
     Case "Auto Issuers" 
      Call Macro6 
     Case "Board of Director" 
      Call Macro7 
     Case "Bondholder Communication WG" 
      Call Macro8 
     Case "Canada" 
      Call Macro9 
     Case "Canadian Market" 
      Call Macro10 
      Case Else 
       'Do Nothing 
    End Select 
End If 

bm_Safe_Exit: Application.EnableEvents = Trueの End Subの

は、私が10個のマクロを持っており、内容はほとんど同じ、唯一の細胞の変化です。

Sub Macro1() 
Range("F2").Select 
Selection.FormulaArray = _ 
    "=IF(COUNTIF(Database!R2C35:R10000C35,Committees!R2C1)>=ROW(Committees!R2C:RC),INDEX(Database!R2C[-5]:R10000C[-5],SMALL(IF(Database!R2C35:R10000C35=Committees!R2C1,ROW(Database!R2C35:R10000C35)-ROW(Database!R2C35)+1),ROWS(Committees!R2C:RC))),"""")" 
Selection.AutoFill Destination:=Range("F2:T2"), Type:=xlFillDefault 
Range("F2:T2").Select 
Selection.AutoFill Destination:=Range("F2:T5000") 
Range("F2:T5000").Select 
Sheets("Reports").Select 
Range("F2").Select 
Selection.FormulaArray = "=IF(ISERROR(Committees!RC),"""",Committees!RC)" 
Selection.AutoFill Destination:=Range("F2:T2"), Type:=xlFillDefault 
Range("F2:T2").Select 
Selection.AutoFill Destination:=Range("F2:T5000") 
Range("F2:T5000").Select 
Range("E2").Select 
End Sub 

私はVBAでマクロを実行すると、それはまた、オートフィルレンジが失敗したことを私に通知: そしてここでは、コードです。

コードを修正してください、ありがとう!

+1

まず、私は*** [非常に簡単に '.Activate \ .Select'を使用しないでください(http://stackoverflow.com/questions/10714251/how-to-avoid-using-select -in-excel-vba-macros)を使用すると、特に複数のワークシートを使用しているときに頭痛を引き起こす可能性があります。また、どのマクロがエラー、Worksheet_Changeイベント、または「マクロ1」をスローしていますか?どのラインで何が起こりますか? – BruceWayne

+0

こんにちはブルース、お勧めします。それはエラーをスローしているマクロ、選択肢の4行目です。オートフィル。 –

+0

うーん、私はそれを試み、それは私のために満たされた。あなたが '.Select'を使っているからです。私はあなたの 'Macro 1'を' .Select'なしで表示し、それが何かを助けるかどうかを見る答えを追加します。 – BruceWayne

答えて

1

おそらく問題はおそらく.Selectの使用だと思います。これであなたのMacro 1を交換してみてください:

Sub Macro_1() 

Range("F2").FormulaArray = _ 
    "=IF(COUNTIF(Database!R2C35:R10000C35,Committees!R2C1)>=ROW(Committees!R2C:RC),INDEX(Database!R2C[-5]:R10000C[-5],SMALL(IF(Database!R2C35:R10000C35=Committees!R2C1,ROW(Database!R2C35:R10000C35)-ROW(Database!R2C35)+1),ROWS(Committees!R2C:RC))),"""")" 
Range("F2").AutoFill Destination:=Range("F2:T2"), Type:=xlFillDefault 
Range("F2:T2").AutoFill Destination:=Range("F2:T5000") 

Sheets("Reports").Activate ' not needed, but there just in case you want to step through with F8 
Sheets("Reports").Range("F2").FormulaArray = "=IF(ISERROR(Committees!RC),"""",Committees!RC)" 
Sheets("Reports").Range("F2").AutoFill Destination:=Sheets("Reports").Range("F2:T2"), Type:=xlFillDefault 
Sheets("Reports").Range("F2:T2").AutoFill Destination:=Sheets("Reports").Range("F2:T5000") 

End Sub 

第二部内のすべてのSheets("Reports")に注意してください。あなたはまた、最初の部分のためにそれを行う必要があります、私はちょうどその情報があったシートを知りませんでした。

+0

それは完璧に働いた、ありがとう! –

+0

実際にはもう1つ質問です。このフォーマットを他のマクロに適用したところ、最初の数式配列を変更しただけで、なぜMacro1と同じ結果になるのですか? –

+0

@JosephLin - わかりません。あなたは(あなたのOPの中に)もともと「マクロ2」と言って、それから微調整された「マクロ2」と言うことができますか?私は見てみましょう。主に、私はワークシートに注意を払うと言うでしょう。私の答えの最初の部分は、その改行の前に、 'ActiveSheet'が何であれ実行されます。特定のシート上で実行する必要がある場合は、2番目の部分のように 'Range() 'の前にその名前を追加します。 – BruceWayne

関連する問題