Jeg er ved at lave en opgave hvor man skal søge efter produkter under et cifferniveau. Der er bare en sætning der ikke virker og jeg kan simpelthen ikke finde fejlen.
For x = 1 To 9 .Offset(0, x) = "199" & x - 1 Next x
For y = 1 To UBound(prodgr) -Det er denne linie der ikke fungere .Offset(y, 0).Value = prodgr(y) For z = 1 To 9 .Offset(y, z).Value = årstal(z, y) Next z Next y End With
Jeg har defineret alle variablerne men programmet kan ikke køres.
Danmark vil mindske afhængigheden af globale techgiganter, men det kræver mere end politiske formuleringer og strategier, understreger PROSA’s formand Niels Bertelsen.
Jeg definere prodgr som variant... før i programmet har jeg skrevet
For i = 1 To antalgr cifftæller = 0 celleindhold = .Offset(i, 0) indhold1 = Left(celleindhold, 2) indhold2 = Mid(celleindhold, 3, 2)
For tæller = 1 To 7 If Mid(celleindhold, tæller, 1) <> 32 Then cifftæller = cifftæller + 1 End If Next tæller If cifftæller = ciffer Then If indhold1 > 27 And indhold1 < 97 Then If ciffer = 2 Or indhold2 <> "99" Then j = j + 1 ReDim Preserve prodgr(j) prodgr(j) = .Offset(i, 0).Value
ReDim Preserve årstal(9, j) For x = 1 To 9 If .Offset(i, x).Value = "-" Then årstal(x, j) = 0 Else årstal(x, j) = .Offset(i, x).Value End If Next x End If End If End If Next i End With
Dim rapportland As String, samland As String Dim ciffer As Integer Dim prodgr() As Variant, prodgr2() As Variant, årstal() As Variant, årstal2() As Variant
If rapportland = samland Then MsgBox "Du skal vælge to forskellige lande!" End If Loop Until rapportland <> samland
End Sub
Sub trimdata(rapportland As String, samland As String, ciffer As Integer, prodgr() As Variant, årstal() As Variant, prodgr2() As Variant, årstal2() As Variant)
Dim filnavn1 As String Dim antalgr As Integer Dim sti1 As String Dim i As Integer, j As Integer Dim cifftæller As Integer Dim celleindhold As String, indhold1 As String, indhold2 As String Dim tæller As Integer Dim x As Integer, y As Integer
With Workbooks(sti1).Worksheets(filnavn1).Range("A8") antalgr = Range(.Offset(0, 0), .End(xlDown)).Rows.Count
For i = 1 To antalgr cifftæller = 0 celleindhold = .Offset(i, 0) indhold1 = Left(celleindhold, 2) indhold2 = Mid(celleindhold, 3, 2)
For tæller = 1 To 7 If Mid(celleindhold, tæller, 1) <> 32 Then cifftæller = cifftæller + 1 End If Next tæller If cifftæller = ciffer Then If indhold1 > 27 And indhold1 < 97 Then If ciffer = 2 Or indhold2 <> "99" Then j = j + 1 ReDim Preserve prodgr(j) prodgr(j) = .Offset(i, 0).Value
ReDim Preserve årstal(9, j) For x = 1 To 9 If .Offset(i, x).Value = "-" Then årstal(x, j) = 0 Else årstal(x, j) = .Offset(i, x).Value End If Next x End If End If End If Next i End With
Dim filnavn2 As String Dim sti2 As String Dim j2 As Integer
j2 = 0 With Workbooks(sti2).Worksheets(filnavn2).Range("A8")
For i = 1 To antalgr cifftæller = 0 celleindhold = .Offset(i, 0) indhold1 = Left(celleindhold, 2) indhold2 = Mid(celleindhold, 3, 2)
For tæller = 1 To 7 If Mid(celleindhold, tæller, 1) <> 32 Then cifftæller = cifftæller + 1 End If Next tæller If cifftæller = ciffer Then If indhold1 >= 28 And indhold1 <= 96 Then If ciffer = 2 Or indhold2 <> "99" Then j = j + 1 ReDim Preserve prodgr2(j2) prodgr2(j) = .Offset(i, 0).Value
ReDim Preserve årstal2(9, j2) For x = 1 To 9 If .Offset(i, x).Value = "-" Then årstal2(x, j2) = 0 Else årstal2(x, j2) = .Offset(i, x).Value End If Next x End If End If End If Next i End With
If ciff = 2 Or ciff = 4 Or ciff = 6 Then MsgBox "Der uddrages data på " & ciff & ". cifferniveau." Else MsgBox "Cifferniveauet er ikke gyldigt. Indtast enten 2, 4 eller 6!" End If
Loop Until ciff = 2 Or ciff = 4 Or ciff = 6
End Sub
Sub samledata(rapportland As String, samland As String, ciffer As Integer, prodgr() As Variant, prodgr2() As Variant, årstal() As Variant, årstal2() As Variant)
Dim x, y, z As Variant
Workbooks.Add ActiveWorkbook.Worksheets("Ark1").Name = "Import" With ActiveWorkbook.Worksheets("Import").Range("A3")
For x = 1 To 9 MsgBox UBound(prodgr) .Offset(0, x) = "199" & x - 1 Next x
For y = 1 To UBound(prodgr) .Offset(y, 0).Value = prodgr(y)
For z = 1 To 9
.Offset(y, z).Value = årstal(z, y) Next z Next y End With
'For x = 1 To UBound(beskrivelse) '.Offset(x, 0).Value = beskrivelse(x) 'For i = 1 To 9 '.Offset(x, i).Value = aartal(i, x) 'Next i 'Next x 'End With
ActiveWorkbook.Worksheets("Ark2").Name = "Eksport" With ActiveWorkbook.Worksheets("Eksport").Range("A3")
For x = 1 To 9 .Offset(0, x) = "199" & x - 1 Next x
For y = 1 To UBound(prodgr2) .Offset(y, 0).Value = prodgr2(y) For z = 1 To 9 .Offset(y, z).Value = årstal2(z, y) Next z Next y End With
Til helmet: ok hvad er det for en if du taler om...er det den ved: If ciff = 2 Or ciff = 4 Or ciff = 6 Then MsgBox "Der uddrages data på " & ciff & ". cifferniveau." Else MsgBox "Cifferniveauet er ikke gyldigt. Indtast enten 2, 4 eller 6!" End If
og hvad skal jeg gøre?
Til Thesurfer: ja ved indlægget ændrede det ikke noget...og hvad skal jeg sætte prodgr til? For samme problem kommer vel også ved næste uBound-sætning....
Ja, det nemmeste for dig vil nok være og gøre som thesurfer foreslog tidligere og redimme prodgr til 0 tidligere i koden, men samtidigt lave en if omkring for løkken hvor prodgr bruger i din samledata funktion
if ubound(prodgr) > 0 then For y = 1 To UBound(prodgr) .Offset(y, 0).Value = prodgr(y)
For z = 1 To 9
.Offset(y, z).Value = årstal(z, y) Next z Next y end if
Hvis du så fjerner den redim prodgr(0) i trimmemain, og ændrer det nederste af din kode, så den ser således ud. Har lavet en funktion TomtArray, der finder ud af om dine array er tomme, hvis de er det springer vi udenom for løkkerne som kunne få subscript out of range
Sub samledata(rapportland As String, samland As String, ciffer As Integer, prodgr() As Variant, prodgr2() As Variant, årstal() As Variant, årstal2() As Variant)
Dim x, y, z As Variant
Workbooks.Add ActiveWorkbook.Worksheets("Ark1").Name = "Import" With ActiveWorkbook.Worksheets("Import").Range("A3")
For x = 1 To 9 .Offset(0, x) = "199" & x - 1 Next x
If Not TomtArray(prodgr) Then For y = 1 To UBound(prodgr) .Offset(y, 0).Value = prodgr(y)
For z = 1 To 9
.Offset(y, z).Value = årstal(z, y) Next z Next y End If End With
'For x = 1 To UBound(beskrivelse) '.Offset(x, 0).Value = beskrivelse(x) 'For i = 1 To 9 '.Offset(x, i).Value = aartal(i, x) 'Next i 'Next x 'End With
ActiveWorkbook.Worksheets("Ark2").Name = "Eksport" With ActiveWorkbook.Worksheets("Eksport").Range("A3")
For x = 1 To 9 .Offset(0, x) = "199" & x - 1 Next x
If Not TomtArray(prodgr2) Then For y = 1 To UBound(prodgr2) .Offset(y, 0).Value = prodgr2(y) For z = 1 To 9 .Offset(y, z).Value = årstal2(z, y) Next z Next y End If End With
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.