Avatar billede zalam Nybegynder
14. december 2009 - 21:28 Der er 2 kommentarer og
1 løsning

VBA kan ikke finde rundt i åbne ark?

Jeg har følgende kode, men VBA kan ikke finde rundt i arkene. Derfor blvier mine tællere helt i skoven. bl.a. "antalhandler" og antalkunder bliver forkerte. 
Kan ikke selv finde fejlen. Man ku foresteille mig det er noget med activate sheet???



Option Explicit

Private Sub main()

'vi deklarer vores  array, vi laver et statistik med 101 pladser da det må være rigeligt!
Dim projektmapper1(100) As String, Projektmapper2(100) As String
Dim sti1 As String, sti2 As String
Dim fil1 As String, fil2 As String
Dim sti11 As String, sti22 As String
Dim x As Integer, y As Integer
Dim tal1 As Integer, tal2 As Integer
Dim salg As Workbook
Dim valuta As Workbook


'vi deklarer stien til salgsdata filerne
sti1 = ThisWorkbook.Path & "\data\salgsdata\"
'deklarer filerne som skal indlæses
fil1 = Dir(sti1)
'indlæser filer indtil filnavn er tomt
Do While fil1 <> ""
'indlæser til array'et
  projektmapper1(tal1) = fil1
  'sætter tæller på
  tal1 = tal1 + 1
  'gentages for de øvrige matchende filer
  fil1 = Dir
Loop

sti2 = ThisWorkbook.Path & "\data\valutakurser\"
fil2 = Dir(sti2)
Do While fil2 <> ""
  Projektmapper2(tal2) = fil2
  tal2 = tal2 + 1
  fil2 = Dir
Loop

For x = 0 To tal1 - 1
For y = 0 To tal2 - 1
If Mid(projektmapper1(x), 11, 4) = Mid(Projektmapper2(y), 7, 4) Then 'ret til 9 hvis Excel7

sti11 = Left(sti1, Len(sti1))
sti22 = Left(sti2, Len(sti2))

Set salg = Workbooks.Open(sti11 & projektmapper1(x))
Set valuta = Workbooks.Open(sti22 & Projektmapper2(y))


Call udregn_dk(salg, valuta)

Workbooks(projektmapper1(x)).Close SaveChanges:=True
Workbooks(Projektmapper2(y)).Close SaveChanges:=True
End If
Next
Next

End Sub


'denne sub udregner alle beløb til danske kroner
Private Sub udregn_dk(ByRef salg As Workbook, valuta As Workbook)

Dim Kunder As Range
Dim KundeID As Integer
Dim Valuta2 As Range
Dim beløb As Currency
Dim antalKunder As Integer
Dim antalhandler As Integer
Dim i As Integer
Dim v As Integer
Dim dato As Date
Dim måned As Integer
Dim antalvalutaer As Integer
Dim omregnetbeløb As Currency


antalKunder = Workbooks.Open("kundevaluta").Worksheets("Kundevalutaer").UsedRange.Rows.Count

With salg
antalhandler = Range("a2").CurrentRegion.Rows.Count

End With

With salg
'kører en løkke for hver handel
    For i = 1 To antalhandler
    'finder kundeID, dato for køb, og beløbet
    KundeID = Range("B1").Offset(i, 0)
    dato = Range("B1").Offset(i, -1)
    beløb = Range("B1").Offset(i, 1)
    'tager det 4 ciffer, som er der måned er angivet og 2 cifre, dvs "01" til "12", ved "01" returneres 1
    måned = Mid(dato, 4, 2)
'går tilbage til wb med kundedata
End With


With Kunder

'finder den valuta som kunden handler i
Set Valuta2 = .Find(What:=KundeID).Offset(0, 1)
'hvis det er danske kroner er det ikke nødvendigt at omregne og derfor udskrives beløbet med det samme
    If Valuta2 = "DKK" Then
    'når der handles i DKK, udskrives beløbet i cellen ved siden af
        With salg
       
        Range("B2").Offset(i, 2).Value = beløb 'kan der gøres noget, kører koden videre, kan det gøres hurtigere hvis det er i DKK??

        End With
 
    End If
   
End With
'går tilbage til valuta wb for at finde hvilken kurs der var for måneden med købet
With valuta
    '
'finder antal af forskellige valutaer som virksomheden handler i
antalvalutaer = Range("B2").Rows.End(xlDown).Count
    'kører en løkker der finder den valuta som der er handlet i
    For v = 1 To antalvalutaer
        'hvis ISO koden er den samme som valutaen gåes der videre og udregner beløbet
        If Range("B2").Offset(v, 0) = Valuta2 Then
   
        omregnetbeløb = Range("B2").Offset(v, måned) * beløb / 100
            'går tilbage til salgs WB for at udskrive det omregnede beløb
            With salg
            'for at være sikker på at få den rigtige handel skal de oprindelige data overholdes før der må udskrives et beløb
            If Range("B2").Offset(i, 0) = KundeID And Range("B2").Offset(i, -1) = dato And Range("B2").Offset(i, 1) = beløb Then
            'udskriver det omregnede beløb
            .Offset(i, 2).Value = omregnetbeløb
   
            End If
   
            End With
       
        End If
    Next

End With
Next

End With

'With salg
'
'
'.Offset(0, 2).Value = "Omregnet beløb"
'.Offset(0, 2).Font.Bold = True
'.Offset(0, 2).Borders.LineStyle = xlThick
'Columns.AutoFit
'End With
'save changes for arket

End Sub
Avatar billede zalam Nybegynder
14. december 2009 - 21:29 #1
Det skal bemærkes koden, som regner beløbet ud virker fint, for 2 enkelte ark.. altså hvis jeg vælger et 2 faste ark, som åbnes og ikke "dynamiske"..
Avatar billede zalam Nybegynder
14. december 2009 - 22:37 #2
Kunne forestille mig det er et problem med at jeg vil sætte det åbne ark til en objekt variabel..

Nogle råd til hvordan jeg gøre dette?

For y = 0 To tal2 - 1
If Mid(projektmapper1(x), 11, 4) = Mid(Projektmapper2(y), 7, 4) Then 'ret til 9 hvis Excel7

sti11 = Left(sti1, Len(sti1))
sti22 = Left(sti2, Len(sti2))

Set salg = Workbooks.Open(sti11 & projektmapper1(x))
Set valuta = Workbooks.Open(sti22 & Projektmapper2(y))
Avatar billede zalam Nybegynder
15. december 2009 - 10:55 #3
Prblem løst..
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