Avatar billede Slettet bruger
28. februar 2014 - 21:12 Der er 18 kommentarer og
1 løsning

vba Loop / Sti problem.

Hej eksperter!

Sidder og roder med lidt loop og sti.
Første del virker, men kunne godt tænke mig evt. loop ind i det, da jeg ellers skal sidde og kode stxt op til 99 gange.
Den sidste del, som går hen til error hvis den første ikke kan finde filen.
der får jeg fejl med at den siger dårlig fil eller dårlig nummer.
Men den indsætter den første ligne fra txt filen til Excel arket men bare ikke resten.

formatet i txt filen er:
test.
test1.
test2.
osv.


Her er koden som jeg har pt.

Sub Read()
    Dim myPath As String
        myPath = ActiveWorkbook.Path
    Dim fnavn As String
    Dim strPath As String
    Dim strFileName As String
    On Error GoTo error

'Udskift stien med den ønskede sti
If Len(Dir(myPath & "\Update\", vbDirectory)) = 0 Then
    MkDir myPath & "\Update\"
End If
strPath = myPath & "\Update\"

    Application.DisplayAlerts = False
ChDir (strPath)
  Dim sFile As String
  Dim sText1 As String, sText2 As String, sText3 As String, sText4 As String, sText5 As String, sText6 As String, _
  sText7 As String, sText8 As String, sText10 As String
  Dim iFilenum As Integer

  sFile = strPath & "Test.txt"

  iFilenum = FreeFile
  Open sFile For Input As iFilenum
  Input #iFilenum, sText1, sText2, sText3, sText4, sText5, sText6, sText7, sText8, stext9, sText10
 
 
  Close #iFilenum
Range("B2") = sText1
Range("B3") = sText2
Range("B4") = sText3
Range("B5") = sText4
Range("B6") = sText5
Range("B7") = sText6
Range("B8") = sText7
Range("B9") = sText8
Range("B10") = stext9
Range("B11") = sText10

MsgBox "Opdateret Data!"
End

error:

    Dim fileToOpen As Variant
    fileToOpen = Application.GetOpenFilename("tekstfiler (*.txt), *.txt")
    If fileToOpen <> False Then
   
        Open fileToOpen For Input As #1
        Do While Not EOF(1)
        Line Input #1, TXT
        Cells(2, 2).Offset(X, O) = TXT
        X = X + 1
        Loop
    MsgBox "Opdateret Data!"
        Close #1
        Else
    MsgBox "Filen blev ikke fundet!"
    End If
End Sub


Tak på forhånd.
Avatar billede claes57 Ekspert
01. marts 2014 - 14:29 #1
If fileToOpen <> False Then
   
        Open fileToOpen For Input As #1
        Line Input #1, TXT
' hvad skal X starte med?
        X=0
        Do While Not EOF(1)
          Cells(2, 2).Offset(X, O) = TXT
          X = X + 1
          Line Input #1, TXT
        Loop
        MsgBox "Opdateret Data!"
        Close #1
    Else
        MsgBox "Filen blev ikke fundet!"
    End If
Avatar billede Slettet bruger
01. marts 2014 - 18:19 #2
#claes57
Får den samme fejl. "bad file or bad number fejl 52"
Avatar billede claes57 Ekspert
01. marts 2014 - 18:32 #3
http://msdn.microsoft.com/en-us/library/aa231024(v=vs.60).aspx
Du skal tjekke filnavn og sti. Noget er galt.
Avatar billede Slettet bruger
01. marts 2014 - 23:57 #4
Fundet ud af det. brugte det i den aktive ark.
derfor din del ikke virkede,
men fikse det med en Sheets("Ark2").Activate

Kan du evt. os hjælpe med den del med sti?
min sti virker som er en under mappe.
Men ville gerne have et loop ind i det, så jeg ikke skulle skrive alle de tal/kode pr. ligne.
Som der driller lidt.

altså denne del:

Sub Read()
    Dim myPath As String
        myPath = ActiveWorkbook.Path
    Dim fnavn As String
    Dim strPath As String
    Dim strFileName As String
    On Error GoTo error

'Udskift stien med den ønskede sti
If Len(Dir(myPath & "\Update\", vbDirectory)) = 0 Then
    MkDir myPath & "\Update\"
End If
strPath = myPath & "\Update\"

    Application.DisplayAlerts = False
ChDir (strPath)
  Dim sFile As String
  Dim sText1 As String, sText2 As String, sText3 As String, sText4 As String, sText5 As String, sText6 As String, _
  sText7 As String, sText8 As String, sText10 As String
  Dim iFilenum As Integer

  sFile = strPath & "Test.txt"

  iFilenum = FreeFile
  Open sFile For Input As iFilenum
  Input #iFilenum, sText1, sText2, sText3, sText4, sText5, sText6, sText7, sText8, stext9, sText10
 
 
  Close #iFilenum
Range("B2") = sText1
Range("B3") = sText2
Range("B4") = sText3
Range("B5") = sText4
Range("B6") = sText5
Range("B7") = sText6
Range("B8") = sText7
Range("B9") = sText8
Range("B10") = stext9
Range("B11") = sText10

MsgBox "Opdateret Data!"
End
Avatar billede Slettet bruger
02. marts 2014 - 01:24 #5
Nu fatter jeg mega hat?

bruger jeg koden i et test Excel ark (Ny) så virker det.
Bruger jeg det i det ark jeg skal bruge det i får jeg fejl.

Ligne jeg får fejl ved: Line Input #1, TXT

Men som sagt, virker det i et helt ny ark (Excel)
Men bare ikke i det ark jeg skal bruge koden i.
Intet bliver ændret i koden når jeg tester det i forskellige Excel ark (nye).

Sub Read()
    Dim myPath As String
        myPath = ActiveWorkbook.Path
    Dim fnavn As String
    Dim strPath As String
    Dim strFileName As String
    On Error GoTo error

'Aktive ark.
Sheets("ark1").Activate

'Udskift stien med den ønskede sti
If Len(Dir(myPath & "\Update\", vbDirectory)) = 0 Then
    MkDir myPath & "\Update\"
End If
strPath = myPath & "\Update\"

    Application.DisplayAlerts = False
ChDir (strPath)
  Dim sFile As String
  Dim sText1 As String, sText2 As String, sText3 As String, sText4 As String, sText5 As String, sText6 As String, _
  sText7 As String, sText8 As String, sText10 As String
  Dim iFilenum As Integer

  sFile = strPath & "Test.txt"

  iFilenum = FreeFile
  Open sFile For Input As iFilenum
  Input #iFilenum, sText1, sText2, sText3, sText4, sText5, sText6, sText7, sText8, stext9, sText10
 
 
  Close #iFilenum
Range("B2") = sText1
Range("B3") = sText2
Range("B4") = sText3
Range("B5") = sText4
Range("B6") = sText5
Range("B7") = sText6
Range("B8") = sText7
Range("B9") = sText8
Range("B10") = stext9
Range("B11") = sText10

MsgBox "Opdateret Data!"
End

error:

  Dim fileToOpen As Variant
    fileToOpen = Application.GetOpenFilename("tekstfiler (*.txt), *.txt")
If fileToOpen <> False Then
   
        Open fileToOpen For Input As #1
        Line Input #1, TXT
' hvad skal X starte med?
        X = 0
        Do While Not EOF(1)
          Cells(2, 2).Offset(X, O) = TXT
          X = X + 1
          Line Input #1, TXT
        Loop
        MsgBox "Opdateret Data!"
        Close #1
    Else
        MsgBox "Filen blev ikke fundet!"
    End If
End Sub
Avatar billede claes57 Ekspert
02. marts 2014 - 11:00 #6
loop - er det Dim sText1 As String, sText2 As String, sText3 As String, sText4 As String, sText5 As String, sText6 As String, _
  sText7 As String, sText8 As String, sText10 As String
som du vil have rettet til noget simpelt. Så skal du bruge et array.
Ser på det...
Avatar billede Slettet bruger
04. marts 2014 - 13:21 #7
#claes57 præcis. Men skal bare stadig være fra en undermappe.
Avatar billede claes57 Ekspert
04. marts 2014 - 14:01 #8
det må (utestet) blive noget som (din kode er gemt - bare udkommenteret) og den kan tage op til 32000 linjer:
Sub Read()
    Dim myPath As String
        myPath = ActiveWorkbook.Path
    Dim fnavn As String
    Dim strPath As String
    Dim strFileName As String
    On Error GoTo error

'Aktive ark.
Sheets("ark1").Activate

'Udskift stien med den ønskede sti
If Len(Dir(myPath & "\Update\", vbDirectory)) = 0 Then
    MkDir myPath & "\Update\"
End If
strPath = myPath & "\Update\"

    Application.DisplayAlerts = False
ChDir (strPath)
  Dim sFile As String
  Dim sText() As String
  Dim Taeller As Integer, Antal As Integer
'  Dim sText1 As String, sText2 As String, sText3 As String, sText4 As String, sText5 As String, sText6 As String, sText7 As String, sText8 As String, sText10 As String
  Dim iFilenum As Integer

  sFile = strPath & "Test.txt"

  iFilenum = FreeFile
  Taeller = 0
  Open sFile For Input As iFilenum
' hent data og placer i array
  While Not EOF(iFilenum)
    Taeller = Taeller + 1
    Input #iFilenum, sText(Taeller)
'  Input #iFilenum, sText1, sText2, sText3, sText4, sText5, sText6, sText7, sText8, stext9, sText10
  Wend
  Close #iFilenum
' optimer array mht numre, så de passer til arkplacering
  ReDim Preserve sText(2 To Taeller + 1)
  For Antal = 2 To UBound(sText())
    Range("B" & Antal) = sText(Antal)
  Next
   
'Range("B2") = sText1
'Range("B3") = sText2
'Range("B4") = sText3
'Range("B5") = sText4
'Range("B6") = sText5
'Range("B7") = sText6
'Range("B8") = sText7
'Range("B9") = sText8
'Range("B10") = stext9
'Range("B11") = sText10

  MsgBox "Opdateret Data!"
End

error:

  Dim fileToOpen As Variant
    fileToOpen = Application.GetOpenFilename("tekstfiler (*.txt), *.txt")
If fileToOpen <> False Then
   
        Open fileToOpen For Input As #1
        Line Input #1, TXT
' hvad skal X starte med?
        X = 0
        Do While Not EOF(1)
          Cells(2, 2).Offset(X, O) = TXT
          X = X + 1
          Line Input #1, TXT
        Loop
        MsgBox "Opdateret Data!"
        Close #1
    Else
        MsgBox "Filen blev ikke fundet!"
    End If
End Sub
Avatar billede Slettet bruger
04. marts 2014 - 15:13 #9
#claes57 jeg prøver at se om det virker når jeg er hjemme.
Avatar billede Slettet bruger
06. marts 2014 - 00:39 #10
#claes57 siger fejl da jeg prøvede koden.
Avatar billede claes57 Ekspert
06. marts 2014 - 06:50 #11
Så kunne du fx komme med fejlkode/sted. Men mon ikke den er i linjen
As String, sText7 As String, sText8 As String, sText10 As String
Som ser ud til at være tabt? Der skal en udkommentering foran, så det er
' As String, sText7 As String, sText8 As String, sText10 As String
Avatar billede Slettet bruger
06. marts 2014 - 10:20 #12
#claes57 ups havde jeg ikke set!
Avatar billede claes57 Ekspert
06. marts 2014 - 10:28 #13
jeg må have slettet _ i linjen lige før...
Avatar billede Slettet bruger
21. marts 2014 - 20:07 #14
Fungere stadig ikke.

Fejl ved denne ligne Input #iFilenum, sText(Taeller).
Tror jeg bare skriver alle de ligner i stedet ;o
Avatar billede claes57 Ekspert
21. marts 2014 - 20:17 #15
Når du ikke kommer med nærmere fejlkode/linje, så er det løsningen. Jeg ved ikke, hvorfor fejl er hemmelig, men det styrer du bare selv.
Læg et svar, og luk selv.
Avatar billede Slettet bruger
21. marts 2014 - 20:48 #16
Ja okej beklager at jeg ikke fik nævnt "fejl koden" !
Men det er "run-time error '9'"

og lignede er "Input #iFilenum, sText(Taeller)" som var nævnt.!
Avatar billede claes57 Ekspert
21. marts 2014 - 21:08 #17
find linjen
  Dim sText() As String
ret den til
  Dim sText As String()
Avatar billede Slettet bruger
21. marts 2014 - 21:55 #18
Acceptere den ikke.

"Compile error: Expected: end of statement"
Avatar billede Slettet bruger
23. juni 2014 - 17:17 #19
Lukker.
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
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

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