VBA:获取运行时1004:使用单元格时,对象'_Worksheet'的方法'Range'失败

use*_*844 3 excel vba runtime-error excel-vba

我有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
Run Code Online (Sandbox Code Playgroud)

从工作表概述我打电话:

   Set RngAssets = GetLastNonEmptyCellOnWorkSheet(Worksheets("Assets"), "A1")
Run Code Online (Sandbox Code Playgroud)

但我总是得到错误:

VBA:获取运行时1004:对象'_Worksheet'的方法'范围'失败

在线上:

 Set GetLastNonEmptyCellOnWorkSheet = Ws.Range(Ws.Cells(lLastRow, lLastCol))
Run Code Online (Sandbox Code Playgroud)

工作表资产上有数据.最后使用的单元格是W9(lLastRow = 9,lLastCol = 23).

知道为什么这不起作用吗?

Dav*_*ens 14

这是你的问题陈述:

Set GetLastNonEmptyCellOnWorkSheet = Ws.Range(Ws.Cells(lLastRow, lLastCol))
Run Code Online (Sandbox Code Playgroud)

评估最里面的括号:

ws.Cells(lLastRow, lLastCol)
Run Code Online (Sandbox Code Playgroud)

一个范围,但范围的默认属性是它.Value.除非存在与此值对应的命名范围,否则将出现错误.

相反,尝试:

Set GetLastNonEmptyCellOnWorkSheet = Ws.Range(Ws.Cells(lLastRow, lLastCol).Address)
Run Code Online (Sandbox Code Playgroud)

或者您可以略微简化:

Set GetLastNonEmptyCellOnWorkSheet = Ws.Cells(lLastRow, lLastCol)
Run Code Online (Sandbox Code Playgroud)


小智 5

当我使用打击代码时,发生了同样的错误。

Dim x As Integer
Range(Cells(2, x + 13))
Run Code Online (Sandbox Code Playgroud)

将代码改为blow,错误消失。

Dim x As Integer
Range(Cells(2, x + 13).Address)
Run Code Online (Sandbox Code Playgroud)