Avatar billede olsen205 Nybegynder
19. august 2005 - 10:18 Der er 9 kommentarer og
1 løsning

VBA: Hvad gør jeg når jeg har et udtræk på mere en 65536 linjer.

Jeg har følgende program script som henter data i min SQL database. Hvad gør jeg hvis jeg ønsker at udtrækket skal fortsætte i et andet ark?

Dim rs As New ADODB.Recordset

rssql = "SELECT e_krdopl.navn1 AS Navn, e_krdsum.kontonr AS Kontonummer, Sum(e_krdsum.valbelob) AS Valutabeløb, e_krdsum.valuta AS Valuta " + _
        "FROM e_krdsum INNER JOIN e_krdopl ON e_krdsum.kontonr = e_krdopl.levnr " + _
        "WHERE (((e_krdsum.periode)>='" & [Primo] & "' And (e_krdsum.periode)<='" & [Aktuel_Periode] & "') AND ((e_krdopl.aktiv)=""j"")) " + _
        "GROUP BY e_krdopl.navn1, e_krdsum.kontonr, e_krdsum.valuta "


rs.Open rssql, "File Name=N:\BJO\UDL\WebLimes.udl"
Sheets("Saldo").Cells.Delete

If Not rs.EOF Then
    With Sheets("Saldo").[a1]
        For Each Felt In rs.Fields
        .Offset(0, i) = Felt.Name
        i = i + 1
        Next
        .Resize(1, rs.Fields.Count).Font.Bold = True
        .Offset(1, 0).CopyFromRecordset rs
        .Resize(1, rs.Fields.Count).EntireColumn.AutoFit
    End With
End If
rs.Close
Set rs = Nothing
Avatar billede sjap Praktikant
19. august 2005 - 11:22 #1
Noget i den her retning må kunne gøre det:

Arktæller = 0
ArkNavn="Saldo"
If Not rs.EOF Then
    If i >=65536 then
        Arktæller = Arktæller + 1
        ArkNavn = "Saldo" & Arktæller
    end if
    With Sheets(ArkNavn).[a1]
        For Each Felt In rs.Fields
        .Offset(0, i) = Felt.Name
        i = i + 1
        Next
        .Resize(1, rs.Fields.Count).Font.Bold = True
        .Offset(1, 0).CopyFromRecordset rs
        .Resize(1, rs.Fields.Count).EntireColumn.AutoFit
    End With
End If
Avatar billede olsen205 Nybegynder
19. august 2005 - 11:32 #2
Det virker desværre ikke... Den kan godt kører scriptet, men den indsætter ikke de resterende data i det næste ark.
Avatar billede sjap Praktikant
19. august 2005 - 11:35 #3
Nåh, ja der var jo den lille "bøf", at "i" jo også skal nulstilles:

Arktæller = 0
ArkNavn="Saldo"
If Not rs.EOF Then
    If i >=65536 then
        Arktæller = Arktæller + 1
        ArkNavn = "Saldo" & Arktæller
        i = 0
    end if
    With Sheets(ArkNavn).[a1]
        For Each Felt In rs.Fields
        .Offset(0, i) = Felt.Name
        i = i + 1
        Next
        .Resize(1, rs.Fields.Count).Font.Bold = True
        .Offset(1, 0).CopyFromRecordset rs
        .Resize(1, rs.Fields.Count).EntireColumn.AutoFit
    End With
End If
Avatar billede sjap Praktikant
19. august 2005 - 11:37 #4
Og de ark som den forsøger at sætte data ind i SKAL (hvis man bruger ovenstående) hedde:

Saldo, Saldo2, Saldo3 osv.
Avatar billede olsen205 Nybegynder
19. august 2005 - 11:49 #5
Det virker fortsat ikke, det skyldes jo at I er et udtryk for kolonne nummeret, det vi ønsker den skal styre er jo række nummeret...
Avatar billede sjap Praktikant
19. august 2005 - 11:57 #6
OK. Det havde jeg lige misforstået. Jeg troede den var en del af en løkke der overførte data. Det kan jeg godt se nu, at det ikke er. Min ide her dur faktisk slet ikke, da der ikke er nogen direkte kontrol med rækkerne.

Prøver lige at se om jeg kan finde en anden mulighed. Vender måske tilbage ;0)
Avatar billede sjap Praktikant
19. august 2005 - 12:12 #7
Den her er lidt beskåret, men prøv lige om den virker - Så kan vi altid tilpasse detaljerne bagefter.

Arktæller = 0
While Not Rs.EOF
    Worksheets.Add
    Arktæller = Arktæller + 1
    ActiveSheet.Name = "Saldo" & Arktæller
    ActiveSheet.Range("B1").CopyFromRecordset Rs, 65536
Wend
Avatar billede olsen205 Nybegynder
19. august 2005 - 12:38 #8
Det virker der mangler bare at få tilføjet overskrifterne samt autofit kolonner..
Avatar billede olsen205 Nybegynder
19. august 2005 - 12:42 #9
Sub test()


Dim rs As New ADODB.Recordset

rssql = "SELECT m_operation.prodnr, m_operation.rflg, m_operation.aktiv, m_operation.plgrp AS Planlægningsgruppeoperation, m_belastning.plgrp AS Register, m_belastning.tekst1 AS Navn " + _
        "FROM m_operation LEFT JOIN m_belastning ON m_operation.plgrp = m_belastning.plgrp "



rs.Open rssql, "File Name=N:\BJO\UDL\WebLimes.udl"
Sheets("Saldo").Cells.Delete

If Not rs.EOF Then
    With Sheets("Saldo").[a1]
        For Each Felt In rs.Fields
        .Offset(0, i) = Felt.Name
        i = i + 1
        Next
        .Resize(1, rs.Fields.Count).Font.Bold = True
        .Offset(1, 0).CopyFromRecordset rs
        .Resize(1, rs.Fields.Count).EntireColumn.AutoFit
    End With
End If

Arktæller = 0
While Not rs.EOF
    Worksheets.Add
    Arktæller = Arktæller + 1
    ActiveSheet.Name = "Saldo" & Arktæller
    ActiveSheet.Range("A1").CopyFromRecordset rs, 65536
Wend
rs.Close
Set rs = Nothing

End Sub

Således ser det ud.. På den første side er overskrifterne, så det er fint..

Hvis du smider et svar skal du få dine point..
Avatar billede sjap Praktikant
19. august 2005 - 12:43 #10
OK :0)
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
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

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