uitgebreide macro voor het hiden en unhiden van sheets in excel

Status
Niet open voor verdere reacties.

klupwuk

Gebruiker
Lid geworden
23 apr 2008
Berichten
13
Code:
Sub CollectWorkbook()

'ActiveSheet.Unprotect Password:="*******"
ActiveSheet.Select

Application.EnableEvents = False
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual

x = Range("FirstRow").Value
y = Range("FirstCol").Value

Dim currentSheet As String

Cells(x, y).Select

Do While Cells(x, y).Value <> ""

[INDENT]If Cells(x, y).Value = False Then
[INDENT]'1) pick up sheetname from Frontpage
currentSheet = Cells(x, y).Offset(0, 2).Value
'2) select sheet
Worksheets(currentSheet).Select
'ActiveSheet.Unprotect Password:="********"
'3) disable evdre cell
Range("A1").Select
ActiveCell.FormulaR1C1 = Cells(x, y).Offset(0, 3).Value
'ActiveSheet.Protect Password:="*******"
'4) hide selected sheet
ActiveWindow.SelectedSheets.Visible = False
[/INDENT]

End If
[/INDENT]

Worksheets("FrontPage").Select
x = x + 1
Loop

Worksheets("FrontPage").Select
'ActiveSheet.Protect Password:="*****"

Application.EnableEvents = True
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic

End Sub
-------------------------------------------------------------------------------------------------------------------------------
Code:
Sub ResetWorkbook()

'ActiveSheet.Unprotect Password:="******"

Application.EnableEvents = False
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual

x = Range("FirstRow").Value
y = Range("FirstCol").Value

Dim hiddenSheet As String

Cells(x, y).Select

Do While Cells(x, y).Value <> ""
[INDENT]
If Cells(x, y).Value = False Then
[INDENT]
'1) pick up sheetname from Frontpage
hiddenSheet = Cells(x, y).Offset(0, 2).Value
'2) Unhide hiddenSheet
Worksheets(hiddenSheet).Visible = True
'3) reset evdre cell
Range("A1").Select
'ActiveSheet.Unprotect Password:="********"
Range("A1").Value = Cells(x, y).Offset(0, 3).Value
'ActiveSheet.Protect Password:="**********"
[/INDENT]
End If
[/INDENT]

Worksheets("FrontPage").Select
x = x + 1
Loop

Application.EnableEvents = True
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic

'ActiveSheet.Protect Password:="********"

End Sub
---------------------------------------------------------------------------------------------

De macro's zijn, met hulp van een collega, iets uitgebreider geworden en ietsjes moeilijker.
Feitelijk gezien draain de twee macro's hierboven beiden in hetzelfde vba macro.
De eerste macro hide een aantal sheets die niet zijn aangevinkt in "frontpage".
De tweede macro zou alles weer terug moeten zetten naar de oorspronkelijke staat, waarbij dus alle sheets zijn weergegeven in het werkboek.

Ik loop alleen nog vast op het feit dat de macro een formule moet weghalen die normaal niet door Excel wordt ondersteund, maar door een grote plug-in wel.

De eerste sub haalt wel de formule weg, maar de tweede sub zou de formule weer moeten terugzetten.
Die sub zou namelijk alles weer moeten terugzetten in zijn oude staat. Alleen omdat de formule die in de eerste sub onderbroken is, niet wordt ondersteund door Excel kan de tweede sub er niet een = bij zetten. De rest van de formule wordt wel teruggezet, maar zonder de = aan het begin snapt de plug-in niet dat hij moet gaan draaien.

enige suggesties???
 
Je bent nogal summier over die formule zelf.

Wat voor formule is dat? Waar in macro 1 haal je die weg? Waar in macro 2 moet die terug komen te staan?
 
mijn excusses,

in beide gevallen gaat het om stap drie.
de disableling van de evdre cel in macro 1
en het resoren van de evdre cel in macro 2.

in bijna alle sheets van het workbook staat in cel A1 de volgende formule:

=EVDRE(F2,A4:B11)

In sommige staat in cel A1:

=EVDRE(B3,A12:B16)

Dat zijn geen standaard formules van Excel, het is een formule van een plug-in.

Daarom staat in stap drie van beide macro's ook wat hij uit moet schakelen en wat ie weer in moet schakelen.
Alleen omdat het geen standaard formule is, snapt de macro niet dat ie alleen het = teken aan het begin kan weghalen om de formule te onderbreken en dat ie alleen het = teken aan het begin maar hoeft terug te zetten.

Daarom had ik een soort work-around verzonnen waarbij de macro de waarde van een cel terugzet in plaats van het terugzetten van de ingegeven waarde in de macro.

hopelijk snap je er nu iets meer van.
Ik mag eigenlijk niet teveel zeggen over het product, omdat het hier om vertrouwelijke informatie en bedrijfsgegevens gaat.
 
Het is mij niet duidelijk wat er in kolom C van het verborgen werkblad staat (en wat onderdeel uit moet gaan maken van de formule in de cel van kolom A)
Als het tekst is kan die opgehaald worden met Cl.Offset(0, 3).Text
Als het een formule is kan het eenvoudiger met
Range("A1").formula=cl.formula

Code:
Sub CollectWorkbook()
  Worksheets("FrontPage").Unprotect Password:="*******"

  With Application
    .EnableEvents = False
    .ScreenUpdating = False
    .Calculation = xlCalculationManual
  End With 

  for each cl in activesheet.columns(1).specialcells(xlcelltypeconstants)
    If cl.Value = False then
      with Worksheets(cl.offset(,2).value)
         .Unprotect "********"
         .Range("A1").FormulaR1C1 = " = " & cl.Offset(0, 3).Value
         .Protect "*******"
         .Visible = False
      end with
    End If
  Next

  Worksheets("FrontPage").Protect "*****"

  With Application
    .EnableEvents = True
    .ScreenUpdating = True
    .Calculation = xlCalculationAutomatic
  End with
End Sub
beide macro's kunnen eenvoudig geintegreerd worden tot 1.
Alleen niet op basis van de huidige code omdat ze nu op basis van eenzelfde voorwaarde (cl.Value = False ) verschillende dingen doen.
 
vraag opgelost

Deze vraag is ondertussen opgelost, hebben er een zoek functie ingebouwd die een bepaalt gedeelte opzoekt en vervangt voor iets anders.
Met de herstel knop wordt de oude formule weer teruggeplaatst.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan