• 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.

Opeenvolgende tabbladen openen met slechts 1 macro

Status
Niet open voor verdere reacties.

albundy33

Gebruiker
Lid geworden
8 dec 2008
Berichten
41
Hallo,

ik heb de volgende vraag:
Ik heb een excel file, met diverse tabbladen.
Vanaf het 2e blad, zijn de bladen opeenvolgend genaamd :
L36
L36-2
L36-3
L36-4
L36-5
etc.

Het bestand wordt dusdanig opgebouwd, dat uiteindelijk alle behalve het actieve tabblad, onzichtbaar zijn.
Met behulp van een userform, kiest de medewerker uit welke actie ondernemen moet worden als hij van tabblad L36 naar L36-2 gaat.
Vervolgens worden wat gegevens gekopieerd en geplakt, afhankelijk van de gekozen actie, en met de macro wordt geschakeld naar tabblad L36-2.
Nu wil ik hetzelfde voor de omschakeling van L36-2 naar L36-3, L36-3 naar L36-4, etc.
Maar mijn kennis is te beperkt, waardoor ik voor iedere omschakeling een apart userform met aparte macro's moet aanmaken.
De Macro ziet er zo uit :

Code:
Private Sub OptionButton1_Click()
Unload Me
Sheets("L36-2").Visible = True
    Range("K8:L8").Select
    Selection.Copy
    Sheets("L36-2").Select
    Range("K7:L7").Select
    ActiveSheet.Paste
    Sheets("L36").Select
    Range("W3").Select
    Selection.Copy
    Sheets("L36-2").Select
    Range("W3").Select
    ActiveSheet.Paste
    Sheets("L36").Visible = False
End Sub

Hoe kan ik de macro dusdanig instellen, dat hij zelf herkent op welk tabblad hij zit, en dat hij het volgende (juiste) tabblad moet openen?
Ik heb een voorbeeld bestand bijgevoegd. Het gaat dus om de code in userform1, optionbutton 1.

Bekijk bijlage afvulbriefje36b.xlsm
 
Laatst bewerkt:
Waar mogen we beginnen te zoeken? Maak er een concrete vraag van ipv van het hele project hier te plaatsen met 6 Userforms en 10 modules. Select is overigens nergens voor nodig.
 
Hoi,

zoals aangegeven, in userform 1 met optionbutton 1.

Die opent nu vanuit blad L36 het volgende blad, 36-2 en maakt L36 onzichtbaar.
Dat is ook de geciteerde code.
Maar ik wil deze code dusdanig aanpassen, dat als dezelfde macro op blad L36-2 wordt opgeroepen, dat hij dan L36-3 gaat openen, en L36-2 onzichtbaar maakt.
De geciteerde code doet dit nu ook, maar met voor elk tabblad een aparte code, met een aparte userform.

Ik weet dat het een onoverzichtelijk warboel is, vandaar dat ik ook de betreffende code citeer.
 
Het actieveblad wordt altijd herkend.

Bv. range("a1").select is altijd cel A1 van activesheet.

Maak een combobox met je bladnamen erin op het formulier, dan weet je waar je naartoe kunt.

De code wordt dan bijvoorbeeld zo.
Code:
Private Sub OptionButton1_Click()
Unload Me
with Sheets([COLOR=#0000ff]combobox1.value[/COLOR])
     [COLOR=#ff0000].[/COLOR]Visible = True
       Range("K8:L8").Copy [COLOR=#ff0000].[/COLOR]Range("K7:L7")
       Range("W3").Copy [COLOR=#ff0000].[/COLOR]Range("W3")
  [COLOR=#ff0000]  .[/COLOR]Visible = False
end with
End Sub

Overal waar een punt voor 'range' of 'visible' staat heeft betrekking op 'With' (het blad van de tekst van je combobox).
Zonder punt ervoor heeft betrekking op je activesheet.
 
Laatst bewerkt:
Of, als aanvulling op HSV, zoiets:
Code:
Private Sub OptionButton1_Click()
    Unload Me
    If Right(ActiveSheet.Name, 2) > 0 Then
        VolgendBlad = "L36-" & Right(ActiveSheet.Name, 2) + 1
    Else
        VolgendBlad = "L36-" & Right(ActiveSheet.Name, 1) + 1
    End If
    
    If VolgendBlad <> "L36-12" Then
        With Sheets(VolgendBlad)
             .Visible = True
               Range("K8:L8").Copy .Range("K7:L7")
               Range("W3").Copy .Range("W3")
            .Visible = False
        End With
    Else
        MsgBox "Er is geen volgend blad."
    End If
End Sub
 
Ik heb de oplossing van Edmoor gekozen, omdat ik niet goed genoeg weet hoe ik het met een combobox verder moet oplossen. Ik krijg echter een foutmelding, "subscript valt buiten bereik". Bij de foutopsporing wordt "With Sheets(VolgendBlad)" geel gemarkeerd. Als ik er met de muis boven hang, geeft hij aan : VolgendBlad="L36-37",
ik denk dat daar de fout zit? Aangezien de bladen niet verder als L36-11 gaan?

En kan iemand me uitleggen wat deze functie precies doet? Dan begrijp ik ook wat beter waar ik mee bezig ben, ipv alleen kopiëren en plakken :eek:

Code:
VolgendBlad = "L36-" & Right(ActiveSheet.Name, 2) + 1


Update : ok, ik heb met googlen al een beetje uitgevogeld waar de fout zit, ik heb sheet 1 hernoemd naar L36-1 ipv L36, de foutmelding is nu weg. Wat nu echter gebeurd is, gegevens worden correct gekopieerd naar sheet L36-2, vervolgens wordt sheet L36-2 onzichtbaar gemaakt, en L36-1 blijft geopend. Dat moest andersom zijn, L36-1 onzichtbaar en L36-2 actief. Ik probeer ff verder de code te ontcijferen waar dit fout loopt, maar hulp van de kenners is altijd welkom :eek:
 
Laatst bewerkt:
Na wat knutselen, googlen en uitproberen, ben ik tot de volgende oplossing gekomen :

Code:
Private Sub OptionButton1_Click()
    Unload Me
    If Right(ActiveSheet.Name, 2) > 0 Then
        VolgendBlad = "L36-" & Right(ActiveSheet.Name, 2) + 1
    Else
        VolgendBlad = "L36-" & Right(ActiveSheet.Name, 1) + 1
    End If
    
    If VolgendBlad <> "L36-12" Then
        With Sheets(VolgendBlad)
             .Visible = True
               Range("K8:L8").Copy .Range("K7:L7")
               Range("W3").Copy .Range("W3")
               Worksheets(VolgendBlad).Activate
        End With
        Else
        MsgBox "Er is geen volgend blad."
         End If
    
    
        If Right(ActiveSheet.Name, 2) > 0 Then
        VorigBlad = "L36-" & Right(ActiveSheet.Name, 2) - 1
         Else
        VorigBlad = "L36-" & Right(ActiveSheet.Name, 1) - 1
        End If
        If VorigBlad <> "L36-12" Then
        With Sheets(VorigBlad)
        .Visible = False
        End With
         End If

Het werkt nu. Code zal waarschijnlijk niet zo mooi zijn, maar dat het werkt is het belangrijkste,
als iemand een idee heeft hoe ik de code makkelijker/mooier kan schrijven, dan hoor ik het graag.
In ieder geval bedankt voor de geboden hulp. :thumb:
 
Waarom niet....
Code:
sheets(activesheet.index+1).visible = true
 
Dan moet wel je indexnummering in de pas blijven lopen.
 
Die blijft altijd in de pas.
Of het de juiste naam heeft is wat anders.
 
Dat bedoel ik, in de pas blijven lopen met de bladnamen.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan