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

Tabbladen verwijderen o.b.v. celwaarde

Status
Niet open voor verdere reacties.

abbcdcg

Gebruiker
Lid geworden
12 mrt 2012
Berichten
61
Hallo,

Ik heb hier het bestand toegepast (zie bijlage) om tabbladen te selecteren en verbergen. Voor dit rapport wordt dit prima.
Voor een ander rapport worden meerdere tabbladen toegepast, en afhankelijk van de keuze heb ik misschien 15 tot 20 tabbladen niet nodig. Ik zoek daarvoor een macro die het volgende kan:

- o.b.v. een celwaarde A tabblad zichtbaar maken of verbergen (mogelijk heb ik die later nog nodig).
- o.b.v. een celwaarde B tabblad zichtbaar maken of verbergen (mogelijk heb ik die later nog nodig).
-enz....
- o.b.v. een celwaarde C een van de tabbladen C1 t/m C8 zichtbaar maken en de overige 7 tabbladen verwijderen.
- o.b.v. een celwaarde D een van de tabbladen D1 t/m D8 zichtbaar maken en de overige 7 tabbladen verwijderen.



B.v.d. !
 

Bijlagen

  • Voorbeeld tabbladen verbergen (2).xlsb
    44,9 KB · Weergaven: 49
Voorbeeldje voor verbergen:
Code:
Sub Verbergen()
    Dim cl As Range
    With Sheets("Blad1")
        For Each cl In .Range("A2:D15")
            Select Case cl.Column
                Case 1, 4
                    If .Range(cl.Address).Offset(, 1).Value = "N" Then Sheets(CStr(cl.Value)).Visible = False
            End Select
        Next cl
    End With
End Sub
 
Dit gaat mij helaas niet verder helpen....
Het bestand in het voorbeeld (van Cobbe) is ook maar enkel als voorbeeld. Het mag best een andere macro zijn, geen probleem, ik kan hem alleen zelf niet vanaf een leeg A4'tje schrijven .

Om het uitgebreider te omschrijven het volgende:
- Ik heb (b.v.) 20 tabbladen, genoemd A, B, C1, C2, C3, C4, C5, C6, C7, C8, D1, D2, D3, D4, D5, D6, D7, D8, E, F;

- Ik heb een keuzemenu, maakt niet uit op basis waarvan. De keuze wordt getransporteerd naar een andere cel / kolom;

- Keuze 1: Tabblad A toepassen J/N (indien Ja, zichtbaar maken, indien nee verbergen of verwijderen);

- Keuze 2: Tabblad B toepassen J/N (indien Ja, zichtbaar maken, indien nee verbergen of verwijderen);

- Keuze 3: Aantal C ?. Indien C=3, dan de tabbladen C3 en D3 zichtbaar maken en C1, C2, C4, C5, C6, C7, C8, D1, D2, D4, D5, D6, D7, D8 verwijderen;

Indien C= 1, 2 of 3, dan tabblad E1 zichtbaar maken en de tabbladen E2 en E3 verwijderen;

Indien C= 4, 5 of 6 dan de tabbladen E1 en E2 zichtbaar maken en tabblad E3 verwijderen;

- Keuze 4: Tabblad E toepassen J/N (indien Ja, zichtbaar maken, indien nee verbergen of verwijderen);

- Keuze 5: Tabblad F toepassen J/N (indien Ja, zichtbaar maken, indien nee verbergen of verwijderen);


De keuze voor tabbladen verwijderen is om het bestand niet te zwaar te maken.


Alvast bedankt !Bekijk bijlage Voorbeel tabbladen.xlsx
 
Laatst bewerkt:
Het stukje code dat ik plaatste doet in je voorbeeld document precies wat je in #1 m.b.t. verbergen vraagt.
Dat is ook de basis voor dingen die je anders wilt.
 
De 2de regel in mijn 2de bericht omschrijft mijn probleem, ik weet gewoon niet hoe ik het vanaf een leeg A4tje moet schrijven.
Aanpassen naar mijn bestand is geen probleem, maar zonder goed voorbeeld lukt me dit domweg niet.
 
Beste abbcdcg,

Ik heb #3 aandachtig gelezen, maar begrijp eerlijk gezegd absoluut niet wat je bedoelt en je tweede voorbeeld bestand maakt het niet veel duidelijker: 22 lege tabbladen met geen enkele code. De code die Edmoor in #2 geeft doet precies wat je vraagt.
Waar is je keuze menu, waar wordt de keuze naar toe 'getransporteerd', (andere cel/kolom met 22 tabbladen laat veel mogelijkheden open). Wat ik bedoel te zeggen is: plaats een voorbeeld bestandje waaruit duidelijk wordt wat je wilt, tenminste als de oplossing gegeven in #2 niet geeft wat je zoekt.
 
1 tabblad lijkt mij voldoende als er eenduidige gegevens in staan.
 
Bedoel je met verwijderen echt de bladen verwijderen of alleen verbergen?
 
Bedoel je met verwijderen echt de bladen verwijderen of alleen verbergen?

Echt verwijderen. Het voorbeeld betreft auto / aanhanger is echt een voorbeeld. Het betreft een rapportage van installatiedelen die nagenoeg (0.1%) niet worden gewijzigd. Daarom is verwijderen hiervoor (m.i.) de beste optie om zo het bestand lichter te maken, en je het toch niet meer nodig hebt. Keuze voor deze manier is het verschil van inhoud van de tabbladen, daarom start ik met dit aantal...
In een andere tool hou ik ze verborgen...

Verwijderen = hier echt verwijderen.
Bij openen van het rapport hoeft er behoudens het keuzeblad ook nog geen ander tabblad geopend te zijn.
 
Laatst bewerkt:
Dat het maar even duidelijk is :)
 
Geen idee van het nut 1 verkeerde keuze en je bent de tabbladen kwijt. Maar goed

In de module van ThisWorkbook
Code:
Private Sub Workbook_Open()
  For Each sh In Sheets
    If sh.Name <> "Keuzeblad" Then sh.Visible = 0
  Next sh
End Sub

In een gewone module
Code:
Sub VenA()
  t = Sheets("Keuzeblad").Cells(4, 7).Value
  If t > 1 Then
    Application.DisplayAlerts = False
    Sheets("C" & t - 1).Visible = True
    Sheets("D" & t - 1).Visible = True
    For Each sh In Sheets
      If InStr("CD", Left(sh.Name, 1)) And Not sh.Visible Then sh.Delete
    Next sh
    Application.DisplayAlerts = True
  End If
End Sub
 
Het nut:
Het rapport wordt toegepast voor inspecties van machine's. Iedere machine kan uit meerdere modules bestaan, voor nu het max. op 9. Iedere module kan ook weer verschillend zijn, dit hoeft niet per definitie een machine te zijn met enkel dezelfde modules. Ik heb dus machine's met 1, 2, 3, 4, 5, 6, 7, 8, of 9 modules.

Als men nu een machine gaat inspecteren bepaald men eerst hoeveel modules hier inzitten. Die selecteer ik, de rest heb ik niet nodig.

Dan de vraag verbergen of verwijderen.
De data van de modules die in het rapport moet komen haal ik uit een (verborgen) tabblad. Als ik de tabbladen bewaar moet ik de output van de keuzemenu's in ieder (later overbodig) tabblad aanpassen omdat anders ieder tabblad wat ook verborgen is wordt gevuld. Vandaar mijn keuze om tabbladen die niet nodig zijn te verwijderen.

En als het aantal modules van een machine wijzigt? Dat kan eens in de x jaar voorkomen. Omdat er dan toch een nieuw rapport dient te worden gemaakt, en de data uit het bestand komt, leek mij dit de meest praktische vorm voor in het werkveld. Ook wil ik het bestand niet te zwaar maken.

Het kan best dat er andere mogelijkheden zijn, uiteraard meerdere invalshoeken. Ik ben hier op uitgekomen...

Ietsiepietsie logisch en duidelijk?


Voor nu: ik heb de macro's ingevoerd, dit werkt, ik kan de code verder aanpassen naar wens, top!.
Ik heb nog wel gedacht aan je opmerking over het nut. Nadat de macro is uitgevoerd is deze niet meer bruikbaar, door het missen van de tabbladen ligt e.e.a. uit de range. Omdat het rapport toch gereed is, is het mogelijk om bij het uitvoeren van de macro ook het tabblad 'Keuzeblad' te laten verwijderen?

Mijn dank is groot :thumb:
 
@VenA,

Ik heb de macro's en module werkend in mijn omgeving. Is het mogelijk om in deze macro op te namen dat op het einde een gedefinieerd tabblad moet worden geopend?
Dus stel, ik wil op het einde naar tabblad 'start', dat deze dan wordt voorgeschoteld (nu opent hij de keuze van 'D')

B.v.d. !
 
Dat kan zo:
Sheets("start").Activate
 
Goedemiddag,

Ik heb onderstaande macro's in een bestand. Alles werkt. Echter, wanneer het bestand is opgeslagen worden de ingevulde cellen op het tabblad 'Basis' ook opgeslagen in de originele .xslm terwijl die juist origineel gehouden dient te worden.

Komt dit nu door het samenvoegen van de macro's? Hoe kan ik het oplossen..??


B.v.d. nogmaals !


Code:
Sub StartRapport()
' SAMEN Macro

    Call OpslaanXLSM 'Macro 1
    Call CellenLegen 'Macro 2
    Call RapportGenereren 'Macro 3
    
End Sub

Sub OpslaanXLSM()

Dim FilenameExcel As String
Dim dirname As String
Dim FileExtStr As String
Dim FileFormatNum As Long
Dim Sourcewb As Workbook
Dim Destwb As Workbook
Dim TempFilePath As String
Dim TempFileName As String
Dim sFile As String
Dim WS_Count As Integer
Dim i As Integer
  
With Application
    .ScreenUpdating = False
    .EnableEvents = False
    .DisplayAlerts = False
End With

Set Sourcewb = ActiveWorkbook

'Determine the Excel version and file extension/format

FileExtStr = ".xlsm": FileFormatNum = 52

'filename
If Sheets("Database").Range("B9") = "1" Then
    FilenameExcel = Sheets("Basis").Range("E24").Value
Else
End If
If Sheets("Database").Range("B9") = "2" Then
    FilenameExcel = Sheets("Basis").Range("E25").Value
Else
End If
If Sheets("Database").Range("B9") = "3" Then
    FilenameExcel = Sheets("Basis").Range("E25").Value
Else
End If
If Sheets("Database").Range("B9") = "4" Then
    FilenameExcel = Sheets("Basis").Range("E26").Value
Else
End If

If FilenameExcel = "" Then
    FilenameExcel = "Geen bestandsnaam opgegeven"
Else
End If

    'Folder picker
    
    With Application.FileDialog(msoFileDialogFolderPicker)
        .AllowMultiSelect = False
        .Title = "Waar zal ik het rapport opslaan"
        .Show
        If .SelectedItems.Count > 0 Then
            dirname = .SelectedItems(1)
            Else
            Exit Sub
        End If
   End With

    'set filenames in header
    WS_Count = ActiveWorkbook.Worksheets.Count
         ' Begin the loop.
         For i = 1 To WS_Count
            Sheets(i).PageSetup.LeftHeader = "&""Open Sans,Cursief""&8Rapportnummer: " & FilenameExcel & ".xlsm"
         Next i



    'FilenamePDF = "Geert-Jan"
    sFile = dirname & "\" & _
    FilenameExcel

    Sourcewb.SaveAs sFile & FileExtStr, FileFormat:=FileFormatNum
    Set Destwb = ActiveWorkbook

    Destwb.Activate
    
    MsgBox "Het nieuwe bestand is opgeslagen in map: " & dirname

    With Application
        .ScreenUpdating = True
        .EnableEvents = True
        .DisplayAlerts = False
    End With
End Sub

Sub CellenLegen()

    Range("P6:Q14").Select
    Selection.ClearContents
    
End Sub

Sub RapportGenereren()
  t = Sheets("Basis").Cells(20, 5).Value
  If t > 1 Then
    Application.DisplayAlerts = False
    Sheets("Voorblad").Visible = True
    Sheets("Basis").Visible = True
    Sheets("Conclusie").Visible = True
    Sheets("Alg.Geg.").Visible = True
    Sheets("C" & t).Visible = True
    Sheets("V" & t).Visible = True
    Sheets("S" & t).Visible = True
    Sheets("Basis").Activate
    For Each sh In Sheets
      If InStr("CVS", Left(sh.Name, 1)) And Not sh.Visible Then sh.Delete
    Next sh
    Application.DisplayAlerts = True
    ActiveSheet.Shapes("CommandButton1").Delete
  End If
End Sub
 
Maak ze leeg in de _BeforeSave van dat document.
 
Wanneer ik b.v. Selection.ClearContents in een _BeforeSave in een macro zet, geldt dit dan enkel voor het bronbestand of ook voor het bestand wat wordt opgeslagen onder de nieuwe bestandsnaam?
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan