VBA:获取运行时 1004:使用单元格时对象“_Worksheet”的方法 'Range' 失败
VBA: Getting run-time 1004: Method 'Range' of object '_Worksheet' failed when using cells
我有 2 个工作表:资产和概览。
所有功能都放在一个模块中。
Public Function GetLastNonEmptyCellOnWorkSheet(Ws As Worksheet, Optional sName As String = "A1") As Range
Dim lLastRow As Long
Dim lLastCol As Long
Dim rngStartCell As Range
Set rngStartCell = Ws.Range(sName)
lLastRow = Ws.Cells.Find(What:="*", After:=Ws.Range(rngStartCell), LookIn:=xlFormulas, _
Lookat:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, _
MatchCase:=False).Row
lLastCol = Ws.Cells.Find(What:="*", After:=Ws.Range(rngStartCell), LookIn:=xlFormulas, _
Lookat:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious, _
MatchCase:=False).Column
Set GetLastNonEmptyCellOnWorkSheet = Ws.Range(Ws.Cells(lLastRow, lLastCol))
End Function
从我调用的工作表概览中:
Set RngAssets = GetLastNonEmptyCellOnWorkSheet(Worksheets("Assets"), "A1")
但我总是得到错误:
VBA: Getting run-time 1004: Method 'Range' of object '_Worksheet'
failed
在线:
Set GetLastNonEmptyCellOnWorkSheet = Ws.Range(Ws.Cells(lLastRow, lLastCol))
工作表资产上有数据。最后使用的单元格是 W9(lLastRow = 9 和 lLastCol = 23)。
知道为什么这不起作用吗?
这是您的问题陈述:
Set GetLastNonEmptyCellOnWorkSheet = Ws.Range(Ws.Cells(lLastRow, lLastCol))
计算最里面的括号:
ws.Cells(lLastRow, lLastCol)
这个是一个范围,但是范围的默认属性是它的.Value
。除非有与此值对应的命名范围,否则会出现错误。
相反,尝试:
Set GetLastNonEmptyCellOnWorkSheet = Ws.Range(Ws.Cells(lLastRow, lLastCol).Address)
或者您可以稍微简化一下:
Set GetLastNonEmptyCellOnWorkSheet = Ws.Cells(lLastRow, lLastCol)
我发现当我想使用的范围不在活动sheet中时,就发生了错误。在你想在其中使用范围方法之前激活 sheet,这解决了我的问题。
这是我的代码:我想为数组分配一个范围。
keyDataSheet.Activate
LANGKeywords = keyDataSheet.Range(Cells(2, 1), Cells(LANGKWCount, 1))
COLKeywords = keyDataSheet.Range(Cells(3, 2), Cells(COLKWCount, 2))
currentWB.Activate
我在使用blow代码时,出现了同样的错误
Dim x As Integer
Range(Cells(2, x + 13))
改代码吹,错误消失
Dim x As Integer
Range(Cells(2, x + 13).Address)
我有 2 个工作表:资产和概览。
所有功能都放在一个模块中。
Public Function GetLastNonEmptyCellOnWorkSheet(Ws As Worksheet, Optional sName As String = "A1") As Range
Dim lLastRow As Long
Dim lLastCol As Long
Dim rngStartCell As Range
Set rngStartCell = Ws.Range(sName)
lLastRow = Ws.Cells.Find(What:="*", After:=Ws.Range(rngStartCell), LookIn:=xlFormulas, _
Lookat:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, _
MatchCase:=False).Row
lLastCol = Ws.Cells.Find(What:="*", After:=Ws.Range(rngStartCell), LookIn:=xlFormulas, _
Lookat:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious, _
MatchCase:=False).Column
Set GetLastNonEmptyCellOnWorkSheet = Ws.Range(Ws.Cells(lLastRow, lLastCol))
End Function
从我调用的工作表概览中:
Set RngAssets = GetLastNonEmptyCellOnWorkSheet(Worksheets("Assets"), "A1")
但我总是得到错误:
VBA: Getting run-time 1004: Method 'Range' of object '_Worksheet' failed
在线:
Set GetLastNonEmptyCellOnWorkSheet = Ws.Range(Ws.Cells(lLastRow, lLastCol))
工作表资产上有数据。最后使用的单元格是 W9(lLastRow = 9 和 lLastCol = 23)。
知道为什么这不起作用吗?
这是您的问题陈述:
Set GetLastNonEmptyCellOnWorkSheet = Ws.Range(Ws.Cells(lLastRow, lLastCol))
计算最里面的括号:
ws.Cells(lLastRow, lLastCol)
这个是一个范围,但是范围的默认属性是它的.Value
。除非有与此值对应的命名范围,否则会出现错误。
相反,尝试:
Set GetLastNonEmptyCellOnWorkSheet = Ws.Range(Ws.Cells(lLastRow, lLastCol).Address)
或者您可以稍微简化一下:
Set GetLastNonEmptyCellOnWorkSheet = Ws.Cells(lLastRow, lLastCol)
我发现当我想使用的范围不在活动sheet中时,就发生了错误。在你想在其中使用范围方法之前激活 sheet,这解决了我的问题。
这是我的代码:我想为数组分配一个范围。
keyDataSheet.Activate
LANGKeywords = keyDataSheet.Range(Cells(2, 1), Cells(LANGKWCount, 1))
COLKeywords = keyDataSheet.Range(Cells(3, 2), Cells(COLKWCount, 2))
currentWB.Activate
我在使用blow代码时,出现了同样的错误
Dim x As Integer
Range(Cells(2, x + 13))
改代码吹,错误消失
Dim x As Integer
Range(Cells(2, x + 13).Address)