【问题标题】:Create Multiple Data Validation Lists in One Sheet with VBA使用 VBA 在一张表中创建多个数据验证列表
【发布时间】:2016-05-20 02:33:02
【问题描述】:

下午好。我正在使用 VBA 构建数据库。现在我在一张纸上有三个数据验证下拉菜单。每个菜单都有一个列表,其中包含我可以单击并调用宏的项目。这些宏的功能是在另一个工作表上打印出一些项目。这是我的数据验证代码。

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$B$3" Then
    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
         End Select
End If
End Sub

这是第一次数据验证的代码。我还有另外两个需要具有相同功能的数据验证列表。但是,我无法将数据验证所在的单元格分配给具有这种格式的另一个代码,否则当前代码将停止工作。我试图更改 Private_sub 工作表名称,但它不会这样做。我该怎么做?

提前谢谢你!

【问题讨论】:

  • 你能扩展你正在尝试做的事情吗(也许有一些伪代码)?你不能在其他验证中使用B3
  • Target.Address = "$B$3" 或 Target.Address = "$C$3"
  • 或选择案例地址,然后在选择案例内容中
  • @BruceWayne。情况是,现在我有三个独立的数据验证,每个都有一个项目列表,我可以单击并调用一个宏来运行。就像上面的代码一样,当我在 B3 单元格中选择一个项目时,将执行相应的宏,并且这个宏完美运行。与此同时,我还有另外两个数据验证应该在同一个工作表上具有与这个相同的功能。我尝试使用格式来实现,只有将目标地址单元格更改为B4或B5,它不起作用,并且会损害当前的功能。
  • @Nathan_Sav,请检查我留下的评论或布鲁斯,我确定是 B3。

标签: vba excel validation


【解决方案1】:

这不是答案!但是cmets不允许提出这么复杂的问题,一澄清就会删掉。(或者改成答案)

现在还不清楚你想要什么。如果要执行的宏相同,那么您可以像 Nathan_Sav 的评论中那样:

Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Address = "$B$3" Or Target.Address = "$C$3" Then
    Select Case Target.Value2
    Case "ABCP"
      Call Macro1
    Case "Accounting Policy"
      Call Macro2
    ....

但是如果他们用相同的值调用不同的宏,那么你可以这样做:

Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Address = "$B$3" Or Target.Address = "$C$3" Then
    Select Case Target.Value2
    Case "ABCP"
      If Target.Address = "$B$3" Then Call Macro1 Else Call Macro101
    Case "Accounting Policy"
      If Target.Address = "$B$3" Then Call Macro2 Else Call Macro102
      ....

如果它们完全不同,那么你可以这样做:

Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Address = "$B$3" Or Target.Address = "$C$3" Then
    Select Case Target.Value2
    Case "ABCP"
      Call Macro1
    Case "Accounting Policy"
      Call Macro2
    ....
    Case "Canadian Market"
      Call Macro10
    Case "ABCP-x"
      Call Macro101
    Case "Accounting Policy-x"
      Call Macro102
    ....
    Case "Canadian Market-x"
      Call Macro110
    End Select

或者像这样拆分两个案例:

Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Address = "$B$3" Then
    Select Case Target.Value2
    Case "ABCP"
      Call Macro1
    Case "Accounting Policy"
      Call Macro2
    ....
    Case "Canadian Market"
      Call Macro10
    End Select

  ElseIf Target.Address = "$C$3" Then

    Select Case Target.Value2
    Case "ABCP-x"
      Call Macro101
    Case "Accounting Policy-x"
      Call Macro102
    ....
    Case "Canadian Market-x"
      Call Macro110
    End Select

如果他们使用相同的宏但具有不同的值,您可以通过Case "ABCP, "some different string" 进行操作。但是,如果需要所有验证来评估要调用哪个宏,它将在下次更改。

如果您只需要知道宏中更改了哪个单元格来调用,您需要像这样交出它们:(只是一个展示其工作原理的示例)

Private Sub Worksheet_Change(ByVal Target As Range)
  Call TestMacro(Target)
End Sub

Sub TestMacro(rng as Range)
  Debug.Print rng.Address
End Sub

仍然需要一些澄清。请帮助我们帮助您

【讨论】:

  • 只是为了让您更难以删除 ++,实际上我认为您涵盖了所有基础。这与提供的信息一样好。
  • 我对不同的数据验证列表有不同的宏。我认为第三个和第四个代码正是我所需要的。真的很感激!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多