Avatar billede ABE15 Seniormester
13. januar 2019 - 15:22 Der er 16 kommentarer og
1 løsning

VBA Userform

Jeg har oprettet en login via en userform i Excel, som er det første der vises når man forsøger at åbne et bestemt ark. I denne login skal man indtaste fornavn, efternavn og et årstal for at få adgang til arket.
Hvis man ikke indtaster noget i en af felterne kommer der en besked om at der mangler data. Beskeden er en MsgYesNo, og i bunden står der om man ønsker at fortsætte, Yes or No.
Hvis man vælger Yes, kommer man tilbage til userformen og prøver igen.

Nu kommer spørgsmålet, hvis vælger No, så skal arket lukkes og man skal have en besked om at man ikke kan få adgang. Men hvordan gør man det.
Avatar billede Jan Hansen Ekspert
13. januar 2019 - 17:28 #1
Hej noget ala.

dim wb as workbook
set wb= thisworkbook
msgbox "du har ikke adgang"
wb.close


ej Testet
Jan
Avatar billede Dan Elgaard Ekspert
13. januar 2019 - 19:29 #2
MsgBox "Adgang nægtet"
ThisWorkbook.Close
Avatar billede ABE15 Seniormester
14. januar 2019 - 18:22 #3
#1 og #2
Jeg er måske ikke helt klar i min forklaring af problemet, så j

Private Sub CommandButton2_Click()
If Textbox1.Value = "" Or Textbox2.Value = "" Or Textbox3 = "" Then
    If MsgBox("Du skal udfylde alle felterne for at få adgang til budgettet. Ønsker du at prøve igen?", vbQuestion + vbYesNo, "Manglende data") <> vbNo Then
Exit Sub 

Det der sker nu er, at hvis man vælger "nej" så er det kun userformen som lukker, og man få adgang til arket.
Jeg har brug for at bygge noget mere kode på, så arket ikke åbner men lukkes ned istedet. 
Har i et forslag til det?
Avatar billede Dan Elgaard Ekspert
14. januar 2019 - 18:39 #4
If Textbox1.Value = "" Or Textbox2.Value = "" Or Textbox3 = "" Then
    If MsgBox("Du skal udfylde alle felterne for at få adgang til budgettet. Ønsker du at prøve igen?", vbQuestion + vbYesNo, "Manglende data") = vbNo Then ThisWorkbook.Close
End If
Avatar billede store-morten Ekspert
14. januar 2019 - 18:48 #5
Sub test()
    Dim Svar As Long

    Svar = MsgBox("Du skal udfylde alle felterne for at få adgang til budgettet. Ønsker du at prøve igen?", vbQuestion + vbYesNo, "Manglende data")
   
    If Svar = vbYes Then
        MsgBox "Du svarede: Ja"
    Else
        MsgBox "Du svarede: Nej og Arket lukkes"
        ThisWorkbook.Close
    End If

End Sub
Avatar billede ABE15 Seniormester
14. januar 2019 - 20:06 #6
#5
Den melder fejl i metoden på "Thisworkbook.Close", hvad kan det skyldes?
Avatar billede store-morten Ekspert
14. januar 2019 - 20:14 #7
Det var mærkeligt :-(

Her er en anden indfaldsvinkel, hvor du tester og tvinger til at udfylde direkte i Userformen:
Private Sub CommandButton2_Click()

If TextBox1 = "" Then
MsgBox "Du skal udfylde Textbox1"
TextBox1.SetFocus
Exit Sub
End If

If TextBox2 = "" Then
MsgBox "Du skal udfylde Textbox2"
TextBox2.SetFocus
Exit Sub
End If

If TextBox3 = "" Then
MsgBox "Du skal udfylde Textbox3"
TextBox3.SetFocus
Exit Sub
End If

End Sub
Private Sub UserForm_terminate()
'Lukker arket, ved brug af det røde kryds
        ThisWorkbook.Close
End Sub
Avatar billede ABE15 Seniormester
14. januar 2019 - 20:46 #8
#7
Det virker.
Men nu skal jeg jo have data fra de 3 tekstbokse ind i arket. Vi kan sige at data fra tekstboks 1 og 2 skal overføres til ark 3, i a1 og a2, mens data fra tekstboks 3 skal overføres til ark 4, i a1.
Hvordan kan det gøres?
Avatar billede store-morten Ekspert
14. januar 2019 - 21:11 #9
Private Sub CommandButton2_Click()

If TextBox1 = "" Then
TextBox1.BackColor = RGB(255, 255, 150)
MsgBox "Du skal udfylde Textbox1"
TextBox1.SetFocus
Exit Sub
Else
TextBox1.BackColor = RGB(255, 255, 255)
End If

If TextBox2 = "" Then
TextBox2.BackColor = RGB(255, 255, 150)
MsgBox "Du skal udfylde Textbox2"
TextBox2.SetFocus
Exit Sub
Else
TextBox2.BackColor = RGB(255, 255, 255)
End If

If TextBox3 = "" Then
TextBox3.BackColor = RGB(255, 255, 150)
MsgBox "Du skal udfylde Textbox3"
TextBox3.SetFocus
Exit Sub
Else
TextBox3.BackColor = RGB(255, 255, 255)
End If

ThisWorkbook.Worksheets(3).Range("A1").Value = TextBox1.Value
ThisWorkbook.Worksheets(3).Range("A2").Value = TextBox2.Value
ThisWorkbook.Worksheets(4).Range("A1").Value = TextBox3.Value

UserForm1.Hide

End Sub
Private Sub UserForm_terminate()
        ThisWorkbook.Close SaveChanges:=False
End Sub
Avatar billede ABE15 Seniormester
17. januar 2019 - 15:12 #10
#9
Der er noget som ikke helt fungerer.
Når man har udfyldt de 3 tekstbokse og trykker ok, så lukker arket ned.
Hvad gør jeg ved det?
Avatar billede store-morten Ekspert
17. januar 2019 - 15:46 #11
Lukker arket når du trykker på Ok?

Det burde virke sådan:
Når man har udfyldt de 3 tekstbokse og trykker ok, så skrives data i de 3 celler og så lukker Userformen ned.
Hvis man trykker på det røde kryds i Userformen lukker arket uden at gemme.
Avatar billede ABE15 Seniormester
17. januar 2019 - 15:49 #12
Ja når jeg trykker ok lukker arket, og der overføres ingen data fra de 3 tekstbokse.
Avatar billede store-morten Ekspert
17. januar 2019 - 15:50 #13
Kan du sende det på E-mail?
Avatar billede store-morten Ekspert
17. januar 2019 - 16:06 #14
Kan du sende arket hvor Userformen ikke starter ved åbning?
Avatar billede store-morten Ekspert
17. januar 2019 - 20:24 #15
Det var:
Private Sub UserForm_terminate()
        ThisWorkbook.Close SaveChanges:=False
End Sub
Der skulle forhindre at lukke Userformen ved at trykke på det røde kryds.
Kan se du har en knap (luk) der gør dette, troede man ikke måtte dette uden at indtaste data ;-)
Kode virkede heller ikke efter hensigten, så slet den.

Denne kode deaktiverer luk på X
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
'  Hvis der trykkes på "Luk knap"
        If CloseMode = vbFormControlMenu Then
        Cancel = True
        MsgBox "Luk på det røde kryds virker ikke"
        End If
End Sub


Du viser Userformen ved åbning af arket.
Et tip kunne være at indlæse de 3 celler i Userformen.
Eller ikke at vise Userformen hvis de 3 celler er udfyldt.
Avatar billede ABE15 Seniormester
20. januar 2019 - 13:20 #16
#15
Ja det er et godt tip.
Hvordan kan det gøres!?
Altså indlæse de 3 celler i Userformen?
Avatar billede store-morten Ekspert
20. januar 2019 - 13:52 #17
Læg denne på din Userform:
Private Sub UserForm_Initialize()
Textbox1 = ThisWorkbook.Worksheets(2).Range("D1").Value
Textbox2 = ThisWorkbook.Worksheets(2).Range("E1").Value
Textbox3 = ThisWorkbook.Worksheets(2).Range("C1").Value
End Sub
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