vba excel sheets.range.value错误
所以,有时当我试图执行这个命令时,它会给我一个错误。问题是它非常不一致。在某些情况下,它是有效的,而在其他情况下,它就是不起作用 这是getCellVal函数的一行。cellName是字符串,s是整数vba excel sheets.range.value错误,vba,excel,Vba,Excel,所以,有时当我试图执行这个命令时,它会给我一个错误。问题是它非常不一致。在某些情况下,它是有效的,而在其他情况下,它就是不起作用 这是getCellVal函数的一行。cellName是字符串,s是整数 getCellVal = Sheets(s).Range(cellName).Value 这次它给了我: 运行时错误“438”: 对象不支持此属性或方法 这条生产线实际上在不久前还没出问题。我添加了一些其他使用它的函数,现在它不再工作了 想知道为什么吗?对工作表集合的非限定调用隐式引用当前活动的
getCellVal = Sheets(s).Range(cellName).Value
这次它给了我:
运行时错误“438”:
对象不支持此属性或方法
这条生产线实际上在不久前还没出问题。我添加了一些其他使用它的函数,现在它不再工作了
想知道为什么吗?对
工作表
集合的非限定调用隐式引用当前活动的任何工作簿,重要的是要知道集合包含工作表
对象,…但也包含图表
对象
由于您打算使用工作表
,请改用工作表
集合
如果您没有得到“索引越界”错误,那么您请求的工作表确实存在。但错误438指向该工作表不是工作表
(因此没有范围
成员)
我打赌活动工作簿在索引s
处有一张图表
解决方案就是要明确
如果要使用包含正在运行的代码的工作簿,请使用thiswoolk
限定workbook
成员调用:
getCellVal = ThisWorkbook.Worksheets(s).Range(cellName).Value
如果要使用工作簿,则需要在打开工作簿时获得工作簿对象的所有权:
Dim wb As Workbook
Set wb = Application.Workbooks.Open(path)
'...
getCellVal = wb.Worksheets(s).Range(cellName).Value
如果
cellName
是具有工作簿作用域的命名范围
,则从右侧删除工作表。
。@RonRosenfeld unqualified范围
调用隐式引用活动工作表(除非您在工作表的代码后面)-这实际上会使事情变得更糟;-)@如果它是一个带有工作簿范围的定义名称
,我就不会这么自鸣得意了,这就是我写的。@RonRosenfeld Fine。但那将是错误1004,而不是438。FWIW访问定义的名称时,应通过工作簿范围名称的工作簿.names
集合,以及工作表范围名称的工作表.names
集合<代码>范围的行为已中断且不直观。