使用 with 激活工作簿后丢失变体

问题描述 投票:0回答:1

我有一本工作簿,里面有很多我已经使用多年的代码。其中一个工作表包含用于创建验证列表并使用特定文件夹中的文件夹名称填充验证列表的代码。该代码成功创建了一个包含所有文件夹名称列表的变体,但是当我使用 with 命令选择活动工作簿并创建数据验证列表时,该变体丢失了。 我会注意到,这在过去一直没有问题,几年前就停止了,但我不知道为什么。同样重要的是要注意,我是一个初学者,要么没有编写我使用的大部分代码,要么从各个帖子中拼凑出代码。这极大地限制了我处理错误的能力,因此我们将不胜感激任何帮助!

这是我正在使用的代码:

Private Sub Worksheet_Activate()
'Sub Existing_client_list()

Dim SourceFolderName As String
Dim ListWB As Variant
Dim fso As Scripting.FileSystemObject
Dim SourceFolder As Scripting.Folder
Dim FileItem As Scripting.File
Dim FolderItem As Scripting.Folder

SourceFolderName = ThisWorkbook.Sheets("LUT").Range("B3").Value

Set fso = New Scripting.FileSystemObject
Set SourceFolder = fso.GetFolder(SourceFolderName)

For Each SourceFolder In SourceFolder.SubFolders
    ListWB = ListWB & "," & repalce_comma_Semi_string(SourceFolder.Name)
Next SourceFolder

With ActiveWorkbook
    .Sheets("Customer Details").Unprotect
    
    .Sheets("Customer Details").Range("C10").Select
End With

With Selection.Validation

此时我收到运行时错误“1004”:应用程序定义或对象定义的错误

On Error Resume Next
.DELETE
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertInformation, Operator:= \_
xlBetween, Formula1:=ListWB
.ShowError = False

End With

Set FileItem = Nothing
Set SourceFolder = Nothing
Set fso = Nothing

With ActiveWorkbook
    .Sheets("Customer Details").Unprotect
    
    .Sheets("Customer Details").Range("Report_Language").Select
End With

With Selection.Validation

On Error Resume Next
.DELETE
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertInformation, Operator:= \_
xlBetween, Formula1:="=Report_Language_List"
.ShowError = False

End With
End Sub
vba validation variant
1个回答
0
投票

首先是线路

.Add Type:=xlValidateList, AlertStyle:=xlValidAlertInformation, Operator:= \_
xlBetween, Formula1:=ListWB

产生语法错误。应该是这样

.Add Type:=xlValidateList, AlertStyle:=xlValidAlertInformation, Operator:= _
xlBetween, Formula1:=ListWB

即没有反斜杠。您不需要转义下划线。

第二部分

With ActiveWorkbook
    .Sheets("Customer Details").Unprotect
    
    .Sheets("Customer Details").Range("C10").Select
End With

会导致问题 - 您尝试选择工作表上的单元格,但该工作表未处于活动状态。试试这个吧

With ActiveWorkbook
    .Sheets("Customer Details").Unprotect
    .Sheets("Customer Details").Select
    .Sheets("Customer Details").Range("C10").Select
End With

或更好

With ActiveWorkbook.Sheets("Customer Details")
    .Unprotect
    .Select
    .Range("C10").Select
End With
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.