• 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.

Foutmelding 91 bij verwerking userform

  • Onderwerp starter Onderwerp starter JanBG
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

JanBG

Verenigingslid
Lid geworden
30 aug 2017
Berichten
971
Hallo,

Voor de verwerking van ingevoerde data in een userform gebruik ik de volgende code:

Code:
Option Explicit
Dim Ctrl As Control
Dim iRow As Long, i As Long
Dim rng As Range, fnd As Range
Dim ws As Worksheet
Private Sub CommandButton1_Click()
Unload Me
End Sub
Private Sub CommandButton2_Click()
    For Each Ctrl In Controls
        If TypeOf Ctrl Is MSForms.OptionButton Then Ctrl.Value = False
        If TypeName(Ctrl) = "TextBox" Or TypeName(Ctrl) = "ComboBox" Then Ctrl.Value = ""
    Next Ctrl
End Sub
[COLOR="#FF0000"]Private Sub CommandButton3_Click()
Set ws = Worksheets("Invoer")
    iRow = ws.Cells.Find(What:=TextBox9, SearchOrder:=xlRows, SearchDirection:=xlPrevious, LookIn:=xlValues).Row
    ws.Cells(iRow, 2).Resize(, 9).Value = Array(TextBox9.Value, TextBox1.Value, TextBox2.Value, TextBox3.Value, _
    TextBox4.Value, TextBox5.Value, TextBox6.Value, TextBox7.Value, CDate(TextBox8.Value))
    
    MsgBox "De aanpassingen zijn opgeslagen!", vbInformation, "Klaar"
    For Each Ctrl In Controls
        If TypeOf Ctrl Is MSForms.OptionButton Then Ctrl.Value = False
        If TypeName(Ctrl) = "TextBox" Or TypeName(Ctrl) = "ComboBox" Then Ctrl.Value = ""
    Next Ctrl
End Sub[/COLOR]
Private Sub UserForm_Initialize()
    TextBox9.Value = WorksheetFunction.Max([Nr]) + 1
End Sub

Ik gebruik deze code ook in een ander bestand en daar werkt het prima, maar in dit bestand krijg ik de volgende foutmelding:

Foutmelding 91.png

Bij foutopsporing zie ik dit:

foutopsporing.png

Iemand een idee?

Bij voorbaat dank
 
Kennelijk wordt het gezochte niet gevonden. Maak er eens dit van:
Code:
iRow = 0
Set ws = Worksheets("Invoer")
Set fnd = ws.Cells.Find(What:=TextBox9, SearchOrder:=xlRows, SearchDirection:=xlPrevious, LookIn:=xlValues)
If Not fnd Is Nothing Then
    iRow = fnd.Row
Else
    MsgBox TextBox9.Text & " niet gevonden", vbCritical
End If
 
Laatst bewerkt:
@ Edmoor,

Dank, maar dat werkt niet, want in Textbox 9 wordt automatisch het eerstvolgende volgnummer ingevuld en dat is dus (nog) niet te vinden in het bestand. Resulteert dus in de melding dat het nummer niet gevonden is.

Bovenstaande geldt alleen voor een leeg bestand; zodra er wel data in het bestand staan werkt de code wel.

Dank, ik sluit het toppic
 
Laatst bewerkt:
Ja, en dat is dus precies wat ik zeg waar het fout gaat.
Je hebt geen document geplaatst dus nu de oorzaak gevonden is mag je dat zelf oplossen waarbij ik al een aanzet heb gegeven.
 
Laatst bewerkt:
Als gezegd Edmoor: dank. Dacht niet dat hierbij een vb nodig was, vandaar dat ik het niet geplaatst heb. Bevat nogal wat gegevens die "AVG-technisch" gevoelig liggen en het nogal een werkje zou zijn om het bestand te anonimiseren :D
 
Begrijp ik.
Je moet nu dus zelf bepalen wat er moet gebeuren als het gezochte niet werd gevonden.
Hoe je dat kan opvangen heb ik laten zien en in plaats van het tonen van een messagebox moet er kennelijk iets anders worden gedaan.
Dat is nu aan jou :)
 
Daar is inderdaad voor cracks geen bestand voor nodig en zoals door Ed juist beantwoord.

De variabele iRow mag worden weggelaten en geschreven met cells(fnd.row,2)
 
Leesbaarheid.
Het heeft mijn voorkeur in een Userformmodule de volgorde van de uitvoering van de code weer de geven: initialize staat bovenaaan, unload staat onderaan

Code:
Private Sub UserForm_Initialize()
  TextBox9 = Application.Max([Nr]) + 1
End Sub

Private Sub CommandButton2_Click()
    For Each it In Controls
       Select Case TypeName(it)
       Case "OptionButton"
          it = 0
       Case "TextBox", "ComboBox"
          it = ""
       End Select
    Next
End Sub

Private Sub CommandButton3_Click()
    If TextBox9 <> "" Then 
       Sheets("Invoer").Columns(1).Cells.Find(TextBox9, , , 1).Resize(, 9).Value = Array(TextBox9, TextBox1, TextBox2, TextBox3, TextBox4, TextBox5, TextBox6, TextBox7, CDate(TextBox8))
        MsgBox "De aanpassingen zijn opgeslagen!", vbInformation, "Klaar"
        commandbutton2 = True
    end if
End Sub

Private Sub CommandButton1_Click()
    Unload Me
End Sub
 
Laatst bewerkt:
@ Edmoor, Jou oplossing werkt prima op voorwaarde dat het geen 'leeg' bestand is en dat is het echte bestand niet (een kleine 10.000 verschillende data).
 
Laatst bewerkt:
Hoe het in jouw situatie moet worden opgelost is geheel aan jezelf.
Adviezen van snb met betrekking tot VBA zou ik altijd ter harte nemen.
 
@ snb, ik snap je bedoeling, maar bij het schrijven van een code begin ik meestal met de code's waar ik niet heel diep over hoef na te denken...:)
 
Het draadje is zo voor meelezers wel een beetje verwarrend als je op berichten gaat reageren in #1 en #3.
 
En vooral #9.

De oplossing van @edmoor is juist een controle of de tekst van Textbox9 wel is gevonden in je blad.
Dus die werkt altijd op een leeg blad.

Set fnd is dus nothing.
 
Als #13 en #14 voor mij bedoeld zijn: in #11 reageer ik op #8 en in #12 op #10. #9 is een eerste reactie op de code van Edmoor, waarbij de macro stopt bij de messagebox in een leeg bestand, maar dat is opgelost als die messagebox verwijderd wordt.

Maar of het hier allemaal duidelijker van wordt...:confused:
 
Wat ik al eerder zei, je moet op de plaats van de messagebox niet alleen die messagebox verwijderen, maar vervangen door code die doet wat er moet gebeuren als de tekst van die TextBox niet kon worden gevonden.
 
@ Edmoor, in antwoord op # 16: dat is precies wat ik gedaan heb
 
Dan heeft het niks met een wel of niet leeg bestand te maken.
Wat HSV al zei, die controle werkt altijd.

Als het nu werkt zoals je wilt is het oké natuurlijk.
 
Edmoor, klopt. Dat dacht ik alleen de eerste keer dat ik hem testte.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan