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

Probleem met refreshen userform

Status
Niet open voor verdere reacties.

basbergie

Gebruiker
Lid geworden
11 jan 2017
Berichten
68
Goedemorgen,

Ik zit met een probleem. Ik heb in excel een userform gemaakt. Hierin moet ik 2 waardes invullen. Deze waardes schrijft hij vervolgens weg in een tabel en deze tabel laat hij vervolgens zien in een listbox op het userform. Dit zodat je live kan zien wat je hebt toegevoegd in het userform. Nou loop ik tegen het volgende probleem aan: Wanneer ik de 2 waardes invul en druk op de knop toevoegen zie ik niet direct de waardes terugkomen in de listbox. Wel zie ik hem terugkomen zodra ik dan nog een product toevoeg. Dus eigenlijk loopt hij er 1 achter. De alles vernieuwen knop lost dit probleem helaas niet op. Wat wel werkt is om het userform af te sluiten en dan weer opnieuw op te starten dan is de listbox wel up-to-date. Deze handeling heb ik in een macro
Code:
Unload Me
ActiveWorkbook.RefreshAll
Invulscherm.Show vbModeless
gezet maar helaas werkt het dan opeens niet meer (alleen als je het handmatig doet)

Hebben jullie misschien tips?

Helaas kan ik het excel bestand niet delen omdat er een hoop data instaat. Dus ik hoop dat jullie het een beetje begrijpen ;)
 
Ik heb de volgende 2 commando's

Code:
Private Sub ListBox1_Click()
 TextBox1.Value = ListBox1.Column(0)
 TextBox2.Value = ListBox1.Column(1)
 TextBox3.Value = ListBox1.Column(2)

Code:
Private Sub UserForm_Initialize()
With Application
.WindowState = xlMaximized
Zoom = Int(.Width / Me.Width * 100)
Width = .Width
Height = .Height
With Blad2.ListObjects(1).DataBodyRange
    ListBox1.List = .Value
 End With
 TextBox1.Value = Format(Now)
End With
End Sub
 
Zet na iedere actie eens deze code:

Code:
Call Userform_Initialize

Alleen daar waar het niet goed gaat uiteraard..
 
In de code voor het wegschijven naar het blad zet je dit bij.
Uiteraard na het wegschrijven.

Bv. je wegschrijfknop.
Code:
Private sub commandbutton1_click()
 .....code voor wegschrijven.....


   [COLOR=#ff0000] ListBox1.List =Blad2.ListObjects(1).DataBodyRange.Value[/COLOR]
end sub

....en verwijder dit!
Code:
Unload Me
ActiveWorkbook.RefreshAll
Invulscherm.Show vbModeless
 
Dat heeft helaas niet geholpen. Ook heb ik er een vertraging ingezet maar ook dit zonder succes

In de code voor het wegschijven naar het blad zet je dit bij.
Uiteraard na het wegschrijven.

Bv. je wegschrijfknop.
Code:
Private sub commandbutton1_click()
 .....code voor wegschrijven.....


   [COLOR=#ff0000] ListBox1.List =Blad2.ListObjects(1).DataBodyRange.Value[/COLOR]
end sub

....en verwijder dit!
Code:
Unload Me
ActiveWorkbook.RefreshAll
Invulscherm.Show vbModeless

Dat heeft helaas ook niet geholpen :(
 
Als je de code plaatst voor het wegschrijven zal ik die regel er voor je onder zetten.
Simpel.
 
Dat heeft helaas niet geholpen. Ook heb ik er een vertraging ingezet maar ook dit zonder succes

Als je de code plaatst voor het wegschrijven zal ik die regel er voor je onder zetten.
Simpel.

Dat is deze:

Code:
Private Sub CommandButton1_Click()
   If TextBox1.Text <> "" And TextBox2.Text <> "" Then arr = Array(CDate(TextBox1.Value), TextBox2.Value, TextBox3.Value)
 With Blad1.ListObjects(1)
    If ListBox1.ListIndex > -1 Then
      .DataBodyRange.Cells(ListBox1.ListIndex + 1, 1).Resize(, 3) = arr
    Else
      .ListRows.Add.Range.Resize(, 3) = arr
    End If
  End With
  For Each ct In Me.Controls
    If TypeName(ct) = "ListBox" Then ct.ListIndex = -1
    If TypeName(ct) = "TextBox" Then ct.Value = ""
  Next ct
   Call UserForm_Initialize
   Unload Me
   Invulscherm.Show
 ActiveWorkbook.RefreshAll
ListBox1.AddItem TextBox1
    ListBox1.ListIndex = ListBox1.ListCount - 1
    ListBox1.List = Blad2.ListObjects(1).DataBodyRange.Value
    TextBox2.SetFocus
 
Als ik dit commando op een knop zet en deze indruk na het toevoegen wordt hij gekgenoeg wel bijgewerkt.
Zit je nou je eigen berichtjes te quooten? Het moet niet veel gekker worden.... Het is al erg genoeg dat je alle ándere berichten zonder enige reden quoot. Please, stop!!!!
 
Van al dat quoten wordt het er inderdaad niet overzichtelijker van.

Test het zo maar eens.
Code:
Private Sub CommandButton1_Click()
   If TextBox1.Text <> "" And TextBox2.Text <> "" Then arr = Array(CDate(TextBox1.Value), TextBox2.Value, TextBox3.Value)
 With Blad1.ListObjects(1)
    If ListBox1.ListIndex > -1 Then
      .DataBodyRange.Cells(ListBox1.ListIndex + 1, 1).Resize(, 3) = arr
    Else
      .ListRows.Add.Range.Resize(, 3) = arr
    End If
    ListBox1.List = .DataBodyRange.Value
 End With
 For Each ct In Me.Controls
    If TypeName(ct) = "ListBox" Then ct.ListIndex = -1 [COLOR=#ff0000]'lijkt me overbodig[/COLOR]
    If TypeName(ct) = "TextBox" Then ct.Value = ""
  Next ct

    TextBox2.SetFocus
 
Laatst bewerkt:
Waarom zou je iedere wijziging in de listbox naar een werkblad willen schrijven en vervolgens uit het werkblad in de Listbox inlezen ?

Ik zou alle wijzigingen in de listbox aanbrengen en bij het sluiten van het userform de gegevens in de listbox in één keer naar het werkblad schrijven.
Dat is juist de achterliggende gedachte van een 'Userform'.
 
Laatst bewerkt:
De code van HSV heeft helaas ook niet geholpen. is er anders een manier hoe ik een knop op het userform bijvoordbeeld iedere minuut kan laten indrukken dan denk ik dat ik er ook wel ben.
Ik kwam deze code wel tegen:
Code:
sub my_Procedure () 
msgbox "hello world"
end sub

sub test()
Application.OnTime Now + TimeValue("00:00:10"), "my_Procedure"
end sub
Maar deze werkt op een 1 of andere manier niet op mijn userform

Hij zet de gegevens uit de listbox in een apart werkblad omdat er op dat werkblad 2 tabellen worden samengevoegd. op het Userform moet ik namelijk het artikelnummer invullen en aan de hand van het artikelnummer zoekt hij de naam van het product uit een andere tabel. Deze gegevens samen zet hij vervolgens in de listbox.
 
Laatst bewerkt:
Hij zet de gegevens uit de listbox in een apart werkblad omdat er op dat werkblad 2 tabellen worden samengevoegd. op het Userform moet ik namelijk het artikelnummer invullen en aan de hand van het artikelnummer zoekt hij de naam van het product uit een andere tabel. Deze gegevens samen zet hij vervolgens in de listbox.
 
Code:
Private Sub CommandButton1_Click()
   If TextBox1.Text <> "" And TextBox2.Text <> "" Then arr = Array(CDate(TextBox1.Value), TextBox2.Value, TextBox3.Value)
 With Blad[B][SIZE=5][COLOR="#FF0000"]1[/COLOR][/SIZE][/B].ListObjects(1)
    If ListBox1.ListIndex > -1 Then
      .DataBodyRange.Cells(ListBox1.ListIndex + 1, 1).Resize(, 3) = arr
    Else
      .ListRows.Add.Range.Resize(, 3) = arr
    End If
  End With
  For Each ct In Me.Controls
    If TypeName(ct) = "ListBox" Then ct.ListIndex = -1
    If TypeName(ct) = "TextBox" Then ct.Value = ""
  Next ct
   Call UserForm_Initialize
   Unload Me
   Invulscherm.Show
 ActiveWorkbook.RefreshAll
ListBox1.AddItem TextBox1
    ListBox1.ListIndex = ListBox1.ListCount - 1
    ListBox1.List = Blad[B][SIZE=5][COLOR="#FF0000"]2[/COLOR][/SIZE][/B].ListObjects(1).DataBodyRange.Value
    TextBox2.SetFocus
 
Jouw toelichting versterkt mijn argument om pas alles weg te schrijven als het userform gesloten wordt.
Je maakt de werkwijze onnodig gecompliceerd.
Doordat je geen voorbeeldbestand plaatst maakt je het helpers ook onnodig moeilijk.
 
Ik kan geen voorbeeldbestand plaatsen omdat er een hoop data instaat, zonder data werkt hij helaas niet.

Ik heb 2 tabellen. 1 tabel is een export vanuit ons voorraadsysteem hierin zitten de volgende gegevens: Artikelnummer (unitID), Merk en Model
Daarnaast heb ik een andere tabel die op het userform wordt gemaakt namelijk Artikelnummer en factuurnummer. Dit zodat wij weten welk product bij welke order hoort.
Wat het Userform doet is ik scan de UnitID vervolgens scan ik het factuurnummer. Dan gaat excel kijken welk Product daar precies bijhoort en dat schrijft hij vervolgens weg. Op een Userform heb ik een listbox waar alle 2 de tabellen gezamelijk opkomen zodat we realtime kunnen zien welk product we precies hebben afgeboekt.

Ik zal zo even kijken of ik een voorbeeldbestand kan maken, alleen doordat hij gekoppeld is met ons voorraadsysteem wordt het wel lastig.
 
Je kunt altijd een voorbeeldbestand plaatsen.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan