2017-08-09 255 views
2

所以,有时当我尝试执行这个命令时,它给了我一个错误。问题在于它非常不一致。在某些情况下,它可以工作,而在其他情况下,则不会。vba excel sheets.range.value错误

这是getCellVal函数的一行。 cellName是一个字符串,s是一个整数。

getCellVal = Sheets(s).Range(cellName).Value 

这一次,它给我: 运行时错误“438”: 对象不无问题刚才支持该行实际工作此属性或方法

。我添加了一些其他功能,使用它,现在它不再工作。

有关为什么的任何想法?

+0

如果'cellName'是'命名Range'与工作簿的范围,然后从右侧删除'片材(S).'。 –

+0

@RonRosenfeld不合格的'Range'调用隐式引用活动工作表(除非你在工作表的代码隐藏中) - 这实际上会使事情变得更糟* ;-) –

+0

@ Mat'sMug不是如果它是'定义名称“与工作簿范围,这是我写的。 –

回答

3

限定调用到Sheets收集隐含地指到任何工作簿是当前活动的,要知道,集合包含Worksheet物品......也Chart对象是很重要的。

既然您的意思是使用Worksheet,请改为使用Worksheets集合。

如果您没有收到“索引越界”错误,那么您要求的工作表确实存在。但错误438指向该表不是Worksheet(因此没有Range成员)。

我敢打赌,活动工作手册的索引为s

解决方法很简单明了。

如果你的意思包含的运行代码的工作簿的工作,有资格Workbook成员与ThisWorkbook电话:

getCellVal = ThisWorkbook.Worksheets(s).Range(cellName).Value 

如果你的意思要工作工作簿,然后你需要得到阿霍德在Workbook对象当你打开它:

Dim wb As Workbook 
Set wb = Application.Workbooks.Open(path) 
'... 
getCellVal = wb.Worksheets(s).Range(cellName).Value