Just nu i M3-nätverket
Gå till innehåll

Dölja sheets vid startup


xplejjn

Rekommendera Poster

Hej på er,

 

Sitter och klurar på en kod som jag inte får att fungera. Det jag vill uppnå är att när man öppnar arbetsboken ska alla sheets bli xlVeryHidden utom Blad1 och Blad2.

 

Har provat mängder med olika koder, men jag får alltid något körfel, samt att den döljer alla blad utom Blad31?

 

Är det någon som har en enkel, fungerande kod för detta?

 

Tack på förhand.

 

 

 

Länk till kommentar
Dela på andra webbplatser

[color="#0000ff"]Private[/color] [color="#0000ff"]Sub[/color] Workbook_Open()
    [color="#0000ff"]Dim[/color] sh As Worksheet
    [color="#0000ff"]For[/color] [color="#0000ff"]Each[/color] sh [color="#0000ff"]In[/color] ThisWorkbook.Sheets
        [color="#0000ff"]If[/color] sh.Name <> [GRÅ]"Blad1"[/GRÅ] [color="#0000ff"]And[/color] sh.Name <> [GRÅ]"Blad2"[/GRÅ] [color="#0000ff"]Then[/color]
            sh.Visible = xlSheetVeryHidden
        [color="#0000ff"]End[/color] [color="#0000ff"]If[/color]
    [color="#0000ff"]Next[/color] sh

[color="#0000ff"]End[/color] [color="#0000ff"]Sub[/color]

Men bättre är nog om du döljer bladen när du stänger arbetsboken. Om någon öppnar boken utan makron kommer de annars ha tillgång till bladen.

 

 

/T

 

Even when we know we´ll never find the answers, we have to keep on asking questions.

 

 

[inlägget ändrat 2006-10-24 09:51:25 av Monshi]

Länk till kommentar
Dela på andra webbplatser

Monshi. Vet du vad det är för skillnaden på att deklarera som "Sheets" och "WorkSheets"? Om man väljer Sheets så finns ju inte egenskapen .name och man blir tvungen att räkna blad istället. Men samtidigt så fungerar det ju med .sheets istället för .Worksheets för "mängdangivelsen" i ditt exempel.

 

Är worksheets bara ett nyare/utvidgat sätt att skriva sheets eller finns det en mer grundläggande skillnad?

 

Länk till kommentar
Dela på andra webbplatser

Tack för svaret Monshi, men jag får precis samma fel som tidigare. Den döljer alla blad utom Blad31, därefter får jag körfelet:

 

Körfel nr '1004'.:

Metoden 'Visible' i objektet '_Worksheet' misslyckades.

 

Förslag? :)

 

 

 

Länk till kommentar
Dela på andra webbplatser

Vet du vad det är för skillnaden på att deklarera som "Sheets" och "WorkSheets"?

 

Bra fråga. Använder mest Sheets eftersom den är kortare att skriva, upplever dem som ekvivalenta i allmänhet. En titt i VBA-hjälpen ger dock en liten skillnad:

Sheets:

A collection of all the sheets in the specified or active workbook. The Sheets collection can contain Chart or Worksheet objects.

 

WorkSheets:

A collection of all the Worksheet objects in the specified or active workbook. Each Worksheet object represents a worksheet.

....

The Worksheet object is also a member of the Sheets collection. The Sheets collection contains all the sheets in the workbook (both chart sheets and worksheets).

 

oops - nu har jag lärt mig något nytt igen.

Att blanda Sheets och Worksheets som jag gjort i mitt tidigare inlägg är inte att rekommendera, det kommer att bli ett fel om ett Chart-blad finns i arbetsboken.

 

Vill man enbart dölja arbetsblad ska For Each skrivas med Worksheets, ej Sheets. Vill man att alla blad ska döljas, oavsett om det är ett arbetsblad eller en graf, så får man definiera variabeln som nyttjas, sh, som en Variant.

 

Tack för denna frågan, det är men frågor man utvecklas.

 

 

 

 

 

/T

 

Even when we know we´ll never find the answers, we have to keep on asking questions.

 

Länk till kommentar
Dela på andra webbplatser

Du kan inte dölja alla blad, något blad måste alltid vara synligt.

 

Är det möjligtvis det du försöker göra? Dölja alla blad?

 

 

/T

 

Even when we know we´ll never find the answers, we have to keep on asking questions.

 

Länk till kommentar
Dela på andra webbplatser

ja du, jag vet inte riktigt... Kan du dölja blad31 för hand?

 

Vad har du på bladet? Någon VBA-kod? Något som kan störa? Det är inte ett graf-blad för som jag uppmärksammat i ett svar ovan så fallerar koden jag givit om ett sådant finns i boken. Fix för detta given i samma inlägg.

 

 

/T

 

Even when we know we´ll never find the answers, we have to keep on asking questions.

 

Länk till kommentar
Dela på andra webbplatser

Av ren nyfikenhet, vad händer om du använder den "gamla" metoden? Dvs förutsätter att blad 1 och 2 ligger först.

 

Dim I As Integer
For I = 3 To ActiveWorkbook.Sheets.Count
     ActiveWorkbook.Sheets.Item(I).Visible = xlSheetVeryHidden
Next I

 

Länk till kommentar
Dela på andra webbplatser

Föresten, testa Monshis exempel men skriv

 

ActiveWorkbook.Worksheets

stället för

ThisWorkbook.Worksheets

 

Det skall inte vara någon skillnad. Men det blir det i min dator i alla fall.

Microsofts vägar äro outgrundliga...

 

**ED**

Vilket naturligtvis beror på att jag sitter och leker med et makro i boken "Egna.xls".

Hmmmm, ibland skall man bara vara tyst...

 

[inlägget ändrat 2006-10-24 11:07:09 av MH2]

Länk till kommentar
Dela på andra webbplatser

Ah, det här fungerade ju utmärkt!

 

Dim I As Integer
For I = 3 To ActiveWorkbook.Sheets.Count
ActiveWorkbook.Sheets.Item(I).Visible = xlSheetVeryHidden
Next I

 

Nu vidare mot nya problem. Tack för all hjälp båda två. jag återkommer inom kort när jag gör bort mig igen :)

 

Länk till kommentar
Dela på andra webbplatser

xplejjn.

Tänk på att den där metoden KRÄVER att blad1 och blad2 ligger först. Den struntar i namnet och behåller bara de 2-första bladen oavsett vad de heter. Jag tycker att du skall försöka få Monshis metod att fungera, den är mycket bättre.

 

Länk till kommentar
Dela på andra webbplatser

ThisWorkbook är att föredra om koden ska vara i en arbetsbok. Det garanterar att exekveringen av makrot enbart påverkat den arbetsbok däri det startats. I teorin om du använder ActiveWorkbook för en process som kanske tar en liten stund eller en som automatiskt exekveras så kan denna process påverka en annan arbetsbok om du råkar aktivera denna istället.

 

En liten lektion som jag inte tror MH2 egentligen behövde...

 

Har själv gått på denna mina... Framförallt vid makron som ska arbeta genom adressering av blad och någon råkar öppna en kopia av samma arbetsbok...Svårförklarade fel som enkelt rättats med ThisWorkbook.

 

men visst kan det vara en idé att testa med ActiveWorkbook, om det fungerar och inte ThisWorkbook blir jag dock kondunderad.

/T

 

Even when we know we´ll never find the answers, we have to keep on asking questions.

 

Länk till kommentar
Dela på andra webbplatser

ang ActiveWorkbook och ThisWorkbook, se tillägget till ovanstående post (trodde jag jobbade med Private Sub Workbook_Open() men i verkligeheten var det ett makro i "egna.xls" :)).

 

Rodnar, visslar och glider diskret runt hörnet ...

 

Länk till kommentar
Dela på andra webbplatser

:)

 

Jo, jag såg det...

(skre ju En liten lektion som jag inte tror MH2 egentligen behövde...)

 

 

Ett klargörande skadar inte dock.

 

Jeklar vad det droppat in frågor i Excel och VBA kanalerna idag!

 

 

/T

 

Even when we know we´ll never find the answers, we have to keep on asking questions.

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...