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

Interactive Userform VB aanpassen zodat data vanaf kolom B ingevuld wordt

Status
Niet open voor verdere reacties.

Hela1966

Gebruiker
Lid geworden
17 jan 2009
Berichten
57
Beste experts,

Via de website van Easy Excel heb ik een voorbeeld userform gevonden http://www.excel-easy.com/vba/examples/interactive-userform.html waar ik heel graag mee werk.

Ik heb er uiteraard wat controls (voornamelijk textboxen) bijgeplaatst zodat ik er prettig mee kan werken maar heb ik nog een wens. Het zou fijn als de data niet vanaf kolom A maar vanaf kolom B ingevuld wordt.

Ondanks mijn zoektocht op het internet waarin (stapsgewijs liefst) wordt uitgelegd hoe ik de code moet aanpassen heb ik geen oplossing kunnen vinden.
Mijn eigen pogingen om de code aan de passen mislukten volledig!

Er is vast iemand die me uit kan leggen wat ik moet doen.

Wie heeft er tijd om me verder te helpen?

Alvast dank voor de moeite.

PS: is het nodig dat ik de code in dit bericht plaats?
 
Wat je PS betreft, plaats gewoon je document hier.
 
Wijzig de A in B anders moet je maar een bestandje posten ipv een foto.
 
Dank je Cobbe,

Uiteraard heb ik geprobeerd of het werkte met een aanpassing van de range in deze regel:

emptyRow = WorksheetFunction.CountA(Range("B:B")) + 1

Dat gaf helaas niet het gewenste resultaat.
Ik zal de volledige code hieronder plaatsen:

Code:
Option Explicit

Dim id As Integer, i As Integer, j As Integer, flag As Boolean

Sub GetData()

If IsNumeric(UserForm1.TextBox1.Value) Then
    flag = False
    i = 0
    id = UserForm1.TextBox1.Value
    
    Do While Cells(i + 1, 1).Value <> ""
    
        If Cells(i + 1, 1).Value = id Then
            flag = True
            For j = 2 To 3
                UserForm1.Controls("TextBox" & j).Value = Cells(i + 1, j).Value
            Next j
        End If
        
        i = i + 1
        
    Loop
    
    If flag = False Then
        For j = 2 To 3
            UserForm1.Controls("TextBox" & j).Value = ""
        Next j
    End If
    
Else
    ClearForm
End If

End Sub

Sub ClearForm()

For j = 1 To 3
    UserForm1.Controls("TextBox" & j).Value = ""
Next j

End Sub

Sub EditAdd()

Dim emptyRow As Long

If UserForm1.TextBox1.Value <> "" Then
    flag = False
    i = 0
    id = UserForm1.TextBox1.Value
    emptyRow = WorksheetFunction.CountA(Range("B:B")) + 1
    
    Do While Cells(i + 1, 1).Value <> ""
    
        If Cells(i + 1, 1).Value = id Then
            flag = True
            For j = 2 To 3
                Cells(i + 1, j).Value = UserForm1.Controls("TextBox" & j).Value
            Next j
        End If
        
        i = i + 1
        
    Loop
    
    If flag = False Then
        For j = 1 To 3
            Cells(emptyRow, j).Value = UserForm1.Controls("TextBox" & j).Value
        Next j
    End If
    
End If

End Sub
 
Laatst bewerkt door een moderator:
Nog die 2 x 1 wijzigen in 2 :
Code:
  Do While Cells(i + 1, [COLOR="#FF0000"]2[/COLOR]).Value <> ""
    
        If Cells(i + 1, [COLOR="#FF0000"]2[/COLOR]).Value = id Then
            flag = True
            For j = 2 To 3
 
De code zoekt nu de inderdaad de waarde uit kolom B. Toch ben ik er nog niet helemaal.

1. Als het userform geopend wordt en textbox1 ingevuld wordt met een waarde die voorkomt in kolom B (maw niet leeg) dan verschijnt die waarde uit textbox1 ook in textbox2. (Dit zou de waarde uit kolom C/textbox2 moeten zijn)

2. Als in textbox1 een waarde wordt ingevuld welke niet bestaat in kolom B en geklikt wordt op CommandButton1 (Edit/Add) dan zou de waarde uit textbox1 toegevoegd moeten worden op de eerstvoorkomende lege regel in kolom B

Hieronder een screenshot waarin beide zichtbaar zijn ter verduidelijking

2017-01-29_09-43-03.jpg

Ik heb echt allerlei aanpassingen aan de code geprobeerd maar ik krijg het niet voor elkaar. Ik zet mijn huidige code hieronder (weet nu hoe dat moet)

Code:
Sub GetData()

If IsNumeric(UserForm1.TextBox1.Value) Then
    flag = False
    i = 0
    id = UserForm1.TextBox1.Value
    
    Do While Cells(i + 1, 2).Value <> ""
    
        If Cells(i + 1, 2).Value = id Then
            flag = True
            For j = 2 To 3
                UserForm1.Controls("TextBox" & j).Value = Cells(i + 1, j).Value
            Next j
        End If
        
        i = i + 1
   
    Loop
    
    If flag = False Then
        For j = 2 To 3
            UserForm1.Controls("TextBox" & j).Value = ""
        Next j
    End If
    
Else
    ClearForm
End If

End Sub

Code:
Sub EditAdd()

Dim emptyRow As Long

If UserForm1.TextBox1.Value <> "" Then
    flag = False
    i = 0
    id = UserForm1.TextBox1.Value
    emptyRow = WorksheetFunction.CountA(Range("B:B")) + 1
    
    Do While Cells(i + 1, 2).Value <> ""
    
        If Cells(i + 1, 2).Value = id Then
            flag = True
            For j = 2 To 3
                Cells(i + 1, j).Value = UserForm1.Controls("TextBox" & j).Value
            Next j
        End If
        
        i = i + 1
        
    Loop
    
    If flag = False Then
        For j = 1 To 3
            Cells(emptyRow, j).Value = UserForm1.Controls("TextBox" & j).Value
        Next j
    End If
    
End If

End Sub

Het bestandje hecht ik ook aan.

Mag ik nog een beroep op je doen? Het is vast iets doms, maar ik kom er echt niet uit.

Alvast dank voor de moeite.
 

Bijlagen

Laatst bewerkt:
Code:
In 1ste code:
UserForm1.Controls("TextBox" & j).Value = Cells(i + 1, [COLOR="#FF0000"]j + 1[/COLOR]).Value
en in 2de code:
Cells(i + 1, j[COLOR="#FF0000"] + 1[/COLOR]).Value = UserForm1.Controls("TextBox" & j).Value
 
Jaaaa, helemaal goed.

Dank voor je hulp Cobbe, hier ben ik erg blij mee EN weer wat geleerd!
 
@VenA,

Ik zou zeker geen functienamen gebruiken voor sub-namen.
Code:
Sub Clear()
en die ergens in een andere sub aanroepen met 'Clear'.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan