1

写我的想法有点令人困惑,但我会试一试。这是我能做的。我的垂直单元格上有一个下拉列表,因此我有一个名称列表可供选择,这些名称由 [name]-> [define] 和 [data] -> [validation] 链接。我想要的是另一个垂直单元格来填充另一个下拉列表,具体取决于第一个的条件。

例如,我有一份水果和蔬菜的清单。我的第一个下拉菜单询问类型,所以我选择水果。由于这样的选择,我的第二个下拉菜单只会给我一个水果列表(没有蔬菜),反之亦然。+

非常感谢您的帮助。

谢谢帮!


如果我想命名单元格而不是蔬菜,但 2009 和水果 2010 会出现错误。有办法吗?谢谢

4

3 回答 3

4

让我们使用一些命名范围。

名称 E7“选项”

将“蔬菜”放入E4,将“水果”放入E5;

在 E7 中,数据 > 验证 > 列表,源 $E$4:$E$5;

将一些蔬菜放入H4:H7;将该范围命名为“蔬菜”;

将一些水果放入J4:J7;将该范围命名为“水果”;

现在,在 E8 中:数据 > 验证 > 列表,来源“=INDIRECT(option)”。

当您在 E7 中做出选择时,E8 的选项会相应设置。

于 2009-04-08T23:39:40.497 回答
0

这是我的代码,可以完全按照您的要求进行操作。

我已将独立列定义为命名范围Major_Category,并将下拉验证设置为数据列表。然后,我有几个其他名为 的数据列表cat_subItems。因此,对于您的示例,主要类别将包含项目

  • 水果
  • 蔬菜

然后我定义了更多的列表,称为

  • 猫果
  • cat_vegetable

其中将包含水果或蔬菜的名称。然后根据主要类别选择,Worksheet_change 事件会将下一列中的下拉验证更改为cat_fruitcat_vegetable

注意:如果您使用的是 excel 的保护工作表,则此代码效果不佳。请参阅此问题以处理 Excel 的工作表/书籍保护。

Public Sub Worksheet_Change(ByVal target As Range)
On Error GoTo ErrHandler:

Dim VRange As Range, cell As Range
Dim msg As String
Dim validateCode As Variant
Dim modCell As Range
Set VRange = Range("Major_Category")

If Intersect(VRange, target) Is Nothing Then Exit Sub

For Each cell In Intersect(VRange, target)
    b = cell.Value
    curRow = target.Row

    Set modCell = cell.Offset(0, 1) 'cell to modify the validation'

    If Not (b = "") Then
        modCell.Validation.Delete
        modCell.Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _

        'sets the validation formula to the list/range name'
        xlBetween, Formula1:="=cat_" & b 

        modCell.Validation.IgnoreBlank = True
        modCell.Validation.InCellDropdown = True
        modCell.Validation.InputTitle = ""
        modCell.Validation.ErrorTitle = ""
        modCell.Validation.ErrorMessage = ""
        modCell.Validation.ShowInput = True
        modCell.Validation.ShowError = True

    End If
Next cell


Cleanup:

Exit Sub

ErrHandler:
MsgBox Err, vbOKOnly, "Error Occurred"
Resume Cleanup:

End Sub
于 2009-04-08T23:16:35.933 回答
0

您不能将范围命名为“2009” - 因为 Excel 无法将其与整数值 2009 区分开来。还有一些其他限制 - 您不能将范围命名为“A1”,因为 Excel 会与单元格混淆A1。您可以做的是将 2009 和 2010 放在一个表中,并在它们旁边放置范围的名称,然后执行 VLOOKUP 以获取范围名称。或者,您可以使用“_2009”并将您的公式设置为

=INDIRECT("_" & 选项)

于 2009-04-09T19:52:02.257 回答