VBA: runtime 1004 ophalen: methode ‘Bereik’ van object ‘_Worksheet’ is mislukt bij gebruik van cellen

Ik heb 2 werkbladen: Activa en Overzicht.

De functies zijn allemaal in een module geplaatst.

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

Vanaf het werkblad Overzicht roep ik:

  Set RngAssets = GetLastNonEmptyCellOnWorkSheet(Worksheets("Assets"), "A1")

Maar ik krijg altijd de foutmelding:

VBA: runtime 1004 ophalen: methode ‘Bereik’ van object ‘_Worksheet’
mislukt

aan de lijn:

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

Er staan gegevens op het werkblad Activa. De laatst gebruikte cel is W9 (lLastRow = 9 en lLastCol = 23).

Enig idee waarom dit niet werkt?


Antwoord 1, autoriteit 100%

Hier is uw probleemstelling:

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

Evalueer de binnenste haakjes:

ws.Cells(lLastRow, lLastCol)

Dit iseen bereik, maar de standaardeigenschap van een bereik is de .Value. Tenzij er een benoemd bereik is dat overeenkomt met deze waarde, wordt de fout verwacht.

Probeer in plaats daarvan:

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

Of je zou iets kunnen vereenvoudigen:

Set GetLastNonEmptyCellOnWorkSheet = Ws.Cells(lLastRow, lLastCol)

Antwoord 2, autoriteit 21%

Toen ik de blaascode gebruikte, trad dezelfde fout op.

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

de code gewijzigd in blow, de fout is verdwenen.

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

Antwoord 3

Ik ontdekte dat toen het bereik dat ik wilde gebruiken niet in het actieve blad stond, de fout zich voordeed. Activeer het blad voordat je de bereikmethode erin wilt gebruiken, dat loste mijn probleem op.

Hier is mijn code: ik wilde een bereik toewijzen aan een array.

keyDataSheet.Activate
LANGKeywords = keyDataSheet.Range(Cells(2, 1), Cells(LANGKWCount, 1))
COLKeywords = keyDataSheet.Range(Cells(3, 2), Cells(COLKWCount, 2))
currentWB.Activate

Other episodes