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

Villkorsstyrd formatering av blad


mr Nobody
 Share

Rekommendera Poster

Hej.

 

Jag undrar om det går att använda någon form av villkorstyrd formatering av arbetsbladen utan att använda VBA?

Det jag har är ett huvudblad där jag skall skriva in informationen. I en cell i huvudbladet så kommer det att finnas en rullista

där man har lite olika alternativ. Utifrån valet i denna lista skulle jag vilja att ett specifikt arbetsblad skall bli synligt/valbart

för utskrift. Dem andra bladen som är kopplade till rullistan i huvudbladet skall fortsatt vara dolda.

 

mvh Patrik

 

Länk till kommentar
Dela på andra webbplatser

Det var synd.

 

Om man använder sig av VBA, kan man isåfall få koden att köras automatiskt när man har valt något i den cellen som

skall styra vilket blad som skall vara synligt?

Om isåfall, kommer koden att automatiskt att dölja bladet som inte skall användas för att sen ta fram rätt blad om man skulle byta värde i cellen som styr detta.

 

Undrar mest så att man kanske slipper starta macrot själv eller koppla det till en knapp.

 

Länk till kommentar
Dela på andra webbplatser

  • 3 veckor senare...

Hej.

 

Efter lite stiltje så har jag tagit upp detta projekt igen.

Har försökt använda din kod men det verkar inte fungera.

Så här ser det ut när jag försökte anpassa den efter min arbetsbok (se bild)

 

Dem enda bladen som skall vara synliga hela tiden är "Underlag protokoll" samt "Arbetsprotokoll".

Sen skall koden plocka fram ett av bladen som står med i VBA-koden utifrån de val man gör i bladet "Arbetsprotokoll".

I bladet "Arbetsprotokoll" så finns informationen som styr vilket blad som skall användas i cell "AA22".

Övriga blad skall vara dolda hela tiden.

 

Jag har även kollat så att allt är rätt stavat på alla ställen. Kollade även inställningarna för makrosäkerhet och det skall

vara som du rekommenderade. 

 

 

skärmdump VBA.jpg

Länk till kommentar
Dela på andra webbplatser

Ove Söderlund

Du ska nog inte ha Target.Value inom situationstecken utom möjligtvis använda CStr-funktionen för att definera värdet som en sträng.

 

Sheets(CStr(Target.Value)).Visible = True

 

Länk till kommentar
Dela på andra webbplatser

8 minuter sedan, skrev Ove Söderlund:

Du ska nog inte ha Target.Value inom situationstecken utom möjligtvis använda CStr-funktionen för att definera värdet som en sträng.

 


Sheets(CStr(Target.Value)).Visible = True

 

Hej.

 

Provade vad du skrev och det vart ingen skillnad. Situationstecknena råkade bli kvar när jag testade en annan sak så dem är borta nu.

 

Problemet känns som att makrot aldrig startar då jag har tagit fram de dolda flikarna manuellt och när jag påverkar

cellen som skall styra allt så händer det inget, alla flikarna är fortfarande framme och ingen döljs.

Länk till kommentar
Dela på andra webbplatser

Ove Söderlund

Som felsökning, testa att lägga koden mellan Sub... och End Sub först i din egen sub;

Gör ändring och se om MsgBox triggas.

 

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim KeyCells As Range

' The variable KeyCells contains the cells that will
    ' cause an alert when they are changed.
    Set KeyCells = Range("AA22")

If Not Application.Intersect(KeyCells, Range(Target.Address)) _
           Is Nothing Then

' Display a message when one of the designated cells has been 
        ' changed.
        ' Place your code here.
        MsgBox "Cell " & Target.Address & " has changed."

End If
Exit Sub
End Sub

 

Länk till kommentar
Dela på andra webbplatser

Nu fick jag allt att fungera så koden plockar fram rätt blad och döljer de andra.

Koden jag använder står här under.

 

Citat

Private Sub Worksheet_Change(ByVal Target As Range)


Dim i As String

i = Range("AA22")


'//Dölj alla blad som du vill påverka.
Sheets("Uppgifter VTR (MRED)").Visible = False
Sheets("Uppgifter VTR (TGV)").Visible = False
Sheets("Uppgifter VTR (TR)").Visible = False
Sheets("Uppgifter VTR (SLÄP)").Visible = False
Sheets("Uppgifter VTR (LB)").Visible = False
Sheets("Uppgifter VTR (Mobilkr)").Visible = False

'//Visa bladet som du valde i AA22.
Sheets(i).Visible = True
       

End Sub

 

Det som nu är lite irriterande är att när man fyller i data i andra celler i huvudbladet så "blinkar allt till", precis som att

koden körs igen. Finns det någon/några kodsträngar som man kan lägga till så att när data läggs till i "de andra" cellerna så

kommer inte hela koden att köras.

 

Dem cellerna som kan ändras som styr vilket blad som skall visas är "E7" samt "Q10". Utifrån värdena i dessa  2 celler så

kommer via några OM-satser att slutresultatet redovisas i cell "AA22" som styr vilket blad som skall vara synligt.

 

När jag prövade den ursprungliga koden i den här tråden så vill inget fungera, antagligen för att vad jag tror så kommer man inte förbi de första raderna

Länk till kommentar
Dela på andra webbplatser

Äntligen efter mycket letande så lyckades jag till sist att få allt att fungera.

Kanske inte den finaste koden men den gör sitt jobb.

 

Citat

Private Sub Worksheet_Change(ByVal Target As Range)

Dim KeyCells As Range
Dim i As String

Set KeyCells = Range("E7", "Q10")

If Not Application.Intersect(KeyCells, Range(Target.Address)) _
      Is Nothing Then

i = Range("AA22")



Sheets("Uppgifter VTR (MRED)").Visible = False
Sheets("Uppgifter VTR (TGV)").Visible = False
Sheets("Uppgifter VTR (TR)").Visible = False
Sheets("Uppgifter VTR (SLÄP)").Visible = False
Sheets("Uppgifter VTR (LB)").Visible = False
Sheets("Uppgifter VTR (Mobilkr)").Visible = False


Sheets(i).Visible = True
       
End If
End Sub
 

 

Länk till kommentar
Dela på andra webbplatser

Två små saker.

Vill att det inte ska blinka lägga in

Application.ScreenUpdating = False

i början av koden. Sedan är det fint att återställa den efter även om Excel automatiskt gör det med just denna:

Application.ScreenUpdating = True

 

Nästa sak är att Worksheets("ett namn") fungerar bra men det är lite säkrare att använda VBA-namnet som enbart kan ändras i VBA-editorn och inte påverkas av om namnet på bladet, som användaren ser, ändras.

bild.png.31ee157767ae54298d393f62a881b1b5.png

Länk till kommentar
Dela på andra webbplatser

  • 2 veckor senare...

Tack för hjälpen med detta.

 

Ett annat problem som jag har upptäckt nu är att cellen (AA22) som styr vilket blad som skall visas, den cellen räknar ut rätt värde utifrån värden från två olika celler. Om en av dessa celler är tom eller om kombinationen från båda cellerna inte är korrekta så blir ju värdet i slutcellen felaktigt. När detta händer så får jag upp ett felmeddelande om att 

"Körfel nr 9.: Indexet är utanför intervall".

 

Jag har en till cell (AA17) som kontrollerar värdet i cell AA22 som visar SANT när slutvärdet är något av dem godkända värdena och FALSKT i alla andra fall. Går det att lägga in någon kod att cell AA17 måste också visa SANT för att makrot skall köras? Eller finns det någon bättre ide för att slippa få det här felmeddelandet? 

 

Länk till kommentar
Dela på andra webbplatser

Tack, nu kommer inte felmeddelandet längre.

 

En annan kort fråga bara. Nu plockar makrot fram rätt blad och så men just när ett specifikt blad plockas fram

så försvinner alla kryssrutor och bilder som ligger på bladet som makrot körs på. Om jag går in på ett annat blad och sen tillbaka till huvudbladet så är allt tillbaka igen. Detta händer bara vid ett specifikt blad, alla andra bladen som plockas fram så händer inte detta. Har du någon aning om vad detta kan bero på och om det går att rätta till?

Länk till kommentar
Dela på andra webbplatser

Den sista raden är inte helt nödvändig då Excel återställer den när VBA slutar köra men den skadar inte att ha där, att ha vanan att skriva tillbaka status.

Om man gör samma med beräkningsinstruktionerna så återställs inte de exempelvis.

 

Länk till kommentar
Dela på andra webbplatser

Jag har med Application.ScreenUpdating = True i slutet av koden.

 

Det som är konstigt är att 5 av 6 blad så händer inte det här. 

Det är bara vid det sjätte bladet som det här problemet uppstår.

Länk till kommentar
Dela på andra webbplatser

Kanske, då menar jag kanske, om du fyrar av en omräkning av bladet i slutet av koden, efter screenupdating = true

worksheet.calculate

Kanske?

eller gör en snabb select av annat blad och tillbaka igen. Känns som en bugg, att excel inte renderar om vyn korrekt.

Länk till kommentar
Dela på andra webbplatser

  • 1 month later...

Jag lade till så att koden byter blad och sen tillbaka till rätt blad igen så nu funkar förhoppningsvis allting.

 

Tack för all hjälp.

Länk till kommentar
Dela på andra webbplatser

 Share

×
×
  • Skapa nytt...