Regeltje invoeren dmv VBA

Status
Niet open voor verdere reacties.

Jan Van Haaren

Gebruiker
Lid geworden
27 okt 2002
Berichten
202
Hallo,

Ik heb een INI bestandje met allemaal regels erin. Ik zou graag hebben dat ik via een druk op een commandbutton aan dat document een regeltje zou kunnen toevoegen.

Het geen dat toegevoegd moet worden is "STADIUM_MODEL = ?". Maar nu moet er op de plaats van ? steeds een andere waarde ingevuld worden. Geen random waarde, maar een waarde die je zelf kan bepalen via een dropdownmenu. Zodus je selecteer een uit een dropdownmenu bijvoorbeeld de tekst "Tekst1", die moet dan overeen stemmen met de waarde 23. Je drukt vervolgens op de commandbutton en de regel: "STADIUM_MODEL = 23" wordt toegevoegd. Als je nu bijvoorbeeld "Tekst2" selecteert komt dat overeen met waarde 14 en wordt er toegevoegd "STADIUM_MODEL = 14".

Een moeilijk uitleg, als je het niet begrijp, vraag maar ;)
Dank bij voorbaat!
 
je kan toch de file openen as append en aan het eind gewoon dat toevoegen ?
 
Geplaatst door vaat
je kan toch de file openen as append en aan het eind gewoon dat toevoegen ?

Hoe bedoel je?
Het is de bedoeling dat je een pulldown menuutje hebt en dat je een tekst kan kiezen, aan iedere tekst zou dan een waarde verbonden moeten zijn. En die waarde moet samen met "STADIUM_MODEL = die waarde achteraan in die file geschreven worden...
 
nou zo dus:

Private Sub cboKeuze_Click()
Dim waarde As Integer
Dim tekst As String

If cboKeuze.Text = "Tekst1" Then
waarde = 23
ElseIf cboKeuze.Text = "Tekst2" Then
waarde = 24
Else
MsgBox ("error")
End If

tekst = "STADIUM_MODEL = " + Str(waarde)

Open "c:\file.ini" For Append As #1
Write #1, tekst

Close #1

End Sub

Private Sub Form_Load()

cboKeuze.List(0) = "Tekst1"
cboKeuze.List(1) = "Tekst2"

End Sub


bij veelvuldig gebruik natuurlijk niet steeds file openen en sluiten
 
Laatst bewerkt:
Bedankt!! :)

Nu zit ik nog met twee problemen:
- Hij schrijft dit weg: "STADIUM_MODEL = 24" bijvoorbeeld, maar het zou eigenlijk STADIUM_MODEL = 24 moeten zijn, die " en " waren maar om duidelijk te maken wat de tekst is ;). Mijn fout.
- Ook zou het mogelijk moeten kunnen zijn als je de andere kiest dat het niet toegevoegd wordt, maar overschreven wordt, zodat de oude waarde vervangen wordt!
 
als je het niet toegevoegd wil hebben, maar overschreven en dus maar 1 regel. Dat open je de file voor output en niet append. Vervang dus het woordje append voor output.

de quotes geven aan dat het om een string gaat. Waarom moet dat weg ? Gebruik je de data niet voor input in een ander programma ofzo ?
 
Die file is inderdaad onderdeel van een programma en daarom zou ik graag die " en " eruit krijgen...

Maar het overschrijven van data lukt ook niet echt, ik krijg dat gewoon een blanco document :(
 
volgende werkt toch echt bij mij (nu ook zonder quotes):

Private Sub cboKeuze_Click()
Dim waarde As Integer
Dim tekst As String

If CboKeuze.Text = "Tekst1" Then
waarde = 23
ElseIf CboKeuze.Text = "Tekst2" Then
waarde = 24
Else
MsgBox ("error")
End If

tekst = "STADIUM_MODEL = " + Str(waarde)

Open "c:\file.ini" For Output As #1
Print #1, tekst

Close #1

End Sub

Private Sub Form_Load()

CboKeuze.List(0) = "Tekst1"
CboKeuze.List(1) = "Tekst2"

End Sub


Let op: output ipv append
print ipv write
 
Opnieuw bedankt ;)

Maar ik heb nog één probleem en dat is dat de rest van de INI gewist wordt, al wat er al instaat is weg en enkel dat ene regeltje komt er in...
 
misschien dat het makkelijker is als je me wat meer vertelt over de achtergrond en doel van je programma, want zo kom je elke keer met nieuwe info die wat ik al gepost had overbodig maakt.


Je opent nu een file voor sequential access. Je kan dus een file openen en aan het eind wat toevoegen. een nieuwe file aanmaken en een file weer inlezen !

Je kan dus niet zomaar op de derde regel in het bestand wat wijzigen je zal dan dus de hele file weer opnieuw moeten wegschrijven.

geef me eens de inhoud van die file en leg nou nog uit wat je precies bedoelt met die file is onderdeel van een programma. Want als je daar mee bedoelt dat je de file ook weer in visual basic inleest, dan had je bijvoorbeeld de quotes niet hoeven te verwijderen.

Je kan wel een random access file gebruiken voor dit doel, waarbij je wel op de derde regel gegevens kan wijzigen, maar die kan je weer niet gewoon in notepad openen.
 
Dacht ik dat alles werkte, blijkt dat ik steeds STADIUM_MODEL = 0 krijg ipv de goede waarde :(

PHP:
Private Sub cboKeuze_Click()
Dim waarde As Integer
Dim tekst As String

If cboKeuze.Text = "Tekst" Then
waarde = 23
ElseIf cboKeuze.Text = "Tekst2" Then
waarde = 24
Else
MsgBox ("Fout")
End If
End Sub

Private Sub Command1_Click()
tekst1 = "STADIUM_MODEL =" + Str(waarde)
tekst2 = "AUDIO = 1"
tekst3 = "VIDEO = 1"
tekst4 = "VSYNC_MODE = 0"
tekst5 = "AUDIO_SAFEMODE = 0"
tekst6 = "FOPTION_LOCALE_ID = 13"
Open "file.ini" For Output As #1
Print #1, tekst1
Print #1, tekst2
Print #1, tekst3
Print #1, tekst4
Print #1, tekst5
Print #1, tekst6
Close #1
End Sub

Private Sub Form_Load()
cboKeuze.List(0) = "Tekst"
cboKeuze.List(1) = "Tekst2"
End Sub
 
Let op de tekst: Option Explicit. Dit moet je altijd aan hebben staan. Dit zorgt ervoor dat je programma gechecked word op het juist gebruiken van variabelen.

Elke variable die je binnen een subroutine gebruikt(hier tussen regels Private Sub Command1_Click() - End Sub) is alleen maar beschikbaar binnen die subroutine.

in jouw voorbeeld gebruikte je twee routine's, waarbij de variable waarde in allebei gebruikt werd. Dit kan dus niet. (Of je gebruikt bijvoorbeeld een bas module voor je variable of je maakt gebruik van een class of je doet het geheel binnen 1 routine.)

Bovendien is in jouw programma de variabelen tekst1 tot en met tekst6 niet gedeclareerd (met Dim tekst1 as String). In dit geval is het onnodig om hier eerst variabele aan te maken en ze vervolgens maar 1 maal te gebruiken.

Verder is het een goede programmeurstijl om all je objecten binnen visual basic als de commandbutton en de combobox te voorzien van je eigen naam. De combobox krijgt een prefix cbo en de commandbutton cmd. Dus noem je commandbutton bijvoorbeeld cmdStart
PHP:
Option Explicit

Private Sub cmdStart_Click()

Dim waarde As Integer
Dim tekst As String

If CboKeuze.Text = "Tekst" Then
waarde = 23
ElseIf CboKeuze.Text = "Tekst2" Then
waarde = 24
Else
MsgBox ("Fout")
End If

Open "c:\file.ini" For Output As #1
Print #1, "STADIUM_MODEL =" + Str(waarde)
Print #1, "AUDIO = 1"
Print #1, "VIDEO = 1"
Print #1, "VSYNC_MODE = 0"
Print #1, "AUDIO_SAFEMODE = 0"
Print #1, "FOPTION_LOCALE_ID = 13"
Close #1
End Sub

Private Sub Form_Load()
CboKeuze.List(0) = "Tekst"
CboKeuze.List(1) = "Tekst2"
End Sub
 
Laatst bewerkt:
Je zei ook nog iets over Random Access. Ik heb de uitleg bekeken op de site van MS, maar snap het niet echt om eerlijk te zijn. Als ik nu een document heb met daarin ergens dit middenin:

xposition=10
yposition=12
zposition=15

Kan ik dat dan met random access inlezen en andere waardes weer wegschrijven? Dank bij voorbaat.
 
random access files werkt metn bytes. Het heeft o.a. als voordeel dat je er van alles in kan stoppen. Dus ook gewoon objecten of variabelen in een bass module.

Je moet dan wel weten wat je erin stopt. Dus bijvoorbeeld een Integer = 2 bytes een double 4 bytes.

De Random access file kent een command om te kijken hoeveel bytes je totale bestand is en omdat je weet uit hoeveel bytes je variabele bestaan weet je dus hoeveel records er in staan. Je kan met put commando's daar dan makkelijk iets tussen stoppen.

Je kan de file dus niet zomaar openen in kladblok, maar je zult de data weer in je programma moeten vertalen naar bruikbare data.

Wat je wilt kan dus wel.

Als het niet duidelijk is moet je misschien maar een nieuwe thread openen.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan