Hejsan Om jag förstått det rätt så måste du göra en ny Split och använda Ubound(tmpArray) Hejsan När ändrar du i excel, vilken ordning sker grejerna? Jag lägger upp hela koden så att ni kanske kan få en bättre uppfattning om vad som händer. Jag provade lägga in följande 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. 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. Nej, det är naturligtvis inget problem. Det lättaste skulle nog vara något av följande: Detta låter mycket intressant, måste genast försöka mig på att göra detta. 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. Jag kan inte skicka iMail eftersom den fliken är gråmarkerad. Är det någon inställning som måste till? Helskumt, men om du går in på Visitkortet (rutan bredvid "Svara"), så finns det en knapp "Skicka iMail" längst ner. Jag kom på det som sagt, såg ej den lilla ikonen i början.Problem med en array, "indexet är utanför intervall"
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>Sv: Problem med en array, "indexet är utanför intervall"
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>Sv: Problem med en array, "indexet är utanför intervall"
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. Sv: Problem med en array, "indexet är utanför intervall"
Har du studerat textfilen själv mellan ändringarna?Sv: Problem med en array, "indexet är utanför intervall"
<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.Sv: Problem med en array, "indexet är utanför intervall"
<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.Sv: Problem med en array, "indexet är utanför intervall"
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å.Sv: Problem med en array, "indexet är utanför intervall"
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.
JesseSv: Problem med en array, "indexet är utanför intervall"
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.Sv: Problem med en array, "indexet är utanför intervall"
Tackar för svaret, det uppskattas enormt.
JesseSv: Problem med en array, "indexet är utanför intervall"
Sv: Problem med en array, "indexet är utanför intervall"
Edit: glöm det, jag kom på hur man gjorde. Inte så svårt om man bara tittar ordentligt.Sv: Problem med en array, "indexet är utanför intervall"
Sv: Problem med en array, "indexet är utanför intervall"