Avatar billede sbmoller Nybegynder
30. september 2011 - 05:30 Der er 2 kommentarer og
1 løsning

method range of object blobal

Hej!
Jeg forsøger at hente data fra et excel ark til et andet. data består af en masse rows/coloums med et ID i første kolonne. Figurerer ID'et i den endelige fil skal programmet overskrive samme række med den nye info fra "output". Eksisterer ID'et ikke skal den lave en ny række.
Nedenstående kode har virket før, men af en eller anden grund virker det ikke mere og giver fejlen Method range of global failed, hvad kan jeg gøre?

Jeg har forsøgt at teste lidt på det og det lader til den kører programmet igennem flere gange? + at indlæser jeg kun omkring 8000 linjer går den ikke i fejl? Jeg prøvede så at ændre integer > long på de variables der var integer, men det hjalp heller ikke.

Sub updateShipmentsNEW()
Dim WB1 As Excel.Workbook
Dim rowList, a As Integer
Dim newShipment, updatedShipment, oldShipment, wrongShipment As Integer
Dim shipment As String
Dim data, found As Variant
Dim rng As Range
Dim rowOutput, row As Integer

Application.ScreenUpdating = False
If Not IsFileOpen(Range("CONFIG!L6").Value) Then
    Set WB1 = Workbooks.Open(Range("CONFIG!L6").Value)
End If
rowOutput = Workbooks("Output.xls").Sheets("Shipment Profile").Range("c65536").End(xlUp).row - 11
rowList = Workbooks("STATISTIC.xlsm").Sheets("ROOTDATA").Range("A65536").End(xlUp).row - 2
Set rng = Workbooks("STATISTIC.xlsm").Sheets("CONFIG").Range("O6:O60")
For a = 1 To rowOutput
    found = Application.Match(Workbooks("Output.xls").Sheets("Shipment Profile").Range("C11").Offset(a, 24), rng, 0)
    If IsError(found) Then
        wrongShipment = wrongShipment + 1
    Else
        shipment = Workbooks("Output.xls").Sheets("Shipment Profile").Range("C11").Offset(a, 0)
        Index = Application.Match(shipment, Workbooks("STATISTIC.xlsm").Sheets("ROOTDATA").Range("A2:A" & rowList), 0)
        If IsError(Index) Then
            newShipment = newShipment + 1
            data = Workbooks("Output.xls").Sheets("Shipment Profile").Range("C" & a + 11 & ":BE" & a + 11)
            row = Workbooks("STATISTIC.xlsm").Sheets("ROOTDATA").Range("a65536").End(xlUp).row + 1
            Workbooks("STATISTIC.xlsm").Sheets("ROOTDATA").Range("A" & row & ":BC" & row) = data
        Else
            updatedShipment = updatedShipment + 1
            data = Workbooks("Output.xls").Sheets("Shipment Profile").Range("C" & a + 11 & ":BE" & a + 11)
            Workbooks("STATISTIC.xlsm").Sheets("ROOTDATA").Range("A" & Index + 1 & ":BE" & Index + 1) = data
        End If

Next a
end sub
Avatar billede iver_mo Nybegynder
30. september 2011 - 08:53 #1
Vi starter lige med dine variabler:

[i]"Pay Attention To Variables Declared With One Dim Statement

VBA allows declaring more than one variable with a single Dim statement. I don't like this for stylistic reasons, but others do prefer it. However, it is important to remember how variables will be typed. Consider the following code:

Dim J, K, L As Long
You may think that all three variables are declared as Long types. This is not the case. Only L is typed as a Long. The variables J and K are typed as Variant. This declaration is functionally equivalent to the following:

Dim J As Variant, K As Variant, L As Long"[i]

Taget fra: http://www.cpearson.com/excel/DeclaringVariables.aspx

Prøv at ændre dine dim statements og se om det afhjælper problemet.

Hvilken fejl får du?
Avatar billede sbmoller Nybegynder
30. september 2011 - 10:59 #2
Jeg har i mellemtiden fundet svaret. Det der skete var at der et eller andet sted ,blandt mine 17.000 rows X 20 kolonner dvs. 340.000 celler, var ét "=" tegn i én af cellerne som smadrede hele mit program. Så det = tegn er fjernet nu og så kører det som en drøm.

Men tak for info omkring variables, har før hørt myter om at det vidst ikke var en ok måde at declare på - uden at vide hvorfor. Nu ved jeg det, så tak, du må gerne sende et svar.
(jeg synes dog at definerer man en variabel af gangen kommer det til at fylde såå meget :/)
Avatar billede sbmoller Nybegynder
29. november 2011 - 06:23 #3
svar
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
Kurser inden for grundlæggende programmering

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