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

Artikel op verschillende locaties selecteren via combobox

Status
Niet open voor verdere reacties.

CygneVoler

Gebruiker
Lid geworden
15 mei 2015
Berichten
234
Hoi Excellers,
In de bijlage, die ik al eens eerder heb geplaatst met een andere vraag, nu een aanvullende vraag.
Ik heb één artikel die op verschillende locatie kan worden opgeslagen. Deze locaties staan in combobox 1.
Het makkelijkste gedeelte krijg ik voor elkaar door een Array te plaatsen in de combobox1.
Maar wat ik niet voor elkaar krijg is wanneer ik van locatie wissel dat ik de locatie-plaats zichtbaar krijg in T9.
Voorbeeld: wanneer ik locatie 1 selecteer komt de locatie-plaats L100 in het venster (T9).
Maar wanneer ik Locatie 2 selecteer blijft de locatie plaats hetzelfde terwijl deze b.v. K100 moet zijn.
Ik heb al diverse pogingen gedaan maar kom er niet uit.
Hiervoor vraag ik jullie hulp.

CooS
 

Bijlagen

Heb je dezelfde artikelen op verschillende locaties en plaatsen liggen?

Je schrijft de gegevens nu steeds op dezelfde plaats in de tabel dat zal je dus dynamisch moeten maken bv
Code:
.DataBodyRange.Cells(.ListRows.Count, 1).Resize(, 12) = Array(T1, T2, T3, T4, T5, T6, T7, T8, IIf(ComboBox1.ListIndex = 0, T9, ""), IIf(ComboBox1.ListIndex = 1, T9, ""), IIf(ComboBox1.ListIndex = 2, T9, ""), IIf(ComboBox1.ListIndex = 3, T9, ""))

Als een betere opzet van de tabel maakt dan heb je dit probleem niet.;)
 
VenA, bedankt voor je reactie. En ja eenzelfde artikel ligt op verschillende locaties. Dit kunnen ook verschillende afdelingen zijn. Heb je de code ook zelf getest? Want bij mij doet het niets!
En begrijp ik nu goed van je dat er geen goede opzet is gemaakt voor de tabellen? Welke suggestie heb je voor me:D
 
Bij mij werkt de hele opzet van jouw formulier niet en daar heb ik verder ook niet naar gekeken. Ik heb het alleen in de procedure Sub Cmd_Opslaan_Click() getest en daar werkt het.

Een tabel zet je eenduidig op. Dus ipv 4 kolommen voor de locaties gebruik je er maar 1. Deze geef je bv de kolomkop 'Locatie' In de rijen eronder zet je de naam/het nummer van de locatie. Je maakt een nieuwe kolom aan met als kolomkop 'Plaats' en in de rijen eronder zet je de plaats.

In de wereld van data normalisatie heb je eigenlijk twee tabellen nodig. 1 voor je artikelen en 1 voor waar ze liggen en hoeveel er op voorraad zijn;)
 
Is dit wat je zoekt?
Code:
Private Sub ComboBox1_Change()
 T9 = cmbInvoer.List(cmbInvoer.ListIndex, ComboBox1.ListIndex + 8)
End Sub
 
VenA, ik begrijp het. Ga het zeker testen. @HSV, Harry , dat is idd wat ik bedoel. Het wil alleen nog niet lukken als ik een wijziging door wil voeren. Er wordt niets gewijzigd. En als ik een nieuw artikel wil toevoegen krijg ik een foutmelding. "Fout 381 Kan de eigenschappen list niet verkrijgen. Ongeldige index voor eigenschappenmatrix."
 
Met de wijzigingsknop.
Code:
Private Sub cmbWijzigen_Click()
If cmbInvoer.ListIndex > -1 Then
  If MsgBox("Weet je zeker dat je deze gegevens wilt wijzigen?", vbDefaultButton2 + vbCritical + vbYesNo, "Pas op!") = vbYes Then
     With Sheets("artikelen").ListObjects(1).DataBodyRange.Cells(cmbInvoer.ListIndex + 1, 1)
       .Resize(, 12) = Array(T1, T2, T3, T4, T5, T6, T7, T8, IIf(ComboBox1.ListIndex = 0, T9, .Offset(, 8)), IIf(ComboBox1.ListIndex = 1, T9, .Offset(, 9)), IIf(ComboBox1.ListIndex = 2, T9, .Offset(, 10)), IIf(ComboBox1.ListIndex = 3, T9, .Offset(, 11)))
     End With
   End If
End If
Unload Me
End Sub

De opslaanknop lijkt me redelijk analoog.
 
Laatst bewerkt:
Ik had de resize idd al op 12 gezet maar nu werden de overige locatie "gewist". Ga nu de wijziging die je zojuist doorvoerde proberen.
 
Krijg de volgende foutmelding: "Kan de eigenschappen value niet instellen. Typen komen niet overeen." Dit krijg ik wanneer ik op de knop "Bewerken" druk van de userform en overschakel van locatie1 naar locatie 2. Er wordt dan naar de volgende code verwezen:

Code:
Private Sub ComboBox1_Change()
 T9 = cmbInvoer.List(cmbInvoer.ListIndex, ComboBox1.ListIndex + 8)
End Sub

Dit is geplaatst onder de button opslaan:
Code:
Private Sub Cmd_Opslaan_Click()
If T1 = Empty Then If MsgBox("De barcoderegel is niet ingevuld! Scan de barcode of vul anders het bestelnummer in op deze regel. Leeg laten is geen optie!!!", vbDefaultButton2 + vbInformation, "Vul de velden in") Then Exit Sub
For j = 1 To 8
   y = y + Abs(Me("t" & j) <> "")
 Next j
 If y > 0 Then
  If MsgBox("Deze gegevens opslaan?", vbDefaultButton2 + vbCritical + vbYesNo, "Pas op!") = vbYes Then
    With Sheets("artikelen").ListObjects(1)
      .ListRows.Add
      .DataBodyRange.Cells(.ListRows.Count, 1).Resize(, 12) = Array(T1, T2, T3, T4, T5, T6, T7, T8, IIf(ComboBox1.ListIndex = 0, T9, .Offset(, 8)), IIf(ComboBox1.ListIndex = 1, T9, .Offset(, 9)), IIf(ComboBox1.ListIndex = 2, T9, .Offset(, 10)), IIf(ComboBox1.ListIndex = 3, T9, .Offset(, 11)))
       End With
  End If
  Else
  MsgBox "Geen gegevens ingevuld"
 End If
 Unload Me
End Sub

en deze onder de button Wijzigen:

Code:
Private Sub cmbWijzigen_Click()
If cmbInvoer.ListIndex > -1 Then
  If MsgBox("Weet je zeker dat je deze gegevens wilt wijzigen?", vbDefaultButton2 + vbCritical + vbYesNo, "Pas op!") = vbYes Then
     With Sheets("artikelen").ListObjects(1).DataBodyRange.Cells(cmbInvoer.ListIndex + 1, 1)
       .Resize(, 12) = Array(T1, T2, T3, T4, T5, T6, T7, T8, IIf(ComboBox1.ListIndex = 0, T9, .Offset(, 8)), IIf(ComboBox1.ListIndex = 1, T9, .Offset(, 9)), IIf(ComboBox1.ListIndex = 2, T9, .Offset(, 10)), IIf(ComboBox1.ListIndex = 3, T9, .Offset(, 11)))
     End With
   End If
End If
Unload Me
End Sub
 
In zo'n geval gebruik ik bij 'wijzigen':

Code:
Private Sub ComboBox1_Change()
   If ComboBox1.ListIndex > -1 Then T9.Text = cmbInvoer.Column(8 + ComboBox1.ListIndex)
End Sub
 
Krijg ik een soort zelfde melding SNB! " fout 13. Type komen niet overeen"
 
Laatst bewerkt:
Jij gebruikt het niet bij 'wijzigen' maar bij het invoeren van een nieuw item.
 
Dus als ik je goed begrijp wordt "jouw" code niet zoals je in post #10 plaats in de combobox geplaatst maar, onder de Cmd_Opslaan button uit post #9.

Code:
Private Sub Cmd_Opslaan_Click()
If T1 = Empty Then If MsgBox("De barcoderegel is niet ingevuld! Scan de barcode of vul anders het bestelnummer in op deze regel. Leeg laten is geen optie!!!", vbDefaultButton2 + vbInformation, "Vul de velden in") Then Exit Sub
For j = 1 To 8
   y = y + Abs(Me("t" & j) <> "")
 Next j
 If y > 0 Then
  If MsgBox("Deze gegevens opslaan?", vbDefaultButton2 + vbCritical + vbYesNo, "Pas op!") = vbYes Then
    With Sheets("artikelen").ListObjects(1)
      .ListRows.Add
      .DataBodyRange.Cells(.ListRows.Count, 1).Resize(, 12) = Array(T1, T2, T3, T4, T5, T6, T7, T8, IIf(ComboBox1.ListIndex = 0, T9, .Offset(, 8)), IIf(ComboBox1.ListIndex = 1, T9, .Offset(, 9)), IIf(ComboBox1.ListIndex = 2, T9, .Offset(, 10)), IIf(ComboBox1.ListIndex = 3, T9, .Offset(, 12)))
            
       End With
  End If
  If ComboBox1.ListIndex > -1 Then T9.Text = cmbInvoer.Column(8 + ComboBox1.ListIndex)
 End If
 Unload Me
End Sub
 
Laatst bewerkt:
Ik had het zo staan bij de wijzigen_knop en geeft geen foutmelding.
 

Bijlagen

Harry dat ziet er goed en veel belovend uit. :thumb: Alleen nog 1 item wat dan toch weer voor problemen zorgt is wanneer je een nieuw artikel gaat toevoegen. Zodra je dan de locatie selecteert, komt er een foutmelding met "kan de eigenschap list niet verkrijgen". Er wordt dan verwezen naar:

Code:
Private Sub ComboBox1_Change()
T9 = cmbInvoer.List(cmbInvoer.ListIndex, ComboBox1.ListIndex + 8)
End Sub
 
PS Harry als je een nieuw artikel toevoegt zonder een locatie toe te voegen en daarna een wijziging aanbrengt, gaat het wel!

Ondertussen een nieuw frame aangemaakt wat niet zichtbaar is bij het invoeren van een nieuw artikel (eigenlijk ook wel logisch, omdat je daar nog geen locatie voor hebt). Zodra je het artikel wilt gaan wijzigen komt de locatie zichtbaar en kan je deze toevoegen.
 
Laatst bewerkt:
Ik had in #7 al geschreven dat ik alleen de code voor wijzigingsknop had gedaan en dat de ander mij vrij analoog leek.
Ik zal er straks nog eens naar kijken als niemand me voor is.
 
Zo al beter?
Code:
Private Sub ComboBox1_Change()
If cmbInvoer.Visible Then T9 = cmbInvoer.List(cmbInvoer.ListIndex, ComboBox1.ListIndex + 8)
End Sub
 
Dat ziet er goed uit Harry, getest en gaat goed. Enorm bedankt. :thumb: Hoop dat dit het was. Afwachten en duimen! :d
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan