[VBA] Probleem met wegschrijven via Binary Access Write

Status
Niet open voor verdere reacties.

Jan Van Haaren

Gebruiker
Lid geworden
27 okt 2002
Berichten
202
Hoi,

Ik heb een klein programmaatje geschreven dat dmv te klikken op een commandbutton waardes wegschrijft in een file.

Code:
Private Sub cmdApply_Click()
Open "fcdb.dbi" For Binary Access Write As #1
Put #1, 141, 229
Close #1

Dit werkt perfect, als je dan op de applybutton drukt schrijft ie de waarde 229 in hexformaat automatisch weg in offset 141, maar nu wil ik kunnen kiezen welke waarde ik ga wegschrijven aan de hand van een combobox.

Ik heb een combobox aangemaakt (cmbSelect). Als je dan een optie aanklikt in de combo wordt er een waarde aangepast in een tekstbox (txtSelect). Je selecteert dus bijvoorbeeld "Tekst1" in de combo en txtSelect.Text = 1, als je "Tekst2" selecteer wordt txtSelect.Text = 14 of zo. Dus ik had gedacht dat iets zoals het volgende wel zou werken:

Code:
Private Sub cmdApply_Click()
Open "fcdb.dbi" For Binary Access Write As #1
Put #1, 141, Str(txtSelect.Text)
Close #1

Niet dus. Hij schrijft het wel in de juiste offset natuurlijk, maar hij schrijft een decimale waarde ipv een hexwaarde weg. Hij schrijft de waarde 14 weg bijvoorbeeld, ipv de waarde 14 in hex. Voor de verduidelijking, met mijn eerste code schreeft wel perfect de hexwaarde weg. Kan iemand mij aub helpen?

Dank bij voorbaat en groeten, Jan!
 
Je uitleg is heel goed, maar mis nog een klein beetje informatie.

Hallo Jan,

Hopelijk begrijp ik je verhaal goed. Het gaat bij mij niet
om de termen zoals offset, hexadecimaal of wat dan ook.
Heb vroeger veel met al die verscheidene talstelsels
gewerkt. Zelfs de oude bcd-codering (ponsband voor tty),
een codering met slechts 8 mogelijkheden.(2 tot de derde
macht, dus ponsband met 3 gaatjes) Tegenwoordig is het ebcdic.
Ook assembler (low level), maar wordt vandaag de dag
meer overgegaan tot hogere programmeertalen (high level).
Houd mij nu niet meer zo bezig met low level.
Sorry van mijn verhaal, een beetje nostalgie. Die mooie oude
tijd.

Maar nu even ter zake. (zal aan het eind een voorbeeld geven)

De Str functie moet je niet gebruiken. Er wordt namelijk
vóór het getal (Hexa en/of Decimaal) die je wegschrijft
een spatie gereserveerd voor het positief dan wel negatief
zijn van dat getal.

Zelfs als de Str functie niet gebruikt wordt, zal er een
fout optreden. Je zou de waarde van txtSelect.Text eerst
aan een variabele moeten toekennen.

Heb in de Combobox(cmbSelect) 4 decimale waarden toegekend:
10, 11, 12 en 13. Wanneer op het eerste item (10) van deze
box geklikt wordt, dan krijgt txtSelect de overeenkomstige
waarde in het hexadecimaal, dus A.

Het klikken op het 2e item (11), laat txtSelect de hexadecimale
waarde B zien. Enzovoort.

Probeer onderstaande code:

1) Declareer in General:
Dim HexWaarde As String

2) In Form_Load:
Code:
Private Sub Form_Load()
    cmbSelect.AddItem 10
    cmbSelect.AddItem 11
    cmbSelect.AddItem 12
    cmbSelect.AddItem 13
End Sub

3) In click event van cmbSelect:
Code:
Private Sub cmbSelect_Click()
    Select Case cmbSelect.ListIndex
        Case 0
            txtSelect.Text = "A"
            HexWaarde = txtSelect
        Case 1
            txtSelect.Text = "B"
            HexWaarde = txtSelect
        Case 2
            txtSelect.Text = "C"
            HexWaarde = txtSelect
        Case 3
            txtSelect.Text = "D"
            HexWaarde = txtSelect
    End Select
End Sub
4) In click event van de knop:
Code:
Private Sub cmdApply_Click()
    Open "fcdb.dbi" For Binary Access Write As #1
       Put #1, 141, HexWaarde
    Close #1
End Sub

5) Run het programma.

Succes,

Dennis.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan