web-dev-qa-db-ja.com

VBA:ランタイム1004の取得:セルの使用時にオブジェクト '_Worksheet'のメソッド 'Range'が失敗しました

アセットと概要の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:ランタイム1004の取得:オブジェクト '_Worksheet'のメソッド 'Range'が失敗しました

ライン上:

 Set GetLastNonEmptyCellOnWorkSheet = Ws.Range(Ws.Cells(lLastRow, lLastCol))

ワークシート資産にデータがあります。最後に使用されたセルはW9です(lLastRow = 9およびlLastCol = 23)。

これが機能しない理由はありますか?

4
user1856844

ブローコードを使用したところ、同じエラーが発生しました。

Dim x As Integer
Range(Cells(2, x + 13))

コードをブローに変更すると、エラーが消えました。

Dim x As Integer
Range(Cells(2, x + 13).Address)
1
bluetata