18. februar 2020 - 10:41
Der er
31 kommentarer og 3 løsninger
validering og msg box
Jeg har et regne ark med forskellige celler Der er nogle celler som skal udfylde B10, B11;F11, B13 og J213 Nogen der har en idé til hvordan det løses. LN
Annonceindlæg fra DE-CIX
Edge computing: behandling ved kilden
Edge computing revolutionerer den måde, data behandles på, ved at bringe kapacitet og ydeevne tættere på dér, hvor der er behov for det.
15. april 2025
18. februar 2020 - 11:51
#1
Du kan lave en makro, som forhindrer at der fx gemmes før cellerne er udfyldt.
18. februar 2020 - 11:58
#2
Her er et eksempel. Indsæt selv de celler, der ikke må være tomme Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) If IsEmpty(Range("a1")) Then MsgBox "Du skal udfylde felterne xx xx xx og xx, vbokonly" Cancel = True End If End Sub
18. februar 2020 - 12:26
#3
Hvad hvis folk starter med at gemme filen. Overvejer at lave det som en skabelon med makroer - så jeg sikrer at man altid starter op med tomme celler. Meeeen det er nu ikke 100% sikkert ;O)
18. februar 2020 - 12:29
#4
Får ingen msg box op - kun en box der sprøger om jeg vil gemme en kopi eller overskrive ændringer
18. februar 2020 - 13:02
#5
Der der ingenting, der er 100 % sikkert. Jeg prøver lige igen med dine celler.
Synes godt om
1 synes godt om dette
18. februar 2020 - 15:14
#6
DEt komemr lige til at vente lidt. Min pc er gået helt i baglås. Beklager.
18. februar 2020 - 15:35
#7
Prøv med denne, som skal ligge i projektmappens kodeark. Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Dim cel As Range Dim cou As Integer Range("B10,B11,B13,F11,J13").Select cou = 0 For Each c In Selection.Cells If IsEmpty(c) Then cou = cou + 1 Else cou = cou + 0 End If Next c If cou > 0 Then MsgBox "Du skal udfylde cellerne B10, B11, B13, F11 og J13", vbOKOnly Cancel = True Else End If End Sub
Synes godt om
1 synes godt om dette
18. februar 2020 - 19:09
#8
Denne kommer når arket lukkes:
Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim bytAns As Long If Not Application.WorksheetFunction.CountA(ThisWorkbook.Sheets("Ark1"). _ Range("B10, B11, B13, F11, J213")) = 5 Then bytAns = MsgBox("Du har anmodet om lukke arket: " & vbCrLf & _ ActiveWorkbook.Name & vbCrLf & _ vbCrLf & "uden at have udfyldt cellerne B10, B11, B13, F11 og J213" & vbCrLf & _ vbCrLf & "Ønsker du det?", vbYesNo + vbQuestion, _ "Bekræft luk") If bytAns = vbYes Then Else Cancel = True End If End If End Sub
Man kan så lukke arket og vælge: Nej, og udfylde cellerne.
Eller vælge: Ja, og arket lukkes og man spørges om man vil gemme ændringer.
Synes godt om
1 synes godt om dette
19. februar 2020 - 09:09
#9
Hold nu op de virker - begge to Det var mig der havde lagt koden forkert. Hvordan ved man hvor man skal placere de forskellige kode??? Er der en rettesnor? LN
19. februar 2020 - 09:13
#10
Kender i et godt e-learnings kursus for dummies og VBA ;O)) Jeg har søgt om kursus via arbejde, men det er ikke godkendt endnu -og det har lidt lange udsigter. Men hvis jeg nu kunne komme med et billigere alternativ, hvis det bliver afvist - eller alternativt selv betale? LN
19. februar 2020 - 09:36
#11
ha ha er lidt fanget testede og nu kan jeg ikke selv gemme den ;O)))) Dvs jeg skal slå makoren fra rette til gemme og så slå makroen til uden at gemme ;O)) Men det kan jeg leve med
19. februar 2020 - 09:42
#12
Det burde du kunne med #8 Man kan så lukke arket og vælge: Nej, og udfylde cellerne. Eller vælge: Ja, og arket lukkes og man spørges om man vil gemme ændringer.
19. februar 2020 - 09:56
#13
øh hvad mener du med #8 Jeg synes det driller Jeg kan bare ikke få lov til selv at gemme en tom skabelon nu
19. februar 2020 - 10:11
#14
Koden i #8 Private Sub Workbook_BeforeClose (Cancel As Boolean) Aktiveres når arket lukkes ikke når det gemmes.
19. februar 2020 - 13:46
#15
Ikke et kursus, men du kan lære lidt her
http://kronsell.net/ExcelProgrammering.htm. Specielt afsnittet om hændelser fortæller lidt om, hvor koden skal være gemt for at fange den forskellige hændelser, der indtræffer.
19. februar 2020 - 14:58
#16
kan ikke åbne linket??
19. februar 2020 - 16:58
#18
20. februar 2020 - 10:59
#19
Store-morten det med udskriftsområder virker slet ikke ;O( LN
21. februar 2020 - 08:01
#20
Jeg tror ikke man kan lave multi område som udskriftområde! Jeg har rette i arket i #18 til et sammen hængende område, prøv om det virker?
21. februar 2020 - 09:22
#21
Det med at gemme og tjekke de 5 celler der skal testes virker ikke Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Dim cel As Range Dim cou As Integer Range("B10,B11,B13,F11,J213").Select Den vil ikke tage sidste linie i dette udklip
21. februar 2020 - 09:26
#22
mht udskrift arbejder jeg pt lidt i Private Sub Workbook_BeforePrint(Cancel As Boolean) If ThisWorkbook.Sheets("1.forkalkulation").Range("K1") = 0 Then ActiveSheet.PageSetup.Zoom = 60 ActiveSheet.PageSetup.PrintArea = "$A$1:$K$268" Set ActiveSheet.HPageBreaks(1).Location = Range("A238") end If Men synes ikke det virker 100%. Men bliver snydt lidt af at udskriftsvinduet ikke er retvisende Synes primært det er k1=3 der driller lidt LN
21. februar 2020 - 09:32
#23
mht gem vil den ikke gemme selv om jeg har tastet noget i alle 5 felter
21. februar 2020 - 09:33
#24
Den jeg lavede, er før luk.
Private Sub Workbook_BeforeClose (Cancel As Boolean) Dim bytAns As Long If Not Application.WorksheetFunction.CountA(ThisWorkbook.Sheets("Ark1"). _ Range("A1")) = 1 Then bytAns = MsgBox("Du har anmodet om lukke arket: " & vbCrLf & _ ActiveWorkbook.Name & vbCrLf & _ vbCrLf & "uden at have udfyldt cellerne A1" & vbCrLf & _ vbCrLf & "Ønsker du det?", vbYesNo + vbQuestion, _ "Bekræft luk") If bytAns = vbYes Then Else Cancel = True End If End If End Sub
Men hvis du vil bruge den anden, så prøv:
ThisWorkbook.Sheets("Ark1").Range("B10,B11,B13,F11,J213").Select
21. februar 2020 - 10:20
#25
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Dim cel As Range Dim cou As Integer ThisWorkbook.Sheets("1.forkalkulation").Range("B10,B11,B13,F11,J213").Select cou = 0 For Each c In Selection.Cells If IsEmpty(c) Then cou = cou + 1 Else cou = cou + 0 End If Next c If cou > 0 Then MsgBox "Du skal udfylde cellerne med rød ramme omkring", vbOKOnly Cancel = True Else End If End Sub Den fejler stadig ved Range ;O))))((((((
21. februar 2020 - 10:29
#26
Prøv: Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Dim cel As Range Dim cou As Integer ThisWorkbook.Sheets("1.forkalkulation").Select ThisWorkbook.Sheets("1.forkalkulation").Range("B10,B11,B13,F11,J213").Select cou = 0 For Each c In Selection.Cells If IsEmpty(c) Then cou = cou + 1 Else cou = cou + 0 End If Next c If cou > 0 Then MsgBox "Du skal udfylde cellerne med rød ramme omkring", vbOKOnly Cancel = True Else End If End Sub
21. februar 2020 - 10:51
#27
#25 Din kode virker fint hos mig. Hvilken fejlkode giver den?
21. februar 2020 - 11:17
#28
Run-time error '1004'
21. februar 2020 - 13:00
#29
#28 Kunne skyldes at arket ikkevnavngivet, som det anføres i koden. Fx at der er et mellemrum for meget et sted el.l.
21. februar 2020 - 14:37
#30
#29 Nej, så får jeg: Run-time error '9'
21. februar 2020 - 20:09
#31
1004 burde vel indikere at det pågældende range ikke findes, men det forstår jeg ikke, da der jo ikke refereres til et navngivet range.
22. februar 2020 - 06:40
#32
Tester lige om et par timer
22. februar 2020 - 11:11
#33
Hvis #26 ikke virker, kan du prøve:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) If Not Application.WorksheetFunction.CountA( _ ThisWorkbook.Sheets("1.forkalkulation").Range("B10,B11,B13,F11,J213")) = 5 Then MsgBox "Du skal udfylde cellerne med rød ramme omkring", vbOKOnly Cancel = True Else End If End Sub
22. februar 2020 - 22:08
#34
tror den sidste virker Driller stadig lidt når jeg selv skal gemme skabelonen - men ellers ser den umiidelbart ud til at virle
Excel-kurser for alle niveauer og behov – find det kursus, der passer til dig