• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Hulp met VBA

Status
Niet open voor verdere reacties.

monty1a

Gebruiker
Lid geworden
29 dec 2006
Berichten
202
Hallo,

Ik ben me steeds meer in het VBA aan het verdiepen.

Nu wilde ik dmv van een knop de volgende code uitvoeren

Sub Afgeronderechthoek3_Klikken()
'
' Afgeronderechthoek3_Klikken Macro
'

'
'
If MsgBox("U gaat nu de tabbladen Afrekening en Meer-Minderwerk als nieuw bestand opslaan!" & vbCr & vbCr & "Wilt u doorgaan?", vbOKCancel + vbQuestion, "Let op!") = vbCancel Then Exit Sub


Sheets(Array("Afrekening", "Meer-minderwerk")).Select
Sheets("Afrekening").Activate
Sheets(Array("Afrekening", "Meer-minderwerk")).Copy
Windows("Standaardlijst - mengformulier v2.4.xlsm").Activate
Sheets(Array("Afrekening", "Meer-minderwerk")).Select
Sheets("Afrekening").Activate
ActiveWindow.SelectedSheets.Visible = False
Sheets("Opdrcheck 2x").Select

MsgBox "Let op! Het nieuwe bestand met de tabbladen Afrekening en Meer-Minderwerk moeten nog wel worden opgeslagen!", vbInformation
End Sub


Alleen het probleem is dat het bestandsnaam "Standaardlijst - mengformulier v2.4.xlsm" steeds als een andere naam word en dan werkt deze code dus niet meer...

Wat moet ik hiermee doen...

En als iemand tips heeft waar ik makkelijke en duidelijke uitleg kan krijgen over VBA hoor ik het graag.

Alvast bedankt!
 
Eerst algemeen:

En daarom dus nooit dingen zoals SELECT en (mindere mate) ACTIVATE gebruiken. Wat je nu aan het doen bent is een muis aan het simuleren. Dat is voor een object omgeving nergens voor nodig. Alles in excel is een "object" en kun je direct dingen mee doen en opslaan voor verder gebruik. Je kunt dus iets doen als:
Code:
a = sheets("henk")
a.range("a1") = "hoi"

deze code plaatst "hoi" in cel A1 van sheet "henk". Dit werkt altijd, waar of hoe je ook in je file bezig bent. Het maakt niet uit dat je op het moment dat de macro wordt uitgevoerd niet op de sheet "henk" bent. Met wat verdere uitbreiding maakt het zelfs niet uit dat je in een andere file bezig bent, of zelfs in een ander programma! Het is volstrekt mogelijk om de aanpassing in de sheet "henk" te doen terwijl je vba draait in powerpoint bijvoorbeeld. Het scherm en de file hoeven niet eens zichtbaar te zijn (wat wel moet voor 'activate')!

je hele code, afgezien van de berichten, kan op een enkele regel, zonder actief tussen files te wisselen.

Specifiek voor de veranderende naam: dat is afhankelijk wie, waarom en wanneer de file een andere naam krijgt. Zolang je maar op enig moment weet welke file het is maakt, via het object systeem, niet uit of de naam op enig punt later wijzigt.
 
En.... plaats VBA code hier altijd tussen code tags voor de leesbaarheid.
 
Ik ben weer wat verder

Code:
    Sheets(Array("Afrekening", "Meer-minderwerk")).Copy
    ThisWorkbook.Activate
    Sheets(Array("Afrekening", "Meer-minderwerk")).Visible = False
    Sheets("Opdrcheck").Select

Maar hoe kan ik die laatste SELECT laten vervallen, maar dat hij wel naar "Opdrcheck" gaat?
 
Met zoiets.
Code:
with thisworkbook
     .Sheets(Array("Afrekening", "Meer-minderwerk")).Copy
     .Sheets(Array("Afrekening", "Meer-minderwerk")).Visible = False
application.goto .Sheets("Opdrcheck").cells(1)
end with
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan