使用VBA在一张纸上创build多个数据validation列表

下午好。 我正在用VBAbuild立一个数据库。 现在我在一张表中有三个数据validation下拉菜单。 每个菜单都有一个列表,其中包含我可以点击并调用macros的项目。 这些macros的function是打印出另一个工作表上的一些项目。 这是我的数据validation代码。

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 

这是第一次数据validation的代码。 我有另外两个数据validation列表,需要有相同的function。 但是,我不能将数据validation所在的单元格分配给另一个具有此格式的代码,否则当前的代码将停止工作。 我曾尝试更改Private_sub工作表名称,但它不会执行。 我应该怎么做?

先谢谢你!

这不是一个答案! 但是评论不允许这样复杂的问题,只要澄清一下就会被删除。 (或更改为答案)

现在不清楚你想要什么。 如果要执行的macros是相同的,那么你可以像在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 .... 

但是,如果他们使用相同的值调用不同的macros,则可以这样做:

 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 

如果他们使用相同的macros但是具有不同的值,则可以通过Case "ABCP, "some different string"但是,如果需要所有validation来评估要调用哪个macros,它将会改变另一个时间。

如果您只需要知道macros中哪个单元格发生了变化就可以调用,您需要像这样递交它们(只是一个例子来说明它是如何工作的)

 Private Sub Worksheet_Change(ByVal Target As Range) Call TestMacro(Target) End Sub Sub TestMacro(rng as Range) Debug.Print rng.Address End Sub 

还是需要澄清一些。 请帮助我们帮助你