22. august 2002 - 08:16Der er
18 kommentarer og 1 løsning
Indlæsning af data med VBA
Jeg har en problem med indlæsning af data fra et txt dokument til en matrix. Jeg bruger følgende lille macro
Open "C:\MinListe.txt" For Input As #1 Do While EOF(1) = False Kunde = Kunde + 1 Line Input #1, MinListe(Kunde) Loop Close #1
Dette gir´mig en endimensional matrix (1*300). Jeg skal faktisk bruge en 7 * 300 matrix. Jeg bruger Excel97.. og den kender IKKE Split funktionen. Er der en der har en god ide til hvordan jeg indlæser en sådanne liste direkte ind i hukommelsen (altså ikke først ind i Excel) , jeg vil gerne separere med TAB i min txt file
bambus - dette er IKKE testet, virker måske ikke, men giver dig nok ideen, måske virker vbTab ikke - prøv engang.
Sub Question248969() Dim MyArray(1 To 300, 1 To 7) As String Dim lCustomer As Long Dim lCountChar As Long Dim lCount As Long Dim sTempText As String
Open "C:\MinListe.txt" For Input As #1 Do While Not EOF(1) lCustomer = lCustomer + 1 Line Input #1, sTempText lCount = 0 For lCountChar = 1 To Len(sTempText) lCount = lCount + 1 MyArray(lCustomer, lCount) = _ Mid(sTempText, lCountChar, InStr(lCountChar, sTempText, vbTab)) lCountChar = InStr(lCountChar, sTempText, vbTab) + 1 Next lCountChar Loop Close #1 End Sub
Sub Question248969() Dim MyArray(1 To 300, 1 To 7) As String Dim lCustomer As Long Dim lCountChar As Long Dim lCount As Long Dim sTempText As String
Open "D:\KundeListe.txt" For Input As #1 Do While Not EOF(1) lCustomer = lCustomer + 1 Line Input #1, sTempText lCount = 0 For lCountChar = 1 To Len(sTempText) lCount = lCount + 1 If Not (InStr(lCountChar, sTempText, vbTab)) = 0 Then MyArray(lCustomer, lCount) = _ Mid(sTempText, lCountChar, InStr(lCountChar, sTempText, vbTab) - lCountChar) lCountChar = InStr(lCountChar, sTempText, vbTab) End If Next lCountChar Loop Close #1 End Sub
VBA opfatter . som kommaseperator, og du indlæser et , dette bør du måske også tage højde for. Her er tilføjet variablen lReplace samt en lille lykke der udskifter , til .
Sub Question248969() Dim MyArray(1 To 300, 1 To 7) As String Dim lCustomer As Long Dim lCountChar As Long Dim lCount As Long Dim lReplace As Long Dim sTempText As String ' Dim lX As Long ' Dim lY As Integer
Open "D:\KundeListe.txt" For Input As #1 Do While Not EOF(1) lCustomer = lCustomer + 1 Line Input #1, sTempText lCount = 0 For lCountChar = 1 To Len(sTempText) lCount = lCount + 1 If Not (InStr(lCountChar, sTempText, vbTab)) = 0 Then MyArray(lCustomer, lCount) = _ Mid(sTempText, lCountChar, InStr(lCountChar, sTempText, vbTab) - lCountChar) For lReplace = 1 To Len(MyArray(lCustomer, lCount)) If Not (InStr(lReplace, MyArray(lCustomer, lCount), ",") = 0) Then Mid(MyArray(lCustomer, lCount), InStr(lReplace, MyArray(lCustomer, lCount), ","), 1) = "." End If Next lReplace lCountChar = InStr(lCountChar, sTempText, vbTab) End If Next lCountChar Loop Close #1
' For lX = 1 To lCustomer ' For lY = 1 To 7 ' Cells(lX, lY).Value = MyArray(lX, lY) ' Next lY ' Next lX End Sub
Nu ved jeg jo ikke præcist hvad det er i er blevet enige om, men jeg vil da stadig fastholde, at min løsning (uden det "Line" jeg skrev først) er en betydeligt nemmere løsning.
Hvis jeg ellers har forstået det rigtigt kunne det meste af det ovenstående erstattes af kun én programlinie. Det er jo bare min mening - i er selvfølgelig velkomne til en anden :-)
superjab>> din løsning er fin - har et problem lige her, idet data i tekstfilen indholder komma'er, hvilket bliver taget som seperator af din metode - der laves ingen adskildelse ved TAB.
flemmingdahl Så var der jo alligevel noget jeg havde misforstået (troede det var en TAB-separeret fil).
I øvrigt indlæser "min" metode kommaer uden problemer (dvs. uden at opfatte dem som separator). Kan det skyldes en eller anden listig Windows-opsætning?
superjap>> det er en TAB-separeret fil, men der findes et komma i hver post, hvorfor det bliver svært for din metode. - Har ikke lige check på hvorfor.
flemmingdahl Jeg testede den kun hvor den sidste var kommatal, og det virkede fint. Men jeg har set at det går galt når de alle er kommatal (det må da være en lille fejl, for det fungerer hvis tallene bruger punktum i stedet for komma).
Nå, men så ved vi jo det.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.