Mitenkäs sitä VBA:lla voi Word 2003:ssa lukea jonkin .txt -tiedoston (valitaan open file dialogin kautta) ja sitten ottaa muuttujiin tietoja?
Tällä komennolla ilmeisesti saa polun selville, mutta mitä sitä?
tiedostonimi = Application.FileDialog(msoFileDialogOpen).Show
Määritellään esimerkin vuoksi testi.txt, jossa on seuraavat tiedot:
ukkeli|kukkeli|
Nämä kaksi tietoa pitäisi saada luettua omiin muuttujiinsa. Tuosta varmaan pääsisin kärryille aika mukavasti jos joku voisi neuvoa. :)
Ei kyllä onnistu millään tämä tiedoston luku... koko päivän säätänyt ja yrittänyt googlettaa..
Application.FileDialog(msoFileDialogOpen).Show tunnostaa palauttavan vain jonkin numeron. -1 jos ei valittu mitään ja positiivisen jos valittiin jokin. Pitäisi saada vain ronskisti kaikki teksti testi.txt -tiedostosta vaikka johonkin stringiin.
Jos tiedoston nimi on selvillä, niin loppu hoituu näin:
Dim rivi As String, tiedot() As String Open "c:\omat\testi.txt" For Input As #1 Line Input #1, rivi Close #1 tiedot = Split(rivi, "|") MsgBox tiedot(0) MsgBox tiedot(1)
Komento Open avaa tiedoston, Line Input lukee rivin ja Close sulkee tiedoston. Funktio Split muuttaa merkkijonon taulukoksi annettujen erottimien kohdalta.
Ok. Näyttää toimivan. Kiitti!
Hmm.. Entäpä kun on stringi jossa on paljon tekstiä ja haluaisin pistää stringin poikki siitä, missä rivi vaihtuu? Split vissiin osaa, mutta näin ei onnistunut ainakaan: test = Split(sText, Chr(13))
Tuon koodin pitäisi kyllä toimia, jos Chr(13) erottaa rivit merkkijonossa.
Tällä koodilla voit tutkia, mitä merkkejä merkkijonossa on:
Dim teksti As String, merkit As String Dim i As Integer ' tutkittava merkkijono teksti = "abc" + vbCrLf + "def" + vbCrLf + "ghi" For i = 1 To Len(teksti) merkit = merkit & Asc(Mid(teksti, i, 1)) & " " Next MsgBox merkit
Merkintä vbCrLf tarkoittaa samaa kuin Chr(13) + Chr(10).
Näkyy olevan 10 ja 13 lopussa aina. Merkillinen kun tuo Split(sText, chr(13)) ei natsaa. :o
Lisäys:
Tulee muuten errori siinä kun pistän Splittiä "Type mismatch (Error 13)". Tässä on vielä koodit, jos auttaisi vianselvityksessä.
Dim sText As String ' Tässä on sitä tekstiä ladattuna melko paljon Open "testi.txt" For Input As nLahdetiedosto sText = Input$(LOF(1), 1) Dim test As String test = Split(sText, Chr(13))
Mitä sitten tapahtuu? Tuleeko taulukkoon mitään?
Voit tutkia taulukon merkkijonoja samalla tavalla.
Tuohon test -muuttujaan ei tule mitään jos yritän messageboxissa sen näyttää splitin jälkeen. Mutta jos ei splittaa test -muuttujaa ja pistää sTextin arvon messageboxiin niin siinä on kyllä tavaraa.
Muuttuja test on taulukko, kirjoita siis määrittely näin:
Dim test() As String
Auttaako tämä muutos?
Autto. Kiitti taas. :)
Jotenkin tunnostaa nämä vba funktiot sekoilta kun on tottunut vb.net ja c# koodeihin... Ei olisi tuostakaan tullut mieleen, että taulu tulisi takaisin.
Aihe on jo aika vanha, joten et voi enää vastata siihen.