Cookies op Tweakers

Tweakers maakt gebruik van cookies, onder andere om de website te analyseren, het gebruiksgemak te vergroten en advertenties te tonen. Door gebruik te maken van deze website, of door op 'Ga verder' te klikken, geef je toestemming voor het gebruik van cookies. Wil je meer informatie over cookies en hoe ze worden gebruikt, bekijk dan ons cookiebeleid.

Meer informatie

Vraag


Acties:
  • 0Henk 'm!

  • jmvdb22
  • Registratie: februari 2012
  • Laatst online: 09-06 12:13
Mijn vraag
Ik heb een macro gemaakt (opgenomen) in excel. In het bestand waar ik deze gemaakt heb werkt deze gewoon, echter komt er een klein probleem nadat ik het bestand heb opgeslagen als een nieuw bestand. Het originele bestand heet 'week 22', deze heb ik opnieuw opgeslagen als 'week 23'. In week 22 heb ik een knop aangemaakt in snelle toegang voor de macro voordat ik deze opnieuw had opgeslagen. Als ik op deze knop druk opent excel automatisch 'week 22' voordat de macro uitgevoerd wordt. Als iemand anders in dit bestand werkt opent excel deze als alleen lezen en werkt de macro ook gewoon. Als ik in 'week 23' klik op 'macro's weergeven' en op die manier de macro uitvoer werkt het wel naar behoren.

Hoe kan ik zorgen dat de macro geen ander bestand opent?

Als ik met beide bestanden open klik op 'macro's weergeven' zie ik 2 macro's met voor 1 de naam van het andere bestand erbij.

Dit is hoe de macro er nu uitziet.

Sub Formules()

Range("M4").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.ClearContents
ActiveCell.FormulaR1C1 = "=COUNTIF([type],[@type])>1"
Range("X4").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.ClearContents
ActiveCell.FormulaR1C1 = "=COUNTIF([personeel],[@personeel])>1"
Range("AB4").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.ClearContents
ActiveCell.FormulaR1C1 = "=COUNTIF([inhuur],[@inhuur])>1"
Range("AM4").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.ClearContents
ActiveCell.FormulaR1C1 = "=COUNTIF([VW/BE],[@[VW/BE]])>1"
Range("AQ4").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.ClearContents
ActiveCell.FormulaR1C1 = "=COUNTIF([auto],[@auto])>1"
Range("AQ5").Select
End Sub


Relevante software en hardware die ik gebruik
Ik gebruik office 2013 op windows 10

Wat ik al gevonden of geprobeerd heb
Ik heb geprobeerd te zoeken, maar kan alleen instructies vinden die vertellen hoe je wel een ander bestand opent via een macro en niet een oplossing voor dit probleem.

Ps. advies over het verbeteren van de macro opzich is ook altijd welkom, mochten jullie met afschuw kijken naar mijn simpele creatie. :P

[Voor 4% gewijzigd door jmvdb22 op 26-05-2020 11:03. Reden: Er stond geen vraag haha]

Alle reacties


Acties:
  • 0Henk 'm!

  • Belindo
  • Registratie: december 2012
  • Laatst online: 15:26

Belindo

β–Ά β”€πŸ”˜β”€β”€β”€β”€β”€β”€β”€ 15:02

Dan heb je de knop gekoppeld aan de macro in de week 22 file. Je moet de knop koppelen aan de macro in de huidige file.

Coding in the cold; <brrrrr />


Acties:
  • 0Henk 'm!

  • jmvdb22
  • Registratie: februari 2012
  • Laatst online: 09-06 12:13
Moet ik dan in elk bestand een nieuwe knop aanmaken of is de macro aan te passen zodat deze verwijst naar het huidige bestand?

Acties:
  • 0Henk 'm!

  • Belindo
  • Registratie: december 2012
  • Laatst online: 15:26

Belindo

β–Ά β”€πŸ”˜β”€β”€β”€β”€β”€β”€β”€ 15:02

Als je in je nieuwe bestand rechts op de knop klikt en dan 'assign macro' kiest, zie je welke macro er wordt opgestart. Als deze begint met een andere bestandsnaam, haal dan alles weg, behalve de macro naam.

Zorg er ook voor dat je macro in een module staat, en niet in een worksheet. Als het goed is staat ie in een module, want je hebt hem opgenomen.

Dus als er staat
code:
1
'C:\Users\xxxxxxxx\Desktop\Book1.xlsm'!test
dan verander je dat naar
code:
1
test
(waar test de naam van je macro is)

Coding in the cold; <brrrrr />


Acties:
  • 0Henk 'm!

  • jmvdb22
  • Registratie: februari 2012
  • Laatst online: 09-06 12:13
De knop zelf zit in de snelle toegang (was niet eens mijn eerste idee, maar dit is wel handiger dan wat ik zelf in gedachten had als dit werkt). Met de rechter muisknop komt dus geen optie voor de macro zelf naar voren en als ik via opties naar 'werkbalk snelle toegang' ga kan ik ook de knop zelf niet aanpassen.

Als ik maar 1 bestand open heb en in het bestand naar 'Macro's weergeven' ga staat er alleen 'formules' bij de macro's. Als ik 2 bestanden open heb komt er wel een tweede macro bij te staan voor de macro in het andere bestand.

Acties:
  • 0Henk 'm!

  • dix-neuf
  • Registratie: juli 2018
  • Niet online
1. Sla de macro op in de persoonlijke werkmap, hij is dan in elk bestand beschikbaar.
2. Begin en eindig de macro met With ActiveSheet....End With.
3 Om bewerkingen op cellen uit te voeren is het niet nodig om ze te selecteren.
4. Waarom, als je een macro gebruikt, formules in cellen plaatsen? Je kunt meteen het resultaat laten weergeven, bv: Range("M4").value = worksheetfunction.Countif(...

Acties:
  • 0Henk 'm!

  • F_J_K
  • Registratie: juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

Inderdaad. Als het een functie is die in 'ieder' bestand moet werken dan wil je die functie inderdaad niet in het bestand zelf opslaan. Wel kan het goed zijn om in de functie dan een check in te bouwen of je het in het juiste bestand gebruikt. Bijv door te kijken of de actieve sheet een bepaalde naam heeft, of een bepaalde waarde in bijv cel A1.
jmvdb22 schreef op dinsdag 26 mei 2020 @ 10:42:
Ps. advies over het verbeteren van de macro opzich is ook altijd welkom, mochten jullie met afschuw kijken naar mijn simpele creatie. :P
OK :P

Gebruik geen .select behalve als het echt de bedoeling is dat men "fysiek de muis ziet bewegen". Zoals schijnbaar bij die Range("AQ5").Select waar je blijkbaar een reden hebt om per se te eindigen met selectie van cel AQ5.

Doe niet: foo.Select en dan Selection.bar
maar: foo.bar

En niet eerst F4 selecteren en dan Range(Selection maar doe meteen Range("f4"

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


Acties:
  • 0Henk 'm!

  • jmvdb22
  • Registratie: februari 2012
  • Laatst online: 09-06 12:13
dix-neuf schreef op dinsdag 26 mei 2020 @ 13:28:
1. Sla de macro op in de persoonlijke werkmap, hij is dan in elk bestand beschikbaar.
2. Begin en eindig de macro met With ActiveSheet....End With.
3 Om bewerkingen op cellen uit te voeren is het niet nodig om ze te selecteren.
4. Waarom, als je een macro gebruikt, formules in cellen plaatsen? Je kunt meteen het resultaat laten weergeven, bv: Range("M4").value = worksheetfunction.Countif(...
1. Hoe bedoel je het in de persoonlijke werkmap opslaan? Hij is niet in elk excel-bestand nodig, maar eigenlijk alleen in de bestanden die hier uit voortkomen, welke in principe altijd gemaakt worden door het bestand onder een andere naam op te slaan.
2. Done, danku!
3. Dus in plaats van ActiveCell dan Range("M4") invullen?
4. Het is van belang dat zonder het activeren van de macro ook de berekening gedaan wordt. aan de hand van de formule wordt een voorwaardelijke opmaak op een andere cel gedaan. Dit leek mij het handigst daarvoor.
Deze manier leek mij ook handig doordat in een lege kolom in de tabel de formule automatisch doorgevoerd werd. De tabel heeft een wisselend aantal rijen, dus ik kan geen vast aantal rijen geven waarin de formule berekend moet worden.
Het enige probleem dat ik nu heb is als een cel in de kolom de formule mist oid de macro nu alleen tot aan die cel wordt uitgevoerd, dus ik de macro vaker moet uitvoeren om alsnog de hele kolom met deze formule te vullen. Hebben jullie enig idee hoe ik kan zorgen dat de macro in 1x de hele kolom bewerkt?

Acties:
  • 0Henk 'm!

  • jmvdb22
  • Registratie: februari 2012
  • Laatst online: 09-06 12:13
F_J_K schreef op dinsdag 26 mei 2020 @ 14:20:
Inderdaad. Als het een functie is die in 'ieder' bestand moet werken dan wil je die functie inderdaad niet in het bestand zelf opslaan. Wel kan het goed zijn om in de functie dan een check in te bouwen of je het in het juiste bestand gebruikt. Bijv door te kijken of de actieve sheet een bepaalde naam heeft, of een bepaalde waarde in bijv cel A1.

[...]

OK :P

Gebruik geen .select behalve als het echt de bedoeling is dat men "fysiek de muis ziet bewegen". Zoals schijnbaar bij die Range("AQ5").Select waar je blijkbaar een reden hebt om per se te eindigen met selectie van cel AQ5.

Doe niet: foo.Select en dan Selection.bar
maar: foo.bar

En niet eerst F4 selecteren en dan Range(Selection maar doe meteen Range("f4"
Ik heb nu inderdaad die laatste .Select verwijderd, was wat overbodig, maar automatisch opgenomen met de macro.
F_J_K schreef op dinsdag 26 mei 2020 @ 14:20:
Inderdaad. Als het een functie is die in 'ieder' bestand moet werken dan wil je die functie inderdaad niet in het bestand zelf opslaan. Wel kan het goed zijn om in de functie dan een check in te bouwen of je het in het juiste bestand gebruikt. Bijv door te kijken of de actieve sheet een bepaalde naam heeft, of een bepaalde waarde in bijv cel A1.

[...]

OK :P

Gebruik geen .select behalve als het echt de bedoeling is dat men "fysiek de muis ziet bewegen". Zoals schijnbaar bij die Range("AQ5").Select waar je blijkbaar een reden hebt om per se te eindigen met selectie van cel AQ5.

Doe niet: foo.Select en dan Selection.bar
maar: foo.bar

En niet eerst F4 selecteren en dan Range(Selection maar doe meteen Range("f4"
Ik heb ondertussen wat dingen aangepast, maar nu selecteert de macro een te groot bereik en verwijderd die teveel, dus daar heb ik iets verkeerds veranderd denk ik.

Verder inderdaad de laatste selectie veranderd, want dat is totaal onnodig.

Het stukje met foo.select snap ik niet wat je bedoelt eerlijk gezegd haha

  • m-vw
  • Registratie: mei 2013
  • Laatst online: 13:02

m-vw

GEZOCHT: De Kluts

De knop in snelle toegang is gelinkt een macro in 'week 22', terwijl TS eigenlijk steeds de laatste week wil openen.

Dit kan wel. Ik kan drie manieren bedenken:

1. Maak een macro die het nieuwste (=laatst gecreΓ«erd) bestand opent.
2. Maak een macro die het bestand opent met het hoogste weeknummer in de naam.
3. Maak een macro die de VBA code herschrijft en de verwijzing naar het bestand aanpast.

Zoals @dix-neuf schrijft moet dit dan wel vanuit de persoonlijke werkmap.

Garmin FR245M + HRM-RUN


  • F_J_K
  • Registratie: juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

jmvdb22 schreef op dinsdag 26 mei 2020 @ 17:26:
Het stukje met foo.select snap ik niet wat je bedoelt eerlijk gezegd haha
Sorry, ik had je bericht gemist.

'foo' en 'bar' waren betekenisloze voorbeelden. Punt is: je doet steeds
selecteer cel X
selecteer iets onder wat er nu is geselecteerd
doe het volgende met wat er nu is geselecteerd
selecteer cel Y
selecteer iets onder wat er nu is geselecteerd
doe het volgende met wat er nu is geselecteerd
etc

Dat kan veel handiger/sneller/minder foutgevoelig:
doe het volgende met de cel onder cel X
doe het volgende met de cel onder cel Y


Concreet:
niet
code:
1
2
3
Range("M4").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.ClearContents

maar
code:
1
Range(Range("M4"), Range("M4").End(xlDown)).ClearContents

Dat laatste doet dus in een keer ClearContents van het hele bereik van M4 tot en met {helemaal naar beneden vanaf M4}.

(Punt is: Select() is wat mij betreft een 'enge' om te gebruiken. Maar misschien ben ik een purist en kan je me negeren :P )

Edit: zie verder dus de posts hierboven

[Voor 7% gewijzigd door F_J_K op 28-05-2020 10:14]

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


Acties:
  • 0Henk 'm!

  • Lustucru
  • Registratie: januari 2004
  • Niet online

Lustucru

Adviseur

26 03 2016

De oplossing voor het oorspronkelijke probleem is redelijk eenvoudig. ;)

Als je de knop toevoegt aan het snelmenu moet je ervoor zorgen dat je onder 'werkbalk snelle toegang toepassen op' aangeeft dat de wijzigingen alleen van toepassing zijn voor het bestand. Excel slaat dan de wijzigingen in het bestand op en laat dan ook de verwijzing naar het bestand weg. De knop wordt alleen zichtbaar als het bestand actief is en verwijst ook naar de macro in het bestand zelf. Als je dan een kopie maakt van het bestand gaat de verwijzing gewoon mee.

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland

Pagina: 1


Apple iPhone 12 Microsoft Xbox Series X LG CX Google Pixel 5 Black Friday 2020 Samsung Galaxy S20 4G Sony PlayStation 5 Nintendo Switch Lite

Tweakers vormt samen met Hardware Info, AutoTrack, Gaspedaal.nl, Nationale Vacaturebank, Intermediair en Independer DPG Online Services B.V.
Alle rechten voorbehouden © 1998 - 2020 Hosting door True