Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Problem med en array, "indexet är utanför intervall"

Postades av 2004-07-07 09:17:04 - Jesper Liedberg, i forum visual basic - allmänt, Tråden har 13 Kommentarer och lästs av 4918 personer

Hejsan

Jag har ett excelark som innehåller 6 kolumner och ett antal rader. När jag klickar på en knapp sparas raderna till en textfil som i sin tur läses in i en array och splitas up. Sedan fogas den ihop igen. När jag lägger till rader i excelarket går allt bra, men när jag tar bort en eller flera rader i excelarket och sparar får jag Körfel 9 "indexet är utanför intervall".
Så här ser koden för arrayen ut. Jag har läst igenom det mesta jag hittat här om arrayer men inte kunnat lösa detta.

Tacksam för svar.

Jesse

<Code>
Dim tmpArray() As String

' Här finns lite annan kod

nFile3 = FreeFile
Open ActiveWorkbook.Path & "\" & sFilename For Input As #nFile3
nFile4 = FreeFile
Open ActiveWorkbook.Path & "\" & "Nyfil.txt" For Output As #nFile4

Do Until EOF(nFile3)
Line Input #nFile3, strIn
tmpArray = Split(strIn, ";")
sTmp = ("H1;IN" & ";H2;" & tmpArray(0) & ";H3;" & tmpArray(1) & ";H4;19" & tmpArray(2) & ";H5;" & tmpArray(3) & ";H6;" & tmpArray(4) & ";H7;" & tmpArray(5) & ";CR")
Print #nFile4, sTmp
Loop

Close #nFile3
Close #nFile4
Kill ActiveWorkbook.Path & "\" & sFilename
Name ActiveWorkbook.Path & "\" & "Nyfil.txt" As ActiveWorkbook.Path & "\" & sFilename
</Code>


Svara

Sv: Problem med en array, "indexet är utanför intervall"

Postades av 2004-07-07 10:03:11 - Sven Åke Persson

Om jag förstått det rätt så måste du göra en ny Split och använda Ubound(tmpArray)
i en Forslinga. Dvs när du läser från tmpArray använd Ubound som övre begränsare.

Här blir det ju fel eftersom tmpArray(5) inte finns om du tagit bort någon del
Du kan inte "hårdkoda" index måste lösas med en For-slinga
Du kan göra så här som test.

<code>
On Error Resume Next
sTmp = ("H1;IN" & ";H2;" & tmpArray(0) & ";H3;" & tmpArray(1) & ";H4;19" & tmpArray(2) & ";H5;" & tmpArray(3) & ";H6;" & tmpArray(4) & ";H7;" & tmpArray(5) & ";CR")
On Error Goto 0 ' städa felhantering
</code>


Svara

Sv: Problem med en array, "indexet är utanför intervall"

Postades av 2004-07-07 10:27:51 - Jesper Liedberg

Hejsan

Vid felsökning markeras denna rad:

<Code>
sTmp = ("H1;IN" & ";H2;" & tmpArray(0) & ";H3;" & tmpArray(1) & ";H4;19" & tmpArray(2) & ";H5;" & tmpArray(3) & ";H6;" & tmpArray(4) & ";H7;" & tmpArray(5) & ";CR")
</Code>

Vad jag inte förstår är vad som händer med arrayen när man går från t ex fem rader till tre.
Kan man nollställa arrayen efter varje loop?
Har provat att använda ReDim och Erase till ingen nytta, eller jag fick det inte att fungera med andra ord.


Svara

Sv: Problem med en array, "indexet är utanför intervall"

Postades av 2004-07-07 10:32:33 - Niklas Jansson

När ändrar du i excel, vilken ordning sker grejerna?
Har du studerat textfilen själv mellan ändringarna?


Svara

Sv: Problem med en array, "indexet är utanför intervall"

Postades av 2004-07-07 10:48:14 - Jesper Liedberg

Jag lägger upp hela koden så att ni kanske kan få en bättre uppfattning om vad som händer.

<Code>

Private Sub sparaCmd_Click()

Dim sFilename As String
Dim sRow As String
Dim nCol As Integer
Dim nRow As Integer
Dim nFile As Integer
Dim nFile3 As Integer
Dim nFile4 As Integer
Dim tmpArray() As String
Dim strIn As String
Dim sTmp As String
Const DELIM As String = ";"

sFilename = "Nyanmälan.txt"
nFile = FreeFile
Open ActiveWorkbook.Path & "\" & sFilename For Output As #nFile


With ActiveSheet.UsedRange
For nRow = 4 To .Rows.Count
sRow = ""
For nCol = 1 To .Columns.Count
If sRow <> "" Then sRow = sRow & DELIM
sRow = sRow & CStr(.Cells(nRow, nCol))
Next nCol
Print #nFile, sRow
Next nRow
End With
Close #nFile


nFile3 = FreeFile
Open ActiveWorkbook.Path & "\" & sFilename For Input As #nFile3
nFile4 = FreeFile
Open ActiveWorkbook.Path & "\" & "Nyfil.txt" For Output As #nFile4
Do Until EOF(nFile3)
Line Input #nFile3, strIn
tmpArray = Split(strIn, ";")
sTmp = ("H1;IN" & ";H2;" & tmpArray(0) & ";H3;" & tmpArray(1) & ";H4;19" & tmpArray(2) & ";H5;" & tmpArray(3) & ";H6;" & tmpArray(4) & ";H7;" & tmpArray(5) & ";CR")
Print #nFile4, sTmp

Loop

Close #nFile3
Close #nFile4
Kill ActiveWorkbook.Path & "\" & sFilename
Name ActiveWorkbook.Path & "\" & "Nyfil.txt" As ActiveWorkbook.Path & "\" & sFilename

End Sub
</Code>

När jag började med arket hade jag fem rader, och det var inga problem. Tar jag bort ett par rader får jag ovannämda problem. Lägger jag till en rad så att jag har fyra rader får jag samma problem. Lägger jag däremot till tre rader så att det bli 6 stycken (alltså fler än fem) fungerar programmet igen.

Filerna ser ok ut förutom att programmet inte kommer så långt att den kopierar över raderna från Nyfil till Nyanmälan och sedan tar bort Nyfil.


Svara

Sv: Problem med en array, "indexet är utanför intervall"

Postades av 2004-07-07 10:55:46 - Jesper Liedberg

Jag provade lägga in följande

<Code>
On Error Resume Next
sTmp = ("H1;IN" & ";H2;" & tmpArray(0) & ";H3;" & tmpArray(1) & ";H4;19" & tmpArray(2) & ";H5;" & tmpArray(3) & ";H6;" & tmpArray(4) & ";H7;" & tmpArray(5) & ";CR")
On Error Goto 0 ' städa felhantering
</Code>

Resultatet blev att det går att ta bort rader och man får inget felmeddelande, men tar man bort alla rader i excelarket utom en skrivs denna rad ut 23 gånger. Antar att det har med storleken på arrayen att göra.


Svara

Sv: Problem med en array, "indexet är utanför intervall"

Postades av 2004-07-07 11:06:31 - Niklas Jansson

För det första så är det här ingen VB-fråga, utan en VBA-fråga, och det är rätt stor skillnad. Borde legat i Office-forumet.

Nåväl... felet är att du delar upp raderna med ";" som separator, men tolkar det som kolumner sen. Naturligtvis blir det fel om du har färre än fem rader.
I excel bör du inte skriva till filer på det här sättet, utan använda SaveAsText (har jag för mig att det heter). I ditt fall är det däremot helt onödigt med mellanfilen - skriv direkt till din slutfil istället.

Förklara vad det är du vill göra, för du verkar ha snurrat till det en del, och det finns sannolikt mycket enklare sätt att lösa det på.


Svara

Sv: Problem med en array, "indexet är utanför intervall"

Postades av 2004-07-07 11:24:54 - Jesper Liedberg

Du har nog rätt i vad du säger angående VBA, men eftersom jag inte riktigt visste vad detta räknades som blev det i detta forumet.
Jag ska försöka beskriva vad jag har tänkt.

I Excel har jag ett ark som innehåller sex kolumner (Avtalsnummer, Avdelning, Persnr, Tidpunkt, Namn och Lön). Där ska man kunna lägga till och ta bort information. Väljer man SaveAsText i Excel får man följande resultat:

121212,000,9999999999,20040505,Olle Berg,300000

För att jag ska kunna använda denna fil måste den se ut så här:

H1;IN;H2;3121212;H3;000;H4;9999999999;H5;20040505;H6;Olle Berg;H7;300000;CR

Jag har en knapp på excelarket som ska spara den till en rätt utformad textfil. Denna fil ska in i företagets stordator och där krävs denna utformning. Eftersom jag inte är så bra på VBA och uppenbarligen inte heller VB känns det ändå enklare att ta ut en textfil ur Excel och sedan bearbeta den med VB.
Problemet har varit att få till textfilen som jag vill ha den och det kanske går på något sätt i Excel men jag vet inte hur. Jag har just börjat lära mig VB så jag kan inte alla smarta och enkla sätt att programmera, men förhoppningen är att jag ska bli bättre med tiden. Jag hoppas att ni har överseende om jag ställer "dumma" frågor men som sagt kan jag inte VB i samma utsträckning som många av Er.

Jesse


Svara

Sv: Problem med en array, "indexet är utanför intervall"

Postades av 2004-07-07 13:27:39 - Niklas Jansson

Nej, det är naturligtvis inget problem. Det lättaste skulle nog vara något av följande:

1. Spara filen direkt från excelbladet, men i övrigt på samma sätt som du gör.
Alltså
Print #1, "H1;IN;H2" & cells(rad, kolumn) & ...
Typ.

2. Att temporärt göra om filen till en enda kolumn och bara spara denna.
Alltså skriva en formel som ser ut som ="H1;IN;H2" & Cell1 & ...
i en ruta och sen "dra" ner. Blir mycket enkelt, och du behöver ingen VBA-kod (men du kan använda om du tycker att det blir lättare).

Skulle nog gjort alternativ 2.


Svara

Sv: Problem med en array, "indexet är utanför intervall"

Postades av 2004-07-07 13:32:06 - Jesper Liedberg

Detta låter mycket intressant, måste genast försöka mig på att göra detta.

Tackar för svaret, det uppskattas enormt.

Jesse


Svara

Sv: Problem med en array, "indexet är utanför intervall"

Postades av 2004-07-07 13:54:09 - Niklas Jansson

Om du skickar din e-mail adress som iMail, så kan jag skicka en exempelbok, där du enkelt ser hur det går till.


Svara

Sv: Problem med en array, "indexet är utanför intervall"

Postades av 2004-07-07 14:08:23 - Jesper Liedberg

Jag kan inte skicka iMail eftersom den fliken är gråmarkerad. Är det någon inställning som måste till?

Edit: glöm det, jag kom på hur man gjorde. Inte så svårt om man bara tittar ordentligt.


Svara

Sv: Problem med en array, "indexet är utanför intervall"

Postades av 2004-07-07 14:14:25 - Niklas Jansson

Helskumt, men om du går in på Visitkortet (rutan bredvid "Svara"), så finns det en knapp "Skicka iMail" längst ner.


Svara

Sv: Problem med en array, "indexet är utanför intervall"

Postades av 2004-07-07 14:16:15 - Jesper Liedberg

Jag kom på det som sagt, såg ej den lilla ikonen i början.


Svara

Nyligen

  • 11:13 Online Kasino
  • 17:57 Vart är SEO på väg till 2030?
  • 14:24 CBD regelbundet?
  • 14:23 CBD regelbundet?
  • 14:22 Har du märkt några verkliga fördel
  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 661
27 954
271 713
5 558
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies
Expand
next previous
Close

Previous

0/0

Next