30. april 2006 - 09:14Der er
25 kommentarer og 2 løsninger
Advarsel m svarboks i makro
Jeg har lavet et lille kasseregnskab til pædagoger til at lave beboerregnskab i. En knap med en tilknyttet makro kopierer slutsaldo og sætter den som startsaldo, rydder resten af regnearket og voila, arket er klar til at føre næste måneds regnskab i. Pædagoger er tit utroligt dygtige! Det er bare ikke ret tit de er i stand til at overskue hvad der sker i en computer (min påstand). Så en kraftig advarsel med en svarboks der giver mulighed for at vælge at gennemføre den beskrevne makro eller at annulere for først at gemme arket under et fornuftigt navn ville være ønskeligt. Det skulle helst ligge i begyndelsen af makroen så det ikke lader sig gøre at slette arket uden at få en advarsel. Kan i eksperter hjælpe?
svar = MsgBox("Er du sikker på at du vil indsætte ny måned?", vbOKCancel) If svar = vbCancel Then filnavn = Application.GetSaveAsFilename ActiveWorkbook.SaveAs filnavn Exit Sub .... din kode End If
svar = MsgBox("Er du sikker på at du vil indsætte ny måned?", vbOKCancel) If svar = vbCancel Then filnavn = Application.GetSaveAsFilename ActiveWorkbook.SaveAs filnavn Exit Sub Else ....din kode End If
Det virker, men! Når man vælger Annuller bruger den samme filnavn som det eksisterende regneark, men sat i anførelsestegn. Har anførelsesregnene nogen betydning? Hvis man i Gem Som boksen også vælger at annullere får filen pludselig navnet FALSE.xls ? Det må der da kunne gøres noget ved. Imidlertid har du løst spørgsmålet, så det ville da nok være på plads at begynde at ændre kommebtarer til svar ;-)
Jeg plejer blot indsætte denne ene linie i de makroer, hvor jeg vil give brugeren mulighed for at fortryke:
If MsgBox("Denne handling vil ..." + Chr(10) + "og handlingen kan efterfølgende IKKE fortrydes!" + Chr(10) + Chr(10) + "Forsætte?", vbOKCancel, "ADVARSEL!") = vbCancel Then Exit Sub
Trykker brugeren <OK> forsætter makroen, og trykker han <Annuller> stopper makroen og hopper tilbage til Excel.
Du kan selv indsætte ny titel, hvor der står "ADVARSEL!" og selv indsætte ny tekst ligeledes...
Jeg har nu næsten fået makroen til at virke som jeg ønsker. Det eneste tilbage er at meddelelsen gerne skulle deles i 2 linjer. Den del af makroen ser sådan ud: svar = MsgBox("Er du sikker på at du vil klargøre regnskabet til en ny måned? " & _ "Slutsaldo vil blive sat til Startsaldo og alle andre data vil blive slettet", vbYesNo + vbExclamation) Efter hvad jeg har kunnet læse mig til skulle [" & _ "] få meddelelsen til at blive delt på 2 linjer, men det gør den ikke. Hvad gør jeg forkert.
Du skal have et mellemrum mellem & og _ Eller også skal du bruge VbNewLine Hvordan har du fået den til ikke at gemme som false. Har selv prøvet uden held ?
Når den er HELT færdig kan jeg lige indsætte hele makroen som kommentar. Jeg prøver lige VbNewLine. Der ER faktisk et mellemrum mellem & og _. Kan det være fordi der også er et mellemrum mellem " og & PS. Send nu et svar, ikke mrjh
Det der med VbNewLine gik galt, jeg fik en compile error. De 2 linjer ser nu sådan ud: svar = MsgBox("Er du sikker på at du vil klargøre regnskabet til en ny måned? " _VbNewLine "Slutsaldo vil blive sat til Startsaldo og alle andre data vil blive slettet", vbYesNo + vbExclamation)
>pistolprinsen Så kom du sørme også med. Jeg brugte en del af din kode (" + Chr(10) + ") i stedet for (" & _") eller (" _VbNewLine"). Måske var det bare fordi koden faktisk var delt i 2 linjer! I hvert fald har i begge medvirket til at løse mit spørgsmål, så hvordan deler jeg lige point. >mrjh Post nu lige et svar, ikke. Jeg lægger hele makroen i en særskilt kommentar.
ub OverførTilNæsteMåned() ' ' OverførTilNæsteMåned Makro ' Makro indspillet 30-04-2006 af Per Holst '
' svar = MsgBox("Er du sikker på at du vil klargøre regnskabet til en ny måned? " + Chr(10) + "Slutsaldo vil blive sat til Startsaldo og alle andre data vil blive slettet", vbYesNo + vbExclamation) If svar = vbNo Then filnavn = Application.GetSaveAsFilename Exit Sub Else Application.Goto Reference:="R40C11" Selection.Copy Application.Goto Reference:="R4C7" Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Range("A4:A39").Select Application.CutCopyMode = False Selection.ClearContents Range("A5:F39").Select Selection.ClearContents Range("A4").Select End If
End Sub
Det kunne da også godt være at der kunne ryddes lidt op i koden?
>mrjh Angående dit spørgsmål, jeg slettede linjen [ActiveWorkbook.SaveAs filnavn], så gemte den ikke længere som FALSE.xlt
svar = MsgBox("Er du sikker på at du vil klargøre regnskabet til en ny måned? " & VbNewLine & "Slutsaldo vil blive sat til Startsaldo og alle andre data vil blive slettet", vbYesNo + vbExclamation)
>mrjh Det tror jeg på, men jeg har ikke tænkt mig at afprøve det. Det er nok fordi hele meddelelsen skal stå i én fortsat linje. Det virker med [" + Chr(10) + "] når det hele står på én linje. Tak for hjælpen begge to. ;-)
Sub OverførTilNæsteMåned() svar = MsgBox("Er du sikker på at du vil klargøre regnskabet til en ny måned? " + Chr(10) + "Slutsaldo vil blive sat til Startsaldo og alle andre data vil blive slettet", vbYesNo + vbExclamation) If svar = vbNo Then filnavn = Application.GetSaveAsFilename If filnavn = False Then Exit Sub Else ActiveWorkbook.SaveAs filnavn End If Else ....din kode End If
Sub OverførTilNæsteMåned() ' ' OverførTilNæsteMåned Makro ' Makro indspillet 30-04-2006 af Per Holst '
' svar = MsgBox("Er du sikker på at du vil klargøre regnskabet til en ny måned ?" + Chr(10) + " " + Chr(10) + "Slutsaldo vil blive sat til Startsaldo" + Chr(10) + "og alle andre data vil blive slettet", vbYesNo + vbExclamation) If svar = vbNo Then filnavn = Application.GetSaveAsFilename If filnavn = False Then Exit Sub Else ActiveWorkbook.SaveAs filnavn End If Else Application.Goto Reference:="R2C4" Selection.ClearContents Application.Goto Reference:="R40C11" Selection.Copy Application.Goto Reference:="R4C7" Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Range("A4:A39").Select Application.CutCopyMode = False Selection.ClearContents Range("A5:F39").Select Selection.ClearContents Range("A4").Select End If
Jeg får en Run-time error med henvisning til linjen Range("d2").ClearContents Jeg kan se at jeg ikke har nogen unødvendig kode, tænkte bare at den måske kunne blive lidt kortere. Men da den jo nu virker helt efter hensigten tror jeg at det ville være en god ide at stoppe nu. Tak for hjælpen ;-)
Hej pernol Jeg er pædagog ;-) Jeg faldt over dit spørgsmål her på siden, da jeg i flere timer har sidet og ledt efter kasseregnskab til pædagoger, netop til brug for beboerregnskab :-) Hvor kan jeg få mere information om det regnskab du har lavet??? på forhånd tak
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.