Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.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 如何将Visual Basic Multi-Select应用于列?_Excel_Vba - Fatal编程技术网

Excel 如何将Visual Basic Multi-Select应用于列?

Excel 如何将Visual Basic Multi-Select应用于列?,excel,vba,Excel,Vba,我不熟悉Excel代码的编程,但我能够在下拉列表中找到一个应用Multi-Select的代码,无需重复。但是,它只适用于这一个单元格,所以我只需要遍历每个单元格,将该规则应用于每个单独的单元格。如果可能的话,我想将此规则应用于该列 Private Sub Worksheet_Change(ByVal Target As Range) 'Code by Sumit Bansal from https://trumpexcel.com ' To allow multiple sele

我不熟悉Excel代码的编程,但我能够在下拉列表中找到一个应用Multi-Select的代码,无需重复。但是,它只适用于这一个单元格,所以我只需要遍历每个单元格,将该规则应用于每个单独的单元格。如果可能的话,我想将此规则应用于该列

Private Sub Worksheet_Change(ByVal Target As Range)
    'Code by Sumit Bansal from https://trumpexcel.com
    ' To allow multiple selections in a Drop Down List in Excel (without repetition)
    Dim Oldvalue As String
    Dim Newvalue As String
    Application.EnableEvents = True
    On Error GoTo Exitsub

    If Target.Address = "$E$13" Then

        If Target.SpecialCells(xlCellTypeAllValidation) Is Nothing Then
            GoTo Exitsub
        Else: If Target.Value = "" Then GoTo Exitsub Else

            Application.EnableEvents = False
            Newvalue = Target.Value
            Application.Undo
            Oldvalue = Target.Value

            If Oldvalue = "" Then
                Target.Value = Newvalue
            Else
                If InStr(1, Oldvalue, Newvalue) = 0 Then
                    Target.Value = Oldvalue & ", " & Newvalue
                Else:
                    Target.Value = Oldvalue
                End If
            End If

        End If

    End If
    Application.EnableEvents = True
    Exitsub:
    Application.EnableEvents = True
End Sub

您要检查的不是
Target.Address
,而是
Target.Column

If Target.Column = 5 Then
您可能还需要检查
Target
是否只是一列。例如,
Range(“E5:G5”)。Column
仍将返回
5

您可以通过以下方式执行此操作:

If Target.Columns.Count = 1 Then
或一起:

If Target.Columns.Count = 1 And Target.Column = 5 Then

您要检查的不是
Target.Address
,而是
Target.Column

If Target.Column = 5 Then
您可能还需要检查
Target
是否只是一列。例如,
Range(“E5:G5”)。Column
仍将返回
5

您可以通过以下方式执行此操作:

If Target.Columns.Count = 1 Then
或一起:

If Target.Columns.Count = 1 And Target.Column = 5 Then

您的问题是将代码作为文本而不是图像包含。使用backticks`使用markdown您要对照某个范围检查
目标(更改的单元格)。提供了很好的指导来完成它。@erazorv4我已经对它进行了调整。@PeterT我试图将它添加到我的单元格中并调整范围。它表示存在编译错误:检测到不明确的名称:工作表\u更改工作表模块中只能有一个工作表\u更改实例。您的问题是将代码作为文本而不是图像包含。使用backticks`使用markdown您要对照某个范围检查
目标(更改的单元格)。提供了很好的指导来完成它。@erazorv4我已经对它进行了调整。@PeterT我试图将它添加到我的单元格中并调整范围。它表示存在编译错误:检测到不明确的名称:工作表\u更改工作表模块中只能有一个工作表\u更改实例。