Forfatter |
Emne Søg Emne funktioner
|
P.K..
Forum Begynder
Medlem: 01.Jul.2017
Status: Offline
Point: 17
|
Emne: Aktiv makro deaktiveres Sendt: 01.Jul.2017 kl. 10:46 |
Jeg har en makro der kører hver gang der åbnes et worksheet eller laves et nyt. Undertiden kan der være genereret for mange regneark. Der er således behov for at slette inaktuelle ark. Men når der er flere ark markeret kommer der en fejl. Kan jeg skrive en betingelse ind i min auto makro der gør at den kun køres når der kun er 1 ark markeret ? Alternativt - kan man lave en makro der rydder op når regnearket lukkes og sletter alle nyoprettede ark som alle hedder noget med "arkXX" ?
Her er den makro der kører pt. Private Sub Workbook_SheetActivate(ByVal Sh As Object) Call Makro2 End Sub
|
|
|
|
|
EXCELGAARD
Platin bruger
Medlem: 27.Dec.2012
Land: Denmark
Status: Offline
Point: 5419
|
Accepteret svar
Sendt: 01.Jul.2017 kl. 12:37 |
kan man lave en makro der rydder op når regnearket lukkes og sletter alle nyoprettede ark som alle hedder noget med "arkXX"? |
Benyt 'Workbook_BeforeClose' eventen:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
On Error Resume Next Application.DisplayAlerts = False
Dim WS As Excel.Worksheet For Each WS In ThisWorkbook.Worksheets If UCase$(Left$(WS.Name, 3)) = "ARK" Then WS.Delete Next Set WS = Nothing
Application.DisplayAlerts = True
End Sub |
|
|
Kurt Kubik
Sølv bruger
Medlem: 18.Feb.2012
Status: Offline
Point: 209
|
Sendt: 01.Jul.2017 kl. 11:34 |
P.K.. skrev:
Kan jeg skrive en betingelse ind i min auto makro der gør at den kun køres når der kun er 1 ark markeret ? |
if ThisWorkbook.Windows(1).SelectedSheets.Count = 1 then
|
|
EXCELGAARD
Platin bruger
Medlem: 27.Dec.2012
Land: Denmark
Status: Offline
Point: 5419
|
Accepteret svar
Sendt: 01.Jul.2017 kl. 12:37 |
kan man lave en makro der rydder op når regnearket lukkes og sletter alle nyoprettede ark som alle hedder noget med "arkXX"? |
Benyt 'Workbook_BeforeClose' eventen:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
On Error Resume Next Application.DisplayAlerts = False
Dim WS As Excel.Worksheet For Each WS In ThisWorkbook.Worksheets If UCase$(Left$(WS.Name, 3)) = "ARK" Then WS.Delete Next Set WS = Nothing
Application.DisplayAlerts = True
End Sub |
|
Husk, at trykke på [Tak], hvis du kan lide et indlæg. Husk, at trykke på [Accepteret Svar], hvis du kan bruge et løsningsforslag.
|
|
P.K..
Forum Begynder
Medlem: 01.Jul.2017
Status: Offline
Point: 17
|
Sendt: 03.Jul.2017 kl. 16:36 |
Tak for svar Excelgaard.
Når jeg sætter makroen ind i mit regneark sker der imidlertid intet.
Jeg benytter office 365 nyeste version af excel - kan der være ændret i kommandoerne - eller burde det virke så snart excel lukkes ?
|
|
EXCELGAARD
Platin bruger
Medlem: 27.Dec.2012
Land: Denmark
Status: Offline
Point: 5419
|
Sendt: 03.Jul.2017 kl. 17:15 |
Hvor sætter du makroen ind???
|
Husk, at trykke på [Tak], hvis du kan lide et indlæg. Husk, at trykke på [Accepteret Svar], hvis du kan bruge et løsningsforslag.
|
|
P.K..
Forum Begynder
Medlem: 01.Jul.2017
Status: Offline
Point: 17
|
Sendt: 07.Jul.2017 kl. 14:12 |
Jeg sætter den ind i "Denne_Projektmappe"
Testede lidt mere og fandt ud af at den kører fint - der skete bare ikke noget.
Da jeg fjernede UCase$ delen virkede den, så det må være der den fejler. Det bør ikke betyde noget da det kun er "Ark" navne jeg vil fjerne. TAK
|
|
Kurt Kubik
Sølv bruger
Medlem: 18.Feb.2012
Status: Offline
Point: 209
|
Sendt: 07.Jul.2017 kl. 15:50 |
Bliver lidt nysgerrig på, hvad forskellen er imellem UCase$ og UCase?
Altså... hvad betyder tegnet "$"
|
|
EXCELGAARD
Platin bruger
Medlem: 27.Dec.2012
Land: Denmark
Status: Offline
Point: 5419
|
Sendt: 07.Jul.2017 kl. 16:10 |
$ tegnet fortæller VBA, at, hvad der kommer i funktionen allerede er valideret som en string - VBA vil derfor ikke bruge tid på dette, men blot antage, at indholdet/resultatet er en string... ...og, dermed bliver koden en lille smule hurtigere :-)
Alternativt vil VBA starte med at antage 'Variant', hvilket både kræver lidt mere hukommelse, og tage nogle få milisekunder længere tid.
Indrømmet: Ved små koder er det nok lidt 'overkill', men jeg har bare vænnet mig til at gøre det, da jeg altid stoler på mine egne variabel deklarationer.
Koden bliver ganske enkelt mere 'robust'.
|
Husk, at trykke på [Tak], hvis du kan lide et indlæg. Husk, at trykke på [Accepteret Svar], hvis du kan bruge et løsningsforslag.
|
|
EXCELGAARD
Platin bruger
Medlem: 27.Dec.2012
Land: Denmark
Status: Offline
Point: 5419
|
Sendt: 07.Jul.2017 kl. 16:12 |
PS: Husk, at markere svaret som [Accepteret svar], hvis det kunne bruges, så andre også kan få glæde af det...
|
Husk, at trykke på [Tak], hvis du kan lide et indlæg. Husk, at trykke på [Accepteret Svar], hvis du kan bruge et løsningsforslag.
|
|