VBA创建Yes/No下拉列表时出现Run Time Error 1004问题求助
VBA下拉列表报错:Run time error 1004 解决方法
错误原因
出现Run time error 1004: Select method of Range class failed的核心原因有两个:
Range.Select方法要求目标工作表必须处于激活状态,一旦Sheet1未被选中、被隐藏或保护,就会触发错误。- 依赖
Selection对象的写法本身不稳定,工作表焦点变化会导致代码失效。
最优解决方案:避免使用Select/Selection
直接操作Range对象,跳过选中步骤,这是VBA编写的最佳实践,能彻底避免这类焦点相关错误:
Sub Drop_Down_List() Dim targetSheet As Worksheet Set targetSheet = ThisWorkbook.Worksheets("Sheet1") With targetSheet.Range("M2:N2851").Validation .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="Yes,No" .IgnoreBlank = True .InCellDropdown = True .InputTitle = "" .ErrorTitle = "" .InputMessage = "" .ErrorMessage = "" .ShowInput = True .ShowError = True End With End Sub
额外排查点
如果修改后仍报错,检查以下情况:
- 确认工作簿中存在名为
Sheet1的工作表,名称没有被修改(注意名称需完全匹配,大小写不影响)。 - 若Sheet1被保护,需先取消保护再执行代码,执行完成后可重新保护:
Sub Drop_Down_List_WithUnprotect() Dim targetSheet As Worksheet Set targetSheet = ThisWorkbook.Worksheets("Sheet1") ' 取消保护(有密码则替换为实际密码) If targetSheet.ProtectContents Then targetSheet.Unprotect Password:="yourpassword" End If With targetSheet.Range("M2:N2851").Validation .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="Yes,No" .IgnoreBlank = True .InCellDropdown = True .InputTitle = "" .ErrorTitle = "" .InputMessage = "" .ErrorMessage = "" .ShowInput = True .ShowError = True End With ' 重新保护工作表(可选) targetSheet.Protect Password:="yourpassword" End Sub - 确保运行代码时,目标单元格区域未处于手动编辑状态,也没有被其他窗口锁定。
内容的提问来源于stack exchange,提问作者Laura
相关产品推荐
相关产品推荐

