Toon posts:

Macro in Excel geeft foutmelding

Pagina: 1
Acties:

Vraag


  • Rob Biemond
  • Registratie: Juli 2019
  • Laatst online: 16-12-2022
Mijn vraag
Ik neem in Excel een eenvoudige macro op. Als ik die uitvoer krijg ik foutmelding 1004.

Bijlage foutmelding:



Bijlage Macro:


Relevante software en hardware die ik gebruik
MacBook Pro met MacOS Ventura 13.0.1, Microsoft Excel voor de Mac 16.66.1

Wat ik al gevonden of geprobeerd heb

* In de macro kopieer ik (de formule in) een cel, ga een cel naar beneden, en plak daar de formule in.
Dit geeft de Visual Basic regel: ActiveCell.Offset(1, 0).Range("A1").Select
Deze geeft een foutmelding.

* De macro begon eerst in cel A1. Ik heb de eerste 8 regels van de spreadsheet vastgezet.
Omdat ik dacht dat het daaraan lag, heb ik de macro in cel A10 laten beginnen.
Maar dit geeft nog steeds dezelfde foutmelding.

* Omdat slechts één cel geselecteerd wordt, is de toevoeging Range("A1") overbodig. In de veronderstelling dat het daar aan lag, heb ik deze verwijderd. Maar dit geeft nog steeds dezelfde foutmelding.

* Tot slot: ik heb zelf niets geprogrammeerd. Ik heb alleen een macro opgenomen, en Excel maakt daar Visual Basic code van die niet goed werkt.

Beste antwoord (via Rob Biemond op 16-12-2022 13:21)


  • dix-neuf
  • Registratie: Juli 2018
  • Niet online
Rob Biemond schreef op donderdag 15 december 2022 @ 17:03:
Als ik Excel interactief gebruik, springt <Cmd> + (neerwaarts pijltje) naar de laatst ingevulde cel van de gekozen kolom. Dat is mijn bedoeling. Daar maakt de macro recorder van Selection.End(x1Down).Select - ga naar de laatste rij van de sheet. Dat klopt dus niet.
Daar heb je gelijk in en dat werd hierboven ook niet goed aangegeven. Want met de opdracht
code:
1
Selection.End(xlDown).Select

selecteer je de eerste niet-lege cel in een kolom (gerekend vanaf de geselecteerde cel als je de opdracht uitvoert). Alleen als onder de geselecteerde cel alle cellen leeg zijn als je de opdracht uitvoert, zal met die opdracht de laatste cel in de kolom worden geselecteerd.
Wat is het VBA commando waarmee je naar de laatst ingevulde cel van een rij of kolom springt
Laatste niet-lege cel in kolom A:
code:
1
Application.Goto Reference:=Sheets("Blad1").Range("A" & Sheets("Blad1").Range("A" & Sheets("Blad1").Rows.Count).End(xlUp).Row)

Laatste niet-lege cel in rij 1:
code:
1
Application.Goto reference:=Sheets("Blad1").Cells(1, Sheets("Blad1").Columns.Count).End(xlToLeft)

Alle reacties


  • Daedalus
  • Registratie: Mei 2002
  • Niet online

Daedalus

Moderator Apple Talk

Keep tryin'

Er vanuit gaande dat dit niet een Mac-specifiek probleem is, is Client software algemeen een betere plek voor dit soort problemen, dus een move die kant op :)

MS > CSA

“You know what I've noticed Hobbes? Things don't bug you if you don't think about them. So from now on, I simply won't think about anything I don't like, and I'll be happy all the time!” | 宇多田ヒカル \o/


  • dixet
  • Registratie: Februari 2010
  • Laatst online: 01:01
Er van uitgaande dat je actieve cel A1 is gebeurt het volgende:

code:
1
ActiveCell.Offset(0,7).Range("A1").Select

Dit selecteert cel H1 (offset van 0 rijen en 7 kolommen vanaf je startcel)

code:
1
Selection.End(xlDown).Select

Hiermee spring je helemaal naar beneden naar de laatst mogelijke rij, dus cel H1049576

code:
1
ActiveCell.Offset(1,0).Range("A1").Select

Hier probeer je 1 cel naar beneden te gaan, terwijl je al in de onderste rij zit. Daarom krijg je de foutmelding.

Ik zou ten eerste niet uitgaan van de ActiveCell, maar vanaf een vaste cel, bijvoorbeeld A1. Anders moet je zelrf altijd goed opletten welke cel je selecteert voordat je de macro start
code:
1
Activesheet.Range("A1")...

De "Range("A1")" in de opdrachten doet niets, omdat je al uitgaat van de ActiveCell.

De opdracht Selection.End(xlDown) heb je helemaal niet nodig, als je 1 rij naar beneden wilt gebruik je "Offset(1,0)" zoals ook in je andere regels.

[Voor 4% gewijzigd door dixet op 15-12-2022 15:29]


  • Djordjo
  • Registratie: Mei 2007
  • Niet online
Gaat het wel goed als je "Relatieve verwijzingen gebruiken" uit hebt staan?

Om te debuggen kun je het bewerkscherm van de macro's openen en dan de macro opnemen, dan zie je elke stap toegevoegd worden.

  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

Als mod:
Kan je de code als tekst plaatsen? Dat leest veel makkelijker.

--

Generiek:
Inderdaad geen ActiveCell.Offset(0,7).Range("A1").Select waar ActiveCell.Offset(0,7).Select voldoet.

Al is .Select gebruiken sowieso meestal een hele slechte keuze, foutgevoelig. Liever direct de cellen aanroepen. Geen foo.select, selection.copy, bar.select, selection.paste, maar meteen bar = foo.

Moraal van het verhaal: gebruik nooit opgenomen code. Kijk wat het doet, ga dan zelf schrijven :)

--

Specifiek:
Je gaat inderdaad helemaal naar het einde van de sheet, bijv. regel 1048576, en vraagt dan nog 1 regel lager te gaan. Dat kan niet.

[Voor 4% gewijzigd door F_J_K op 15-12-2022 15:52]

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


  • Rob Biemond
  • Registratie: Juli 2019
  • Laatst online: 16-12-2022
Hierbij de code als tekst:

Sub Macro3()
'
' Macro3 Macro
'

'
ActiveCell.Offset(0, 7).Range("A1").Select
Selection.End(xlDown).Select
Selection.Copy
ActiveCell.Offset(1, 0).Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
ActiveCell.Offset(-79, 2).Range("A1").Select
Selection.End(xlDown).Select
Application.CutCopyMode = False
Selection.Copy
ActiveCell.Offset(1, 0).Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
ActiveCell.Offset(-79, -9).Range("A1").Select
End Sub

  • Rob Biemond
  • Registratie: Juli 2019
  • Laatst online: 16-12-2022
Bedankt allemaal!

Als ik Excel interactief gebruik, springt <Cmd> + (neerwaarts pijltje) naar de laatst ingevulde cel van de gekozen kolom. Dat is mijn bedoeling.
Daar maakt de macro recorder van Selection.End(x1Down).Select - ga naar de laatste rij van de sheet.
Dat klopt dus niet.

Op het gevaar af om RTFM als antwoord te krijgen:
Wat is het VBA commando waarmee je naar de laatst ingevulde cel van een rij of kolom springt?
Ik kan dat niet zo snel vinden in de VBA Reference.

  • heuveltje
  • Registratie: Februari 2000
  • Laatst online: 00:25

heuveltje

KoelkastFilosoof

Rob Biemond schreef op donderdag 15 december 2022 @ 17:03:
Bedankt allemaal!

Als ik Excel interactief gebruik, springt <Cmd> + (neerwaarts pijltje) naar de laatst ingevulde cel van de gekozen kolom. Dat is mijn bedoeling.
Daar maakt de macro recorder van Selection.End(x1Down).Select - ga naar de laatste rij van de sheet.
Dat klopt dus niet.

Op het gevaar af om RTFM als antwoord te krijgen:
Wat is het VBA commando waarmee je naar de laatst ingevulde cel van een rij of kolom springt?
Ik kan dat niet zo snel vinden in de VBA Reference.
laatste rij zoeken : https://www.wallstreetmojo.com/vba-last-row/
en daar dan een select op doen

Heuveltjes CPU geschiedenis door de jaren heen : AMD 486dx4 100, Cyrix PR166+, Intel Pentium 233MMX, Intel Celeron 366Mhz, AMD K6-450, AMD duron 600, AMD Thunderbird 1200mhz, AMD Athlon 64 x2 5600, AMD Phenom X3 720, Intel i5 4460, AMD Ryzen 5 3600


  • dixet
  • Registratie: Februari 2010
  • Laatst online: 01:01
Rob Biemond schreef op donderdag 15 december 2022 @ 17:03:
Bedankt allemaal!

Als ik Excel interactief gebruik, springt <Cmd> + (neerwaarts pijltje) naar de laatst ingevulde cel van de gekozen kolom. Dat is mijn bedoeling.
Daar maakt de macro recorder van Selection.End(x1Down).Select - ga naar de laatste rij van de sheet.
Dat klopt dus niet.

Op het gevaar af om RTFM als antwoord te krijgen:
Wat is het VBA commando waarmee je naar de laatst ingevulde cel van een rij of kolom springt?
Ik kan dat niet zo snel vinden in de VBA Reference.
Eigenlijk klopt het wel. Cmd+pijltje naar beneden gaat naar de laatst ingevulde cel wanneer je niet op de laatst ingevulde cel staat. Wanneer je op de laatst ingevulde cel staat gaat Cmd+pijltje naar de laatst mogelijke cel. In VBA gebeurt het zelfde.

Wat @F_J_K al zegt, gebruik nooit opgenomen code. Opnemen geeft een mooie start, maar kijk altijd wat het doet en pas de code aan zodat het generieker werkt

Acties:
  • Beste antwoord
  • +1Henk 'm!

  • dix-neuf
  • Registratie: Juli 2018
  • Niet online
Rob Biemond schreef op donderdag 15 december 2022 @ 17:03:
Als ik Excel interactief gebruik, springt <Cmd> + (neerwaarts pijltje) naar de laatst ingevulde cel van de gekozen kolom. Dat is mijn bedoeling. Daar maakt de macro recorder van Selection.End(x1Down).Select - ga naar de laatste rij van de sheet. Dat klopt dus niet.
Daar heb je gelijk in en dat werd hierboven ook niet goed aangegeven. Want met de opdracht
code:
1
Selection.End(xlDown).Select

selecteer je de eerste niet-lege cel in een kolom (gerekend vanaf de geselecteerde cel als je de opdracht uitvoert). Alleen als onder de geselecteerde cel alle cellen leeg zijn als je de opdracht uitvoert, zal met die opdracht de laatste cel in de kolom worden geselecteerd.
Wat is het VBA commando waarmee je naar de laatst ingevulde cel van een rij of kolom springt
Laatste niet-lege cel in kolom A:
code:
1
Application.Goto Reference:=Sheets("Blad1").Range("A" & Sheets("Blad1").Range("A" & Sheets("Blad1").Rows.Count).End(xlUp).Row)

Laatste niet-lege cel in rij 1:
code:
1
Application.Goto reference:=Sheets("Blad1").Cells(1, Sheets("Blad1").Columns.Count).End(xlToLeft)
Pagina: 1


Tweakers maakt gebruik van cookies

Tweakers plaatst functionele en analytische cookies voor het functioneren van de website en het verbeteren van de website-ervaring. Deze cookies zijn noodzakelijk. Om op Tweakers relevantere advertenties te tonen en om ingesloten content van derden te tonen (bijvoorbeeld video's), vragen we je toestemming. Via ingesloten content kunnen derde partijen diensten leveren en verbeteren, bezoekersstatistieken bijhouden, gepersonaliseerde content tonen, gerichte advertenties tonen en gebruikersprofielen opbouwen. Hiervoor worden apparaatgegevens, IP-adres, geolocatie en surfgedrag vastgelegd.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Toestemming beheren

Hieronder kun je per doeleinde of partij toestemming geven of intrekken. Meer informatie vind je in ons cookiebeleid.

Functioneel en analytisch

Deze cookies zijn noodzakelijk voor het functioneren van de website en het verbeteren van de website-ervaring. Klik op het informatie-icoon voor meer informatie. Meer details

janee

    Relevantere advertenties

    Dit beperkt het aantal keer dat dezelfde advertentie getoond wordt (frequency capping) en maakt het mogelijk om binnen Tweakers contextuele advertenties te tonen op basis van pagina's die je hebt bezocht. Meer details

    Tweakers genereert een willekeurige unieke code als identifier. Deze data wordt niet gedeeld met adverteerders of andere derde partijen en je kunt niet buiten Tweakers gevolgd worden. Indien je bent ingelogd, wordt deze identifier gekoppeld aan je account. Indien je niet bent ingelogd, wordt deze identifier gekoppeld aan je sessie die maximaal 4 maanden actief blijft. Je kunt deze toestemming te allen tijde intrekken.

    Ingesloten content van derden

    Deze cookies kunnen door derde partijen geplaatst worden via ingesloten content. Klik op het informatie-icoon voor meer informatie over de verwerkingsdoeleinden. Meer details

    janee