1. ホーム
  2. vba

[解決済み】VBA。ランタイム1004を取得する。オブジェクト'_Worksheet'のメソッド'Range'は、セルを使用するときに失敗しました。

2022-01-24 05:21:22

質問

ワークシートが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))

ワークシートAssetsにデータがあります。最後に使用されたセルは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)