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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.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 “我该如何解决?”;运行时错误';1004'&引用;使用VBA在UserInterfaceOnly受保护的工作表上设置验证时?_Excel_Vba - Fatal编程技术网

Excel “我该如何解决?”;运行时错误';1004'&引用;使用VBA在UserInterfaceOnly受保护的工作表上设置验证时?

Excel “我该如何解决?”;运行时错误';1004'&引用;使用VBA在UserInterfaceOnly受保护的工作表上设置验证时?,excel,vba,Excel,Vba,当我尝试使用VBA在单元格上设置验证时,遇到“运行时错误“1004”:应用程序定义或对象定义错误”。使用设置为true的UserInterFaceOnly标志保护工作表 我尝试将特定的函数/子函数移动到一个空白工作簿中,以查看错误是否会重复出现,也尝试在没有保护的情况下查看它是否仍然有效。问题是相同的,如果工作表没有受到保护,代码也可以工作。我在谷歌上搜索了这个问题,发现下面的链接表明验证字符串有一个字符限制,但即使限制为200个字符也不能解决问题。 ”将此代码粘贴到空白工作簿中,运行ps,然

当我尝试使用VBA在单元格上设置验证时,遇到“运行时错误“1004”:应用程序定义或对象定义错误”。使用设置为true的UserInterFaceOnly标志保护工作表

我尝试将特定的函数/子函数移动到一个空白工作簿中,以查看错误是否会重复出现,也尝试在没有保护的情况下查看它是否仍然有效。问题是相同的,如果工作表没有受到保护,代码也可以工作。我在谷歌上搜索了这个问题,发现下面的链接表明验证字符串有一个字符限制,但即使限制为200个字符也不能解决问题。

”将此代码粘贴到空白工作簿中,运行ps,然后运行test,应该会重现此问题
'使用pw设置特定保护
副警司()
此工作簿。工作表(“Sheet1”)。取消保护密码:=“机密”
ThisWorkbook.Worksheets(“Sheet1”)。保护密码:=“secret”,UserInterFaceOnly:=True
端接头
“一般保护分包
公共子protectSht(ws-As工作表,传递为字符串)
ws.Protect密码:=pass,UserInterFaceOnly:=True
端接头
'在单元格上设置验证
子集合验证(rng作为范围,lst作为集合)
将tmpstr设置为字符串
Dim-loopVar作为变量
对于lst中的每个loopVar
tmpstr=微调(loopVar)&“,”和tmpstr
下一个loopVar
如果lst.Count=0,则
rng.Validation.Delete
其他的
使用rng.Validation
.删除
.Add xlValidateList,AlertStyle:=xlValidAlertStop_
运算符:=xlBetween,公式1:=tmpstr
以
如果结束
端接头
“测试函数再现错误”
'在使用ps保护的工作表上运行此操作
子测试()
将tst变暗为新系列
添加“你好”
请加上“再见”
tst.添加“等”
setValidation ThisWorkbook.Sheets(1).范围(“B1:B5”),tst
端接头

这应该在单元格上设置验证,但无论它们是否被锁定,都无法这样做。相反,它给出了“运行时错误‘1004’:应用程序定义的错误或对象定义的错误”。

我怀疑您在保护时需要添加
DrawingObjects:=True
,因为您实际上是在添加/删除下拉列表。在哪一行发生错误?即使您的保护设置为
UserInterFaceOnly:=True
,您仍然需要禁用保护,添加验证,然后重新保护。@AntiDrondert错误发生在
上。添加xlValidateList,AlertStyle:=xlValidAlertStop,Operator:=xlBetween,公式1:=tmpstr
行。@皮特我认为这是目前唯一的方法,但我不喜欢使用它,因为用户可能会更改工作簿密码,这会破坏脚本。我怀疑您需要在保护时添加
DrawingObjects:=True
,当您有效地添加/删除下拉列表时。错误发生在哪一行?即使您的保护设置为
UserInterFaceOnly:=True
,您仍然必须禁用保护,添加验证,然后重新保护。@antirondert错误发生在
上。添加xlValidateList,AlertStyle:=xlValidAlertStop,_uOperator:=xlBetween,Formula1:=tmpstr
行。@彼得我认为这是目前唯一的方法,但我不喜欢使用它,因为用户可能会更改工作簿密码,这会破坏脚本。