Avatar billede lail Forsker
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
Avatar billede Jan K Ekspert
18. februar 2020 - 11:51 #1
Du kan lave en makro, som forhindrer at der fx gemmes før cellerne er udfyldt.
Avatar billede Jan K Ekspert
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
Avatar billede lail Forsker
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)
Avatar billede lail Forsker
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
Avatar billede Jan K Ekspert
18. februar 2020 - 13:02 #5
Der der ingenting, der er 100 % sikkert. Jeg prøver lige igen med dine celler.
Avatar billede Jan K Ekspert
18. februar 2020 - 15:14 #6
DEt komemr lige til at vente lidt. Min pc er gået helt i baglås. Beklager.
Avatar billede Jan K Ekspert
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
Avatar billede store-morten Ekspert
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.
Avatar billede lail Forsker
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
Avatar billede lail Forsker
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
Avatar billede lail Forsker
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
Avatar billede store-morten Ekspert
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.
Avatar billede lail Forsker
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
Avatar billede store-morten Ekspert
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.
Avatar billede Jan K Ekspert
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.
Avatar billede lail Forsker
19. februar 2020 - 14:58 #16
kan ikke åbne linket??
Avatar billede Jan K Ekspert
19. februar 2020 - 16:09 #17
Der var røget et punktum for meget med, Prøv her i stedet:

http://kronsell.net/ExcelProgrammering.htm
Avatar billede lail Forsker
20. februar 2020 - 10:59 #19
Store-morten

det med udskriftsområder virker slet ikke ;O(

LN
Avatar billede store-morten Ekspert
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?
Avatar billede lail Forsker
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
Avatar billede lail Forsker
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
Avatar billede lail Forsker
21. februar 2020 - 09:32 #23
mht gem vil den ikke gemme selv om jeg har tastet noget i alle 5 felter
Avatar billede store-morten Ekspert
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
Avatar billede lail Forsker
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))))((((((
Avatar billede store-morten Ekspert
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
Avatar billede Jan K Ekspert
21. februar 2020 - 10:51 #27
#25

Din kode virker fint hos mig. Hvilken fejlkode giver den?
Avatar billede store-morten Ekspert
21. februar 2020 - 11:17 #28
Run-time error '1004'
Avatar billede Jan K Ekspert
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.
Avatar billede store-morten Ekspert
21. februar 2020 - 14:37 #30
#29
Nej, så får jeg: Run-time error '9'
Avatar billede Jan K Ekspert
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.
Avatar billede lail Forsker
22. februar 2020 - 06:40 #32
Tester lige om et par timer
Avatar billede store-morten Ekspert
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
Avatar billede lail Forsker
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
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester