Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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,我有下面的代码,这是创建一个范围的数据验证,但每当我在工作簿中添加此代码。 收到此错误“我们在打开工作簿时发现某些内容有问题”,但当我从工作簿中删除此内容时,它工作正常 当我点击Savetheupdateddataintheworkbook时,它提供了选择一个文件夹来保存文件的选项 有人能看看这是什么问题的代码 Dim list1 As Range Application.EnableEvents = False Dim validationForm

我有下面的代码,这是创建一个范围的数据验证,但每当我在工作簿中添加此代码。 收到此错误
“我们在打开工作簿时发现某些内容有问题”
,但当我从工作簿中删除此内容时,它工作正常

当我点击Savetheupdateddataintheworkbook时,它提供了选择一个文件夹来保存文件的选项

有人能看看这是什么问题的代码

Dim list1               As Range
    Application.EnableEvents = False
    Dim validationFormula   As String

    Set list1 = Sheet3.Range("A1:A100")

    Dim myCell As Range
    For Each myCell In list1
        If Not IsEmpty(myCell) Then
            validationFormula = validationFormula & myCell.Value2 & ","
        End If
    Next

    validationFormula = validationFormula & Chr(160)

    With Sheet1.Range("C4:C2000").Validation
        .Delete
        .Add Type:=xlValidateList, Operator:=xlBetween, Formula1:=validationFormula
        .IgnoreBlank = False
        .InCellDropdown = True
end with

可能是公式1的长度超过255个字符,但“公式1是数据验证方程的第一部分。值不得超过255个字符。”(来自MS docs validation.Add method(Excel))

此代码可以正常工作:

Sub ver()
    Dim list1 As Range
    Application.EnableEvents = False
    Dim validationFormula   As String

    Set list1 = sheet1.Range("A1:A100")

    Dim myCell As Range
    For Each myCell In list1
        If Not IsEmpty(myCell) Then
            validationFormula = validationFormula & myCell.Value2 & ","
        End If
    Next

    validationFormula = Left(validationFormula, 255)
    If Right(validationFormula, 1) = "," Then validationFormula = Left(validationFormula, Len(validationFormula) - 1)

    With sheet1.Range("C4:C2000").Validation
        .Delete
        .Add Type:=xlValidateList, Operator:=xlBetween, Formula1:=validationFormula
        .IgnoreBlank = False
        .InCellDropdown = True
    End With
    Application.EnableEvents = True
End Sub

可能是公式1的长度超过255个字符,但“公式1是数据验证方程的第一部分。值不得超过255个字符。”(来自MS docs validation.Add method(Excel))

此代码可以正常工作:

Sub ver()
    Dim list1 As Range
    Application.EnableEvents = False
    Dim validationFormula   As String

    Set list1 = sheet1.Range("A1:A100")

    Dim myCell As Range
    For Each myCell In list1
        If Not IsEmpty(myCell) Then
            validationFormula = validationFormula & myCell.Value2 & ","
        End If
    Next

    validationFormula = Left(validationFormula, 255)
    If Right(validationFormula, 1) = "," Then validationFormula = Left(validationFormula, Len(validationFormula) - 1)

    With sheet1.Range("C4:C2000").Validation
        .Delete
        .Add Type:=xlValidateList, Operator:=xlBetween, Formula1:=validationFormula
        .IgnoreBlank = False
        .InCellDropdown = True
    End With
    Application.EnableEvents = True
End Sub

请尝试下一种方式:

   Dim list1 As Range
    Application.EnableEvents = False
    Dim validationFormula As String

    Set list1 = Sheet3.Range("A1:A100")
    validationFormula = Join(Application.Transpose(Application.index(list1, 0, 1)), ",")

    With Sheet1.Range("C4:C2000").Validation
        .Delete
        .Add Type:=xlValidateList, Operator:=xlBetween, Formula1:=validationFormula
        .IgnoreBlank = False
        .InCellDropdown = True
   End With
   Application.EnableEvents = True
End Sub

请尝试下一种方式:

   Dim list1 As Range
    Application.EnableEvents = False
    Dim validationFormula As String

    Set list1 = Sheet3.Range("A1:A100")
    validationFormula = Join(Application.Transpose(Application.index(list1, 0, 1)), ",")

    With Sheet1.Range("C4:C2000").Validation
        .Delete
        .Add Type:=xlValidateList, Operator:=xlBetween, Formula1:=validationFormula
        .IgnoreBlank = False
        .InCellDropdown = True
   End With
   Application.EnableEvents = True
End Sub

权限是否设置为打开宏?使用宏另存为excel工作簿。在VBA代码中,确保没有自动打开功能-可能有一些代码正在崩溃。否。保存的宏在没有宏的情况下可以正常工作,在没有更新宏的情况下也可以正常工作。无论我在工作表或模块中更新上述宏,都会出现错误。是否设置了打开宏的权限?使用宏另存为excel工作簿。在VBA代码中,确保没有自动打开功能-可能有一些代码正在崩溃。否。保存的宏在没有宏的情况下可以正常工作,在没有更新宏的情况下也可以正常工作。无论我在表格或模块中更新上述宏时出现错误,都可以使用此代码的替代品@Ааааааааааа,也可以使用此代码的替代品@学习:很高兴我能提供帮助!但请注意:我使用了您的代码,但最后没有使用Application.EnableEvents=True。这意味着在运行代码后,应用程序不再启用事件。我现在添加这一行,再次查看代码……我明白你的意思了@FaneDuru谢谢你讲清楚了。@Learning:很高兴我能帮上忙!但请注意:我使用了您的代码,但最后没有使用Application.EnableEvents=True。这意味着在运行代码后,应用程序不再启用事件。我现在添加这一行,再次查看代码…我明白你的意思@FaneDuru谢谢你说得清楚。