Avatar billede bambus Nybegynder
22. august 2002 - 08:16 Der 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
22. august 2002 - 08:22 #1
Har du et deletegn i din tekst linie ?
Avatar billede bambus Nybegynder
22. august 2002 - 08:25 #2
mener du f.eks. 02-1212 så ja
22. august 2002 - 08:27 #3
vil det sige, at der er en - imellem de 7 oplysninger pr. kunde ?
Avatar billede bambus Nybegynder
22. august 2002 - 08:35 #4
nej listen er som følgende:

Kundenummer (TAB) Afdeligsnummer (TAB) osv osv
22. august 2002 - 08:55 #5
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
22. august 2002 - 08:56 #6
Hmm tror egenligt ikke at der skal stå + 1 i linien lCountChar = InStr(lCountChar, sTempText, vbTab) + 1 PRØV
Avatar billede sjap Praktikant
22. august 2002 - 08:57 #7
Kan man ikke bare lave inputtet sådan her (jeg er ikke sikker for jeg kan ikke lige huske hvilke separatorer, der accepteres)?

Line Input #1, Liste1(Kunde), Liste2(Kunde), Liste3(Kunde), Liste4(Kunde), Liste5(Kunde), Liste6(Kunde), Liste7(Kunde)
Avatar billede bambus Nybegynder
22. august 2002 - 10:09 #8
Subscript out of range... i linie
MyArray(lCustomer, lCount) = Mid(sTempText, lCountChar, InStr(lCountChar, sTempText, vbTab))

noget kunne tyde på at vbTab ikke virker.
22. august 2002 - 10:10 #9
gider du sende mig en 5 liniers tab fil - fd@win-consult.com - så vil jeg lige teste
22. august 2002 - 11:45 #10
Jeg er igang - allmost there :-)
Avatar billede bambus Nybegynder
22. august 2002 - 11:46 #11
;-) super
22. august 2002 - 11:50 #12
Here you are :-) (I guess)

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
22. august 2002 - 12:01 #13
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
Avatar billede bambus Nybegynder
22. august 2002 - 12:27 #14
super
Avatar billede sjap Praktikant
22. august 2002 - 12:59 #15
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.

Input #1, Liste1(Kunde), Liste2(Kunde), Liste3(Kunde), Liste4(Kunde), Liste5(Kunde), Liste6(Kunde), Liste7(Kunde)

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  :-)
22. august 2002 - 13:14 #16
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.
Avatar billede sjap Praktikant
22. august 2002 - 14:16 #17
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?
23. august 2002 - 08:40 #18
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.
Avatar billede sjap Praktikant
23. august 2002 - 12:50 #19
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.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Vi har et stort udvalg af Excel kurser. Find lige det kursus der passer dig lige her.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester