Måste bara börja med blad...
Det här med bladnamn är lite tycke och smak, men man bör anamma ett konsekvent sätt när man jobbar med/mot de olika bladen.
Skrivsättet du använder är absolut inte fel, men jag ska visa för- och nackdelar med de olika sätt som finns, och du kanske hittar ett sätt som du fäster dig vid.
När man jobbar i excelfiler kan allt ifrån ett till flera tiotals, eller hundratals, blad förekomma. Och blad kan läggas till och ibland raderas. När man då jobbar i vba behöver man tala om vilket blad som avses när en cell, t ex A1, eller annat ska påverkas.
Det finns tre huvudvarianter här:
- Worksheets(1).Range("A1")
- Worksheets("Blad1").Range("A1")
- Blad1.Range("A1")
Alternativ 1 innehåller så kallad indexerad notering, där värdet inom parentes anger vilket blad i ordningen som gäller. Flyttas bladen så ändras ordningen - där måste man ha koll. Men detta är ett smidigt sätt att loopa igenom flera blad
om man har fler än ett.
Alternativ 2 innehåller namnet som en textsträng för det blad som gäller. Flyttar man runt bladen så gäller kopplingen fortfarande eftersom namnet styr. Döper man däremot om bladet måste detta justeras i koden. Oftast gör man det på ett
ställe - i början av koden då det är smartast att använda variabler, typ Set ws = , istället för att hårdkoda bladnamn genom hela koden. Återkommer till detta.
Alternativ 3 styr mot det blad som det var när bladet skapades. Blad1 är det första bladet (oavsett om det flyttas eller byter namn), Blad2 är det andra bladet som skapades (oavsett om det flyttas eller byter namn), osv. Fördelen här är
man alltid pekar mot det blad som avses oavsett yttre omständigheter, men personligen tycker jag detta är det sämsta av alla alternativ (personlig åsikt). Låt säga att två blad skapas (Blad1 och Blad2) som också initialt kommer ges namnen Blad1 samt Blad2.
Om det första bladet tas bort och det andra bladet då döps om till Blad1 så kommer den andra ändå som objekt vara Blad2 eftersom detta aldrig ändras. Namnet må vara Blad1 men dess objektnamn är Blad2, vilket är precis vad du ser i den bild du visade. För mig
är detta rörigt, vänta bara om/tills du har filer med många blad.
Nackdelen med detta är att om man har många blad som skapats, justerats, raderats genom åren, och kopplar kod till de olika bladen så kommer kanske Blad2 egentligen mena det fjärde bladet, Blad5 kanske är det andra bladet osv. För mig är detta när man kollar
i projektfönstret för de olika bladen helt vilseledande. Personligen styr jag på alt 1 eller 2, konsekvent.
Inget alternativ är enskilt rätt eller fel, ha koll på bladen och var noggrann och konsekvent så fixar det sig.
Min princip gällande blad är att i början av koden alltid sätta bladvariabler till de blad man ämnar påverka.
T ex,
Dim ws As Worksheet
Set ws = Worksheets("Bladnamn")
rakt igenom hela koden använder jag nu ws.Range("A1") eftersom
ws pekar mot det blad som har namnet Bladnamn. Om detta namn ändras, så ändrar man det bara på ett ställe, överst i koden där variabeln sattes.
Lång harang, och nu till den korta harangen.
Din formaterade text (datum) sätts enligt
LblDag.Caption = Format(TxtDatum.Value, "dddd")
eller bara "ddd" om du vill ha tre tecken för veckodagen.