关于数据验证菜单调用宏,我问了几个问题。我已经非常接近解决我的问题了。但是,当我在工作表上应用我的代码时,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中运行宏时,它还通知我自动填充范围失败。
请帮助纠正代码,谢谢!
答案 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")
。你也应该为第一部分做到这一点,我只是不知道该信息是什么表。