数据验证调用宏失败

时间:2016-05-10 19:24:08

标签: excel vba excel-vba

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

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 结束子

我有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 个答案:

答案 0 :(得分: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")。你也应该为第一部分做到这一点,我只是不知道该信息是什么表。