Kladblok importeren in VBA

Status
Niet open voor verdere reacties.

lien0

Gebruiker
Lid geworden
2 nov 2010
Berichten
13
Hallo,

Ik moet een opdracht voor school maken maar loop vast.

De bedoeling was om een kladblok bestand te maken en daarin het volgende te zetten:
"Baco","8,95"
"Vijl","12,95"
"Tang","10,95"

Waarbij de Baco Tang en Vijl de artikelen zijn en de getallen erachter de prijzen.

De artikelen moeten geplaatst worden in een combobox en als je dan een artikel selecteert moet de prijs in een textbox komen te staan, hierbij moet je een listbox gebruiken waarbij je de visible op false zet zodat deze niet te zien is als je het programma runt.

Ik heb geprobeerd om alleen de artikelen in de combobox te krijgen maar steeds zet hij ook de prijzen erbij.

Mijn code is tot nu toe dit:

Code:
Private Sub Form_Load()                            
Open "C:\artikellijst.txt" For Input As #1        
Do Until EOF(1)                                    
    Input #1, itemlist                              
    cboartikelen.AddItem itemlist                  
Loop
Close #1
End Sub

Hiermee krijg ik dus in de combobox dat ik alles kan selecteren prijzen en artikelen. Dit is niet de bedoeling want in de combobox mogen alleen maar de artikelen komen en de prijzen moeten worden weggeschreven in een list box.

Heeft iemand een idee hoe ik dit kan oplossen?
 
Laatst bewerkt door een moderator:
Om je een beetje op weg te helpen en tevens wat te leren, kijk eens naar de Split functie voor het vullen van een Array.
 
Daar ben ik al een tijdje naar aan het zoeken maar ik kom er gewoon niet uit.

Dit is mijn eerste keer dat ik dit programma moet gebruiken dus ik moet nog heel wat leren alleen deze opdracht moet maandag af en hebben we vandaag gekregen :(

Ik hoop dat je mij een beetje op weg wilt helpen met de code
 
Laatst bewerkt door een moderator:
Voor een stukje code heb ik momenteel geen tijd maar je probleem met de Split functie is waarschijnlijk de , als scheidingsteken omdat deze ook in de prijs voor komt.
Scheidt de velden eens met een ;
Dus: "Baco";"8,95"
 
Bedankt,

Alleen het probleem is ik heb geen flauw idee wat de code moet zijn dus ik gebruik mijn txt bestand nog niet omdat ik de split code niet op orde krijg. ik gebruik trouwens vba6 weet niet of dit verschil maakt?
 
Laatst bewerkt door een moderator:
Als ik vanavond thuis ben zal ik eens kijken, als niemand anders je er dan mee geholpen heeft.
 
Hartstikke bedankt :)
 
Laatst bewerkt door een moderator:
Verplaatst van "Programmeren > Visual Basic" naar "Office > Visual Basic for Applications"
 
@lien0 Onnodige quotes verwijderd. Wanneer je direct reageert op een reactie is het niet nodig om dat bericht te quoten. Onnodig quoten heet dat, hetgeen niet gewenst is.
 
Je gegevensbestand deugt niet. Voer de data zo in, en het zou moeten lukken:

"Baco",8.95
"Vijl",12.95
"Tang",10.95

Ik zou overigens ook een tweede variabele toevoegen voor het tweede veld. Dat hoef je dan uiteraard niet te gebruiken in de keuzelijst.
 
Laatst bewerkt:
maar hoe krijg ik dan de artikelen in een combobox en de prijzen in een listbox?
 
Dat gaf ik al aan; je leest nu één variabele in. Zet er een tweede bij, en je kunt die ook gebruiken.

Code:
Do Until EOF(1)
    i = i + 1
    ReDim Preserve tmp(i)
    Input #1, MyString, MyNumber
    Me.cboArtikellijst.AddItem MyString
    Me.lstArtikelprijs.AddItem MyNumber
Loop
Overigens vind ik het bijzonder vreemd dat je in een keuzelijst met invoervak de artikelen zet, en in een andere keuzelijst de prijzen. Die horen (lijkt mij) toch echt bij de artikelen te horen. Maar het is jouw db ;)
 
Wat wij moeten doen is in de combobox de artikelen zetten en als je een artikel aanklikt moet de prijs automatisch in een textbox verschijnen. Dus leek het mij handig om de artikelen in een listbox te parkeren zodat je een if functie kan gebruiken om het goede artikel met de prijs te krijgen.

Dit is pas mijn eerste keer dat ik werk in VB6 dus heb er weinig verstand van :(
 
Je krijgt twee kolommen te zien, omdat je de eigenschap columncount van de combobox ingesteld hebt op 2.
Zet deze eigenschap op 1.
Je moet je realiseren dat wat in een combobox/listbox wordt getoond niet afhaneklijke is van wat de box bevat, maar van de eigenschappen die bepalen wat je te zien krijgt (columncount, columnwidth).
Als je met de instelling columncount =1 toch beide gegevens te zien krijgt, betekent dat dat je maar 1 kolom hebt gevuld.
Je zult dus iets moeten bedenken om de gegevens per rij in kolommen te splitsen.

Vul een combobox/listbox nooit met additem maar met de eigenschap .List (kijk de hulpbestanden in de VBEditor er nog maar eens op na).

Je doet er het beste aan eerst de gegevens uit het tekstbestand in een meer-dimensionele array/matrix in te lezen en dan in één keer aan de combobox/listbox toe te wijzen via de eigenschap .List.
Zet de code om de listbox te vullen in de juiste macro: Userform_initialize

Hoe lees je alle gegevens uit een tekstbestand in in een variabele ?
Code:
Private Sub UserForm_Initialize()                            
  Open "C:\artikellijst.txt" For Input As #1     
     c01=input(LOF(1),1)                                    
  Close #1
End Sub

of (mijn voorkeur)
Code:
Private Sub Userfom_Initialize()
   c01=createobject("scripting.filesystemobject").opentextfile("C:\artikellijst.txt").readall
End Sub

Daarna moet je van de variabele c01 (die alle tekst bevat) een array maken.
Dat kan door de tekst te splitsen aan de hand van het recordscheidingsteken (in een tekstbestand altijd vbCrLf)
Code:
sn=split(c01,vbCrLf)
maar omdat je de prijsgegevens in een aparte kolom moet zetten, moet je aan deze array nog een tweede dimensie toevoegen.
Dat gaat niet in VBA; we kunnen wel een nieuwe 2-dimensionele array definiëren:

Code:
redim sp(ubound(sn),1)
die kunnen we gaan vullen met de lus
Code:
for j=0 to ubound(sn)
  sp(j,0)=split(sn(j),",")(0)
  sp(j,1)=split(sn(j),",")(1)
next
die wijzen we vervolgens toe aan de combobox:
Code:
  combobox1.list=sp

In totaal komt de lijstvulexcercitie er dus zo uit te zien:
Code:
Private Sub Userfom_Initialize()
   sn=split(createobject("scripting.filesystemobject").opentextfile("C:\artikellijst.txt").readall,vbcrlf)

   redim sp(ubound(sn),1)
   for j=0 to ubound(sn)
     sp(j,0)=split(sn(j),",")(0)
     sp(j,1)=split(sn(j),",")(1)
   next

   combobox1.list=sp
End Sub

NB. de ondergrens van een matrix die met split wordt gemaakt is 0.
de ondergrens van een matrix die je declareert (in dit geval met Redim) is ook standaard 0.
 
Als ik deze code gebruik dan krijg ik helemaal niets meer in mijn combobox :(

Hij runt mijn programma wel alleen als ik de combobox aanklik dan komt er geen lijst alleen een wit balkje onderaan.

Ik heb de naam van de combobox wel aangepast aan de naam die ik mijn combobox had gegeven.
 
Laatst bewerkt:
@snb: het gaat hier overduidelijk om een huiswerk opdracht. Sinds wanneer geven we bij HelpMij volledige oplossingen?
 
De volledige opdracht is groter want er moet een heel bruto netto berekening worden gedaan.

Jammer dat er zo wordt gereageerd.

Voor de gene die hulp gegeven hebben bedankt :) helaas is het nog steeds niet gelukt
 
Ik zou om te beginnen je bestand met je Userform en je tekstbestand met gegevens hier eens op het forum zetten zodat wij iets hebben om mee te werken.
 
ik heb tot nu toe de code van snb dus:

Code:
Private Sub Userfom_Initialize()
   sn=split(createobject("scripting.filesystemobject").opentextfile("C:\artikellijst.txt").readall,vbcrlf)

   redim sp(ubound(sn),1)
   for j=0 to ubound(sn)
     sp(j,0)=split(sn(j),",")(0)
     sp(j,1)=split(sn(j),",")(1)
   next

   combobox1.list=sp
End Sub

ik krijg het nu alleen niet meer te zien in mijn combobox
 
Laatst bewerkt door een moderator:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan