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

macro wat alle bladen sluit op blad 1 na.

Status
Niet open voor verdere reacties.

ralphnag

Gebruiker
Lid geworden
16 jun 2012
Berichten
66
ik wil graag een macro wat alle bladen verbergt die er zijn. op blad 1 na
en een wat alle bladen zichtbaar maakt die er zijn op blad 1 na deze moet dan verborgen worden.

Ik weet nog niet welke bladen er komen en hoeveel bladen het zullen zijn.
ik heb geen idee welke namen deze zullen hebben.

Het kan zelfs zijn dat blad 1 een andere naam krijgt.

heeft iemand een code die ik na gebruiken hier voor?

met vriendelijk groet Ralph
 
Test het maar eens Ralph.

Twee aparte codes.
Code:
Sub hsv_verbergen()
Dim i As Long
Sheets(1).Visible = True
  For i = 2 To Sheets.Count
   Sheets(i).Visible = False
 Next i
End Sub
Sub hsv_zichtbaar()
Dim i As Long
For i = 2 To Sheets.Count
   Sheets(i).Visible = True
 Next i
Sheets(1).Visible = False
End Sub
Of alles in één code.
Code:
Sub hsv()
Dim sh As Worksheet
If Sheets(1).Visible = False Then Sheets(1).Visible = True
For Each sh In Sheets
 With sh
  If sh.Index <> 1 Then
   sh.Visible = Not sh.Visible
   End If
    End With
  Next sh
  If Sheets(Sheets.Count).Visible = True Then
    Sheets(1).Visible = Not Sheets(1).Visible
 End If
End Sub
 
txs HSV
ik heb het geprobeerd en soms lukt het maar hier bijvoorbeeld niet.
ik heb open sheet 3,
1 en 2 zijn verborgen.

als ik dan onderstaande macro uitvoer opent hij alleen sheet 2 maar ik wil alleen sheet 1 zichtbaar hebben.

achter ' in de code heb ik geschreven wat ik denk dat de volgende regel(s) doen, als ik het fout heb kun je me dan vertellen wat de regels wel doen zodat ik ook leer te begrijpen ipv knippen en plakken.

de code in de macro

Code:
'open sheet 1
    Dim i As Long
    Sheets(1).Visible = True
'sluit alle ander sheets
    For i = 2 To Sheets.Count
    Sheets(i).Visible = False
 Next i
End Sub
 
Laatst bewerkt door een moderator:
Open eenmalig alle bladen.
Daarna de macro draaien.
Nu zal het vast beter gaan.

Met je bijschrift in de code heb je het al begrepen. ;)
 
ik heb de code gedraaid maar hij bleef blad 2 openen in plaats van blad 1
toen heb ik sheet 1 in de code veranderd naar sheet 2 en nu werkt het wel.

kan je me uit leggen waarom dat als je sheet 1 schrijft in deze code hij Blad 2 opent?

Code:
Sub opslaan_afsluiten()
'
' opslaan en afsluiten

'sluit alle ander sheets
    Dim i As Long
    For i = 2 To Sheets.Count
    Sheets(i).Visible = False
'open sheet 1 (is nu nog sheet 2)
    Sheets(1).Visible = False
    Sheets(2).Visible = True
 Next i
' cel c8 en c9 leeg maken
    Sheets(2).Select
    Range("C8,C9").Select
    Selection.ClearContents
'cel c8 selcteren
    Range("C8").Select
' opslaan
    ActiveWorkbook.Save
' afsluiten
    Application.Quit
 
Laatst bewerkt door een moderator:
Er is weinig van m'n code overgebleven.
Wat moet ik hier nog voor reactie op geven.

Sheets(1) is het eerste blad in volgorde.
Als die Blad2 heet (door verwisseling bv.) is dat toch blad1 in volgorde.
 
ik heb jou code in div macro toegepast waaronder in deze.
en hij is inderdaad een beetje veranderd ja :).
Maar ik ben je er wel dankbaar voor wand jou code was wel de sleutel die ik nodig had om 2 avonden zoeken in de zoek fuctie eindelijk alles aan het werken te krijgen.

even terug op mijn onbegrip in het verwisselen van de bladen.
in VB staat Blad1 (login)
Blad2 (geen toegang)
Blad3 (bakd3)

als ik in de macro sheet2 schrijf opent hij blad1 (login) ipv blad2(geen toegang)

als ik het goed begrijp opent hij dus de 2de pagina in de volg orde zoals de tabbladen onder aan het scherm staan weer gegeven.
wand die staan inderdaad anders om.
dus als iemand de bladen om wisselt werkt de macro niet meer. toch?

kun je dan in de macro ipv sheet1 een commando geven dat het altijd Blad1 opent onafhankelijk in welke volgorde ze staan of welke naam het blad heeft?
 
Misshien kan ik je hiermee verlossen Ralph.
Code:
Sub hsv()
Dim sh As Worksheet
If Sheets("Blad1").Visible = False Then Sheets("Blad1").Visible = True
For Each sh In Sheets
 With sh
  If sh.Name <> "Blad1" Then
   sh.Visible = Not sh.Visible
   End If
    End With
  Next sh
  If Sheets(Sheets.Count).Visible = True Then
    Sheets("Blad1").Visible = Not Sheets("Blad1").Visible
  End If
End Sub
 
@HSV

Waarom With ... End With als je hem niet gebruikt ?

Code:
Sub hsv_amended()
  Sheets("login").Visible = True

  For Each sh In Sheets
   sh.visible=sh.Name ="login"
  Next
End Sub

PS. Ralph : het bijwoord want schrijf je met een t.
Als je het over een muur hebt kun je wand met een d gebruiken.
Ik zie geen verband tussen jouw vraag en een muur :), ergo...
 
Laatst bewerkt:
kun je dan in de macro ipv sheet1 een commando geven dat het altijd Blad1 opent onafhankelijk in welke volgorde ze staan of welke naam het blad heeft?

Wat versta je nu eigenlijk onde Blad1 in bovenstaande?
Jij wilt m.i. een altijd een sheet openen zonder dat je weet waar die staat in de volgerde en zonder dat je de naam kent.
 
Draai voor de lol eens:

Code:
Sub M_snb()
    For Each sh In Sheets
       MsgBox "codename" & vbTab & sh.CodeName & vbLf & "name" & vbTab & vbTab & sh.Name & vbLf & "index" & vbTab & vbTab & sh.Index
    Next
End Sub
 
@HSV
Waarom With ... End With als je hem niet gebruikt ?

Denk ik blijven hangen in een testje.
Ik wil alles in één code smeden, maar ik las pas later dat blad1 om en om mee moet veranderen.
Helaas zie ik dat in jouw code niet terug.
 
Wat versta je nu eigenlijk onde Blad1 in bovenstaande?
Jij wilt m.i. een altijd een sheet openen zonder dat je weet waar die staat in de volgerde en zonder dat je de naam kent.

In vb staat bij mij rechts een kolom met de tabbladen en de modules.
daar staat bijv. Blad1(wand)
als ik de naam "Wand" verander in "Want" staat er.
Blad1(wand)

het bestand wat ik aan het maken ben is een basis waar we later diverse bestandjes van gaan maken dus het kan best zijn dat ze later een andere naam gaan geven.
Nu moet je me corrigeren als ik het verkeert heb maar ik heb het gevoel dat als ik in een macro code de naam "wand" gebruik deze vastloopt daar op als de naam van het blad later veranderd word in "Want".

in de formule die ik van VHS heb gehad staat "sheet1" dan telt hij volgens mij van links naar rechts de tabbladen onderaan het scherm.
nu staat "login" op de 2de plek. maar zou die verplaatst worden naar ene ander plek bijv achteraan en komen nog 15 pagina`s bij moet hij "sheet16" heten in de code.

wat ik dus bedoel met "blad1" is de naam die in vb staat voor de naam tussen haakjes die ik zelf heb gegeven, omdat die altijd het zelfde lijk te blijven.
 
PS. Ralph : het bijwoord want schrijf je met een t.
Als je het over een muur hebt kun je wand met een d gebruiken.
Ik zie geen verband tussen jouw vraag en een muur :), ergo...

misschien is het handig om te vertellen dat mijn Nederlands misschien wel net zo erg is als mijn Engels.
Ik kom uit Limburg blijft toch een soort handicap.
You can hate it, or you can try to love it. (txs google translate :) )

Maar toch bedankt ik denk dat ik dit ezels brug je niet ga vergeten.
 
Draai voor de lol eens:

Code:
Sub M_snb()
    For Each sh In Sheets
       MsgBox "codename" & vbTab & sh.CodeName & vbLf & "name" & vbTab & vbTab & sh.Name & vbLf & "index" & vbTab & vbTab & sh.Index
    Next
End Sub

Ik heb deze code in thisworkbook gezet.

ik krijg dan een msgbox met informatie over de tabbladen.
hierin staat onderaan index: 1/2/3.
deze komt overeen met wat ik bedoelde met blad 1/2/3/zoals weer gegeven in VB in het antwoord op de vraag van "haije"



Ik heb geprobeerd de code`s te veranderen van sheet(1) naar index(1) maar dat snapt hij niet. :)
 
Laatst bewerkt:
Ik heb in de code die ik gebaseerd had op die van hsv sheets (1) en sheets (2) veranderd in blad1 en Blad2.
de code werkt nu en hij is niet afhankelijk van blad naam of locatie van het tabblad.

Code:
Sub opslaan_afsluiten()
'
' opslaan en afsluiten OK

'sluit alle ander sheets
    Dim i As Long
    For i = 2 To Sheets.Count
    Sheets(i).Visible = False
'open sheet 1
    Blad1.Visible = True
    Blad2.Visible = False
 Next i
' cel c8 en c9 leeg maken
    Blad1.Select
    Range("C8,C9").Select
    Selection.ClearContents
'cel c8 selcteren
    Range("C8").Select
' opslaan
    ActiveWorkbook.Save
' afsluiten
    Application.Quit
End Sub

voor mij is dit vraagstuk nu afgehandeld bedankt voor jullie hulp.
 
Laatst bewerkt door een moderator:
Lijkt me toch dat je nu wel bekend moet zijn met het feit dat code tussen de codetags geplaatst moet worden. Het doel? je doet er de helpers een groot plezier mee en daar moet je het tenslotte toch van hebben nietwaar.
 
Maarrrrr..... nu heb ook een vraag ik over een andere macro in het zelfde bestand dus gebruik hiervoor dezelfde topic aan gezien jullie weten waar ik over praat. Hoop dat ik dat goed doe laat het even weten maak ik een nieuw topic.

deze macro word geactiveerd door een knop die op alle toekomstige bladen komt te staan behalve op blad 1 en blad 2.
Als de macro uitgevoerd is wil ik graag dat je terug keert naar het blad van waar de macro geactiveerd is.

ik doe er een voorbeeld van het bestandje tot nu toe bij.

Ik had het volgende, uit topic "Via macro terugkeren naar vorige worksheet"
ik heb in "module 1" geplaatst.

Code:
Option Explicit
Public VorigBlad As String.

Sub opslaan_zonder_afsluiten()
'
' opslaan zonder afsluiten
'open sheet 1
    Dim i As Long
    Blad2.Visible = True
'sluit alle ander sheets
    For i = 2 To Sheets.Count
    Sheets(i).Visible = False
    Next i
'opslaan
    ActiveWorkbook.Save
' open alle sheets
    For i = 2 To Sheets.Count
    Sheets(i).Visible = True
    Next i
'sluit sheet 1 en 2
    Blad1.Visible = False
    Blad2.Visible = False
'terug keren naar sheet waar macro gestart is.
    Dim sh       As Worksheet
    On Error Resume Next
    Set sh = Sheets(VorigBlad)
    On Error GoTo 0
End Sub

en in "thisworkbook"

Code:
Private Sub Workbook_SheetDeactivate(ByVal sh As Object)
  VorigBlad = sh.Name
End Sub

Nu werkt de macro, alleen hij gaat steeds terug naar blad 3 ook als ik op blad 4 de knop indruk.

als ik de volgende code er bij zet zoals hij in het topic "Via macro terugkeren naar vorige worksheet" stond
Code:
      If sh Is Nothing Then
    MsgBox "er kan niet worden teruggekeerd, blad bestaat niet " & VorigBlad
  Else
    MsgBox "ik ga nu van " & ActiveSheet.Name & " naar " & VorigBlad
    sh.Activate
    End If

dan zegt hij dat hij van blad3 naar blad2("geen toegang") wil gaan, deze word door de macro in mijn bestandje geopend.

Hierop heb ik de code aangepast.
door het stukje wat terugkeert naar de laatst geopende pagina, voor het openen van de pagina s te zetten hoopte ik dat hij wel deed wat ik wil.
Niet dus nu gaat hij steeds terug naar blad 4 en ik snap niet waarom

aangepaste code
Code:
Sub opslaan_zonder_afsluiten()
'
' opslaan zonder afsluiten
'open sheet 1
    Dim i As Long
    Blad2.Visible = True
'sluit alle ander sheets
    For i = 2 To Sheets.Count
    Sheets(i).Visible = False
    Next i
'opslaan
    ActiveWorkbook.Save
' open alle sheets
    For i = 2 To Sheets.Count
    Sheets(i).Visible = True
    Next i
'terug keren naar sheet waar macro gestard is.
    Dim sh       As Worksheet
    On Error Resume Next
    Set sh = Sheets(VorigBlad)
    On Error GoTo 0
      If sh Is Nothing Then
    MsgBox "er kan niet worden teruggekeerd, blad bestaat niet " & VorigBlad
  Else
    MsgBox "ik ga nu van " & ActiveSheet.Name & " naar " & VorigBlad
    sh.Activate
    End If
'sluit sheet 1 en 2
    Blad1.Visible = False
    Blad2.Visible = False

End Sub
wat gebeurt hier? en hoe los ik dit op.

Ik denk zelf dat ik aan het begin van de code een regel moet maken die bepaalt op welk blad de code gestart word en op het einde een code die zorgt dat hij naar die pagina terug gaat.

maar ik heb geen idee hoe dat moet. iemand een idee?
 

Bijlagen

  • 1 gebruiker.xlsm
    41,2 KB · Weergaven: 26
Lijkt me toch dat je nu wel bekend moet zijn met het feit dat code tussen de codetags geplaatst moet worden. Het doel? je doet er de helpers een groot plezier mee en daar moet je het tenslotte toch van hebben nietwaar.

Zo bedoel je, Wist ik niet txs.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan