2017-08-09 159 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