Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 向表中列中的所有单元格添加下拉列表_Excel_Vba - Fatal编程技术网

Excel 向表中列中的所有单元格添加下拉列表

Excel 向表中列中的所有单元格添加下拉列表,excel,vba,Excel,Vba,我做了一个教程,使下拉列表中的单元格,并提出了这个代码 Sub test() AddYesNoDropdown ("H5") End Sub Public Function AddYesNoDropdown(r) With Range(r).Validation .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetwe

我做了一个教程,使下拉列表中的单元格,并提出了这个代码

Sub test()
    AddYesNoDropdown ("H5")
End Sub

Public Function AddYesNoDropdown(r)
    With Range(r).Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="Yes, No"
        .IgnoreBlank = False
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = False
        .ShowError = False
    End With
End Function
我需要在命名表(ListObject?)中的每个单元格中执行此操作,以按名称引用列,而不是索引,以防表列被移动或重命名等

我尝试过上网搜索,也尝试过自己,但我不知道从哪里开始。一旦我开始尝试在一张桌子上做一些事情,它就会变得混乱…例如

不得不做

.ListColumns("Expected Ship Date?").Range.ColumnWidth = 10.14
而不是

.Columns("A").ColumnWidth = 10.14

我知道这可能很简单…

您可以这样做,使用Match查找相关列,然后将表中的该列作为一个范围传递给您的函数。因此,这会将DV添加到该列中的每个单元格中

Sub test()

Dim v As Variant

With Sheet1.ListObjects("Table1")
    v = Application.Match("Heading 2", .HeaderRowRange, 0) 'in my example returns 2
    If IsNumeric(v) Then AddYesNoDropdown .ListColumns(v).DataBodyRange
End With

End Sub

Public Function AddYesNoDropdown(r As Range)
    With r.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="Yes, No"
        .IgnoreBlank = False
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = False
        .ShowError = False
    End With

End Function

您可以这样做,使用Match查找相关列,然后将表中的该列作为一个范围传递给您的函数。因此,这会将DV添加到该列中的每个单元格中

Sub test()

Dim v As Variant

With Sheet1.ListObjects("Table1")
    v = Application.Match("Heading 2", .HeaderRowRange, 0) 'in my example returns 2
    If IsNumeric(v) Then AddYesNoDropdown .ListColumns(v).DataBodyRange
End With

End Sub

Public Function AddYesNoDropdown(r As Range)
    With r.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="Yes, No"
        .IgnoreBlank = False
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = False
        .ShowError = False
    End With

End Function

完美。非常感谢。我相信这不是我引用ListObjects遇到的最后一个麻烦…很高兴它成功了。这里有一个很好的指南。非常感谢。我相信这不是我引用ListObjects遇到的最后一个麻烦…很高兴它成功了。这里有一个很好的导游