【问题标题】:Data Validation Calling Macros Failed数据验证调用宏失败
【发布时间】:2016-09-05 22:42:58
【问题描述】:

我就数据验证菜单调用宏提出了几个问题。我已经非常接近解决我的问题了。但是,当我在工作表上应用我的代码时,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 结束子

我有十个宏,内容几乎相同,只是单元格发生了变化。 这是代码:

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

请帮忙改正代码,谢谢!

【问题讨论】:

  • 首先,我强烈建议学习How to avoid using .Activate \ .Select,因为它肯定会引起头痛,尤其是在使用多个工作表时。此外,哪个宏引发错误、Worksheet_Change 事件或Macro 1?它发生在哪一行和什么错误?
  • 嗨,布鲁斯,感谢您的推荐。这是引发错误的宏,即 selection.Autofill 的第四行。
  • 嗯,我试过了,它填满了我。我有一种感觉,因为您使用的是.Select。我会添加一个答案,它会告诉你你的Macro 1 没有.Select,看看是否有帮助。

标签: vba excel


【解决方案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")。你也应该在第一部分这样做,我只是不知道该信息在哪张纸上。

【讨论】:

  • 其实还有一个问题。我将此格式应用于其他宏,我只更改了第一个公式数组,为什么它的结果与 Macro1 相同?
  • @JosephLin - 我不确定。您可以(在您的 OP 中)发布最初的“宏 2”,然后是经过调整的“宏 2”吗?我会看看。主要是,我想说要注意工作表。再次注意,我的答案的第一部分,在换行之前,将在 ActiveSheet 上运行。如果您需要它在特定工作表上运行,请在 Range() 之前添加该名称,就像我在第二部分中所做的那样。
猜你喜欢
  • 1970-01-01
  • 2011-02-03
  • 1970-01-01
  • 2012-07-14
  • 2016-01-04
  • 1970-01-01
  • 1970-01-01
  • 2011-04-13
  • 2017-03-27
相关资源
最近更新 更多