• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Bestanden plaatsen in Tabel dmv besturingselementen.

Status
Niet open voor verdere reacties.

ExcelFons

Gebruiker
Lid geworden
11 okt 2011
Berichten
41
Goede middag,

Vanmorgen ben ik aan een nieuw projectje begonnen.
Ik zou graag van alle onregelmatigheden op de afdeling een registratie willen maken / laten maken om een bepaald inzicht te krijgen.

Ik kom met een beetje spieken en de zoekfunctie te gebruiken best een aardig eindje al zeg ik het zelf.
Maar ik loop nu wel een beetje vast.

Kunnen jullie eens meekijken?

Ik heb een tab "Voorblad", hier heb ik een knop op geplaatst om het formulier te openen.
Dit werkt prima.

Alleen het 3e invulvak op het formulier is een"listbox", hier kom ik niet uit.
Ik zou moeten kunnen kiezen uit de opties die in de lijst "Afdeling verantwoordelijke" op tab Database staat vanaf cel M2.
Eventueel zouden er nog 3 optie toegevoegd moeten kunnen worden.

Nadat het formulier geheel is ingevuld, zou deze data in de Worksheet Database geplaatst moeten worden, vanaf cel B2 t/m G2 en vervolgens naar beneden werkend.
Dit krijg ik helaas ook niet werkend, nadat ik op de knop "Toevoegen" heb gedrukt.
Ook zou na het commando "Toevoegen"een blanko formulier geopend moeten worden.

Klik ik op "sluiten", krijg ik een foutmelding.
Maar dit zal denk ik komen door de "ListBox"

Is het misschien ook mogelijk om automatisch de datum van invoer in Cel A2 te plaatsen?

Ik hoop dat jullie me weer kunnen helpen.

Het voorbeeld bestand zit in de bijlage.

Alvast bedankt,

Gr Alfons
 

Bijlagen

  • Formulier onregelmatigheden.xlsm
    26,5 KB · Weergaven: 31
Hallo Alfons,

Plaatst deze code in je userform

Code:
Private Sub cmdSluiten_Click()
    Unload Me
End Sub

Private Sub cmdToevoegen_Click()
'Controleer of Ritnummer is ingegeven'
    If Len(txtRitnummer.Value) = 0 Then
        MsgBox "Aub Ritnummer invulen", vbExclamation, "Oeps!"
        Me.txtRitnummer.SetFocus
        Exit Sub
    End If
    
'Controleer of Klantreferentie is ingegeven'
    If Len(txtKlantreferentie.Value) = 0 Then
        MsgBox "Aub Klantreferentie invulen", vbExclamation, "Oeps!"
        Me.txtKlantreferentie.SetFocus
        Exit Sub
    End If
    
'Controleer of AfdelingVerantwoordelijke is ingegeven'
    If Len(ComboBox1.Value) = 0 Then
        MsgBox "Aub AfdelingVerantwoordelijke invulen", vbExclamation, "Oeps!"
        Me.ComboBox1.SetFocus
        Exit Sub
    End If
    
'Controleer of NaamVerantwoordelijke is ingegeven'
    If Len(txtNaamVerantwoordelijke.Value) = 0 Then
        MsgBox "Aub NaamVerantwoordelijke invulen", vbExclamation, "Oeps!"
        Me.txtNaamVerantwoordelijke.SetFocus
        Exit Sub
    End If
    
'Controleer of Omschrijving is ingegeven'
    If Len(txtOmschrijving.Value) = 0 Then
        MsgBox "Aub Omschrijving invulen", vbExclamation, "Oeps!"
        Me.txtOmschrijving.SetFocus
        Exit Sub
    End If
    
'Controleer of Gevolg is ingegeven'
    If Len(txtGevolg.Value) = 0 Then
        MsgBox "Aub Gevolg invulen", vbExclamation, "Oeps!"
        Me.txtGevolg.SetFocus
        Exit Sub
    End If
    
'Plaatst gegevevens in database'
    Dim LstrDate As String
    Dim LDate As Date
    
    LstrDate = Format(Date, "dd-mm-yyyy")
    LDate = CDate(LstrDate)

    Dim rng As Range
    Set rng = Sheets("Database").ListObjects(1).Range
    Dim LastRow As Long
    LastRow = rng.Find(What:="*", _
    After:=rng.Cells(1), _
    Lookat:=xlPart, _
    LookIn:=xlFormulas, _
    SearchOrder:=xlByRows, _
    SearchDirection:=xlPrevious, _
    MatchCase:=False).Row
    
    rng.Parent.Cells(LastRow + 1, 1).Value = LDate
    rng.Parent.Cells(LastRow + 1, 2).Value = txtRitnummer.Value
    rng.Parent.Cells(LastRow + 1, 3).Value = txtKlantreferentie.Value
    rng.Parent.Cells(LastRow + 1, 4).Value = ComboBox1.Value
    rng.Parent.Cells(LastRow + 1, 5).Value = txtNaamVerantwoordelijke.Value
    rng.Parent.Cells(LastRow + 1, 6).Value = txtOmschrijving.Value
    rng.Parent.Cells(LastRow + 1, 7).Value = txtGevolg.Value
    
    
'Maakt formulier leeg'
    Dim ctrl As Control
    For Each ctrl In Controls
        If TypeName(ctrl) = "TextBox" Or TypeName(ctrl) = "ComboBox" Then ctrl = ""
        Next ctrl
        
        Me.txtRitnummer.SetFocus
End Sub

Private Sub UserForm_Initialize()
    ComboBox1.List = Sheets("Database").Range("M2:M12").Value
End Sub

Edit : Advies maak van je Listbox een Combobox
Zie voorbeeld
 

Bijlagen

  • Formulier onregelmatigheden.xlsm
    27,9 KB · Weergaven: 27
Laatst bewerkt:
Dag Alfons,
Er staan net een beetje te veel fouten (kleintjes en grotere) in je code om ze hier op te sommen, maar ik denk dat dit beantwoordt aan je wensen.
Groeten,
Enigmasmurf
 

Bijlagen

  • Formulier onregelmatigheden.xlsm
    27,9 KB · Weergaven: 38
Goedeavond, Loek en Enigmasmurf,

Bedankt voor de oplossingen.

Dacht het enigszins door te hebben, maar als ik dan weer jullie codes lees, ben ik hier en daar het spoor bijster.
Ha ha!
Maar na een beetje Googlen, zie ik de logica toch wel.

Bedankt EnigmaSmurf voor het complete bestand.

Deze ga ik zo vullen.

Fijne avond,


Gr Alfons
 
Het kan allemaal wel een stuk eenvoudiger.

Code:
Private Sub cmdToevoegen_Click()
  For Each ct In Me.Controls
     If InStr("TextList", Left(TypeName(ct), 4)) Then
      If Trim(ct.Text) = "" Then
        MsgBox "Aub " & ct.Tag & " invullen"
        ct.SetFocus
        Exit Sub
      End If
    End If
  Next ct
  Sheets("Database").ListObjects(1).ListRows.Add.Range.Resize(, 7) = Array(CDate(Date), txtRitnummer, txtKlantreferentie, lsbAfdelingVerantwoordelijke, txtNaamVerantwoordelijke, txtOmschrijving, txtGevolg)
  For Each ct In Me.Controls
    If InStr("TextList", Left(TypeName(ct), 4)) Then ct.Value = ""
  Next ct
  txtRitnummer.SetFocus
End Sub
 

Bijlagen

  • Formulier onregelmatigheden.xlsm
    27,6 KB · Weergaven: 41
Laatst bewerkt:
Goedemiddag,

Het formulier werkt super!

Nog 1 verzoekje, ik zoek naar een code om na de invoer de ingevoerde data direct op te slaan.
Ik weet dat het bestaat, maar krijg dit niet passend in mijn sheet.


Ik gebruik de sheet van EnigmaSmurf.


Deze nogmaals in de bijlage,

Alvast bedankt,

Gr Alfons
 

Bijlagen

  • Voorbeeld Formulier Registratie NCR's.xlsm
    29,7 KB · Weergaven: 31
Dus het klikken op de knop toevoegen is te veel werk? Als de tabvolgorde goed staat dan is <Tab> + <Enter> voldoende op de gegevens op te slaan. En anders moet je een Event koppelen aan txtGevolg.
 
Goedeavond,

Nee hoor, dit is zeker niet teveel.
Alleen als de gegevens zijn geplaatst in de database moet er nog ge-saved worden, anders gaan de gegevens verloren.

Zodra er meerdere gegevens zijn ingevuld eind van de dag en je drukt op sluiten van het formulier zijn is de data nog niet opgeslagen.

Na het sluiten van het formulier moet dus ook het document worden opgeslagen om vervolgens geheel af te sluiten.

Er werken meerdere mensen mey dit formulier.
Helaas wordt het document nog weleens afgesloten zonder te saven.

Niet handig, maar het gebeurd.

Vandaar het auto saven.

Gr
 
ActiveWorkbook.Save ben je dan nog nergens tegengekomen?
 
Zie code :

Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
      ThisWorkbook.Save
End Sub

Je kan het ook zo doen bij het afsluiten van het userform wordt gelijk het workbook gesaved dus als ze vergeten op teslaan
zijn de gegevens toch opgeslagen verander de code bij knop Sluiten van het userform in deze code

Code:
Private Sub cmdSluiten_Click()
       ActiveWorkbook.Save
       MsgBox "Workbook Saved", vbinformation
       Unload Me
End Sub

en plaats ook deze code in het userform om te voorkomen dat het userform met het kruisje wordt gesloten

Code:
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    If CloseMode = 0 Then
        Cancel = 1
    End If    
End Sub
 
Laatst bewerkt:
Hoi,

VenA
Ik kwam meerdere variaties tegen.
Maar de 1e 2 kreeg ik niet werkend.
Mijn kennis met VBA is jammer genoeg minimaal.

Loek010
Bedankt, ik ga hem morgenochtend meteen erin zetten.
Hoop dat ie werkt.

Laat het morgen meteen weten.

Fijne avond.

Gr Alfons
 
Leg uit @VenA ook ik wil meer leren en waarom dit niet de veiligste methode is ?
 
@loek010, Excel werkt in tegenstelling tot database programma's als Access niet met het direct vastleggen van gegevens. In het geval van een calamiteit/interruptie ben je in het slechtste geval in een database alleen jouw laatst ingevoerde gegevens kwijt.

Stel met jouw methode: lekker de hele dag gegevens invoeren en plots valt de stroom uit wat dan? Het bestand is niet opgeslagen en dus jammer van het werk. Afhankelijk van de recovery instellingen kan het meevallen. Maar beter en iets trager is het om gelijk na het wegschrijven van de gegevens ook het bestand op te slaan.
 
Laatst bewerkt:
@loek010, Excel werkt in tegenstelling tot database programma's als Access niet met het direct vastleggen van gegevens. In het geval van een calamiteit/interruptie ben je in het slechtste geval in een database alleen jouw laatst ingevoerde gegevens kwijt.

Stel met jouw methode: lekker de hele dag gegevens invoeren en plots valt de stroom uit wat dan? Het bestand is niet opgeslagen en dus jammer van het werk. Afhankelijk van de recovery instellingen kan het meevallen. Maar beter en iets trager is het om gelijk na het wegschrijven van de gegevens ook het bestand op te slaan.

@VenA

Bedankt voor je uitleg ik begrijp het volledig inderdaad is het dan niet de veiligste methode
Heb TS een alternatief aangeboden om bij het afsluiten van het userform het werkboek gelijk op te slaan zoals je ook al aangaf om de gegevens gelijk op te slaan
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan