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 IBM
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