2

我有一个选择不同国家的验证列表。每个国家/地区都有不同的卖家,我也必须为他们制作一份验证清单。问题是每次选择不同的国家/地区时,我都必须手动运行宏(使用按钮)。我希望宏在每次使用国家验证列表时运行/激活,而不是手动(按钮)。

我认为不需要我使用的任何代码来解决我的问题。无论如何,我会发布最后一部分。

Dim strFormula1 As String

strFormula1 = "=$z$1:" & Worksheets("graficos").Range("z1").End(xlDown).Address()


With Selection.Validation
    .Delete
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
    xlBetween, Formula1:=strFormula1
    .IgnoreBlank = True
    .InCellDropdown = True
    .InputTitle = ""
    .ErrorTitle = ""
    .InputMessage = ""
    .ErrorMessage = ""
    .ShowInput = True
    .ShowError = True
End With
4

2 回答 2

3

在工作表类模块的Worksheet_Change事件处理程序中调用宏。

在底部的工作表选项卡上,右键单击并选择查看代码。这将打开 VB 编辑器,显示工作表的代码窗格。

在那里,从左上角的对象下拉列表中选择工作表,然后从右上角的事件下拉列表中选择更改。

在事件处理程序中,粘贴代码以调用您的宏

于 2013-04-25T14:50:59.430 回答
3

不确定这是否与您相关,但您是否可以使用 INDIRECT 公式创建验证列表,根据框 1 中的选择而不是使用宏来返回结果?例如:

清单 1 包含英格兰、苏格兰、威尔士和爱尔兰

制作另外 4 个列表,分别称为英格兰、苏格兰、威尔士和爱尔兰,并在每个列表中列出每个国家/地区的相关选项。将每个范围命名为英格兰、苏格兰等...

然后创建新的数据验证列表,源为 =INDIRECT(England) =INDIRECT(Scotland) 等。

抱歉,如果这不是很清楚。我在下面提供了一个汽车修理厂的示例,他们首先从 TYPE 列表中进行选择,第二个列表会根据类型中选择的内容而变化。所有粗体项目都是范围的名称

类型 ?合金保险杠面板纹理内饰

合金 ?N/S/F N/S/R O/S/F O/S/R

保险杠 ?N/S/F 转角 O/S/F 转角 N/S/F 刀片 O/S/F 刀片 前中心 全前 N/S/R 转角 O/S/R 转角 N/S/R 刀片 O/S/ R 插入 后 中心 全 后

面板 ?N/S 翼 N/S/F 门 N/S/R 门 N/S 四分之一 N/S 车顶导轨 N/S 门槛 N/S 镜盖 N/S/F 门把手 N/S/R 门把手 N/ S/F 车门模具 N/S/R 车门模具 O/S 机翼 O/S/F 车门 O/S/R 车门 O/S 四分之一 O/S 车顶导轨 O/S 窗台 O/S 后视镜盖 O/S/ F 车门把手 O/S/R 车门把手 O/S/F 车门成型 O/S/R 车门成型 发动机罩 尾门 车顶 全抛光

纹理 ?N/S/F 保险杠拐角 O/S/F 保险杠拐角 N/S/F 保险杠插件 O/S/F 保险杠插件 前保险杠中心 全前保险杠 N/S/R 保险杠拐角 O/S/R 保险杠拐角 N/ S/R 保险杠嵌件 O/S/R 保险杠嵌件 后保险杠中心 全后保险杠 N/S 后视镜盖 N/S 成型 O/S 后视镜盖 O/S 成型

内饰 ?N/S/F 座椅 O/S/F 座椅 N/S/R 座椅 O/S/R 座椅 N/S/F 地毯 O/S/F 地毯 N/S/R 地毯 O/S/R 地毯 仪表板屏幕芯片

于 2014-07-07T10:55:54.753 回答