Arbejd i Excelfiler med en form åben i VBA
Forms er smarte i VBA, men en hindring kan være hvis du skal arbejde i Excelfilen samtidig med at formularen er åben. Her får du en løsning.
Hvis du i en Excelfil har åbnet en formular med koden:
Form1.Show
Så vil du ikke kunne arbejde i Excelfilen, mens denne formular er åben. Du vil faktisk heller ikke kunne arbejde i andre Excelfiler du har åben samtidig. Dette kan være smart, fordi du så forhindrer at der eksekveres noget VBA kode fra formularen, som gør noget i et Excelark som intet har med programmet at gøre. Men det kan samtidig også være en hindring for et fleksibelt arbejdsmiljø med VBA forms. Derfor kan du i stedet vælge at åbne Form1 med følgende kode:
Form1.Show vbModeless
Ved at bruge vbModeless kan du ikke bare arbejde i det Excelark der er i baggrunden af formularen, men også andre Excel-dokumenter du har åbne. Du skal så også være opmærksom på at der er en risiko for at VBA-koden fra formularen gør noget ved en Excelfil der intet har med den at gøre. Fordi når du kan arbejde med andre Excelfiler, kan du også aktivere både disse Excelfiler (Workbooks) og de tilhørende Excelark (Sheets). Og hvis du for eksempel i din VBA-kode har skrevet:
ActiveWorkbook
Så refererer dette ikke til det Exceldokument hvor VBA-koden køres fra, men til den Excelfil du arbejder i lige nu. I stedet kan du vælge at bruge koden:
ThisWorkbook
Du skal også være opmærksom på at referere både til den rigtige Excelfil og til det rigtige Excelark. For eksempel vil dette referere til B2 i det Excelark du arbejder i lige nu:
Range("B2").Value
I stedet skal du referere til ThisWorkbook og så direkte til det enkelte ark.
ThisWorkbook.Sheet("Sheet1").Range("B2").Value
Så undgår du at der sker noget med felterne i et andet Exceldokument.