数据validation调用macros失败

我已经问过关于数据validation菜单调用macros的几个问题。 我已经非常接近解决我的问题了。 但是,当我在工作表上应用我的代码时,Excel总是打印出我最后一个macros的内容。 我的工作表代码如下:

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

我有十个macros,内容几乎相同,只有单元格更改。 这里是代码:

 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中运行macros时,它也通知我自动填充范围失败。

请帮助更正代码,谢谢!

我觉得这个问题可能是使用.Select 。 尝试用这个replace你的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") 。 第一部分你也应该这样做,我只是不知道信息是在什么表单上。