Access -> Excel, Import (VBA)

Tråden skapades och har fått 3 svar. Det senaste inlägget skrevs .
1

Hej, skall utforma ett Excel-dokument genom att ha en mall som jag sedan utgår ifrån när jag hämtar data från en Access-databas. Jag använder följande skript för att hämta den data jag behöver, vilken läggs i ett ”recordset”.

Sub DAOCopyFromRecordSet(DBFullName As String, TableName As String, _
    FieldName As String, TargetRange As Range)
        
Dim db As Database
Dim rs As Recordset
Dim intColIndex As Integer

    Set TargetRange = TargetRange.Cells(1, 1)
    Set db = OpenDatabase(DBFullName)
    
    Set rs = db.OpenRecordset("SELECT * FROM " & TableName, dbReadOnly) ' Hämta Data

    ' write field names
    For intColIndex = 0 To rs.Fields.Count - 1
    
        TargetRange.Offset(0, intColIndex).Value = rs.Fields(intColIndex).Name

    Next
    
    ' write recordset
    TargetRange.Offset(1, 0).CopyFromRecordset rs
    
    
    Set rs = Nothing
    db.Close
    Set db = Nothing
    
End Sub

Att kopiera in hela recordsettet, som består av flera kolumner och många rader, är inga problem men jag vill ha ökad kontroll. Som det ser ut nu är det raden ”TargetRange.Offset(1, 0).CopyFromRecordset rs” som gör det jobbet. Jag vill kunna dels,

1) Lägga in rad för rad. Dvs infoga raderna för att information i min mall skall ”skjutas ned” vid varje ny rad som infogas”.

2) Kunna välja i vilken kolumn informationen klistras in, som det ser ut nu blir det per automatik A,B,C,D etc. Jag vill kunna hoppa över kolumner för att detta skall passa in i min mall.

Ev. lösningar som jag ser är att t.ex. hämta ut respektive kolumn (med en passande SELECT) från databasen och lägga i en separat recordset, men tycker att detta är en fruktansvärt ful lösning! Vidare så löser det ju inte mitt ”infoga”-problem heller. Visst, kanske skulle kunna kolla hur många rader mitt recordset har och infoga si eller så många rader, men återigen är det en rätt ful lösning.

Hoppas att ni kan hjälpa mig med dessa bekymmer! Om inte annat kanske peka mig i rätt riktning All hjälp uppskattas. Programmerar inte så ofta VBA kanske det bör tilläggas, men nu visade det sig väldigt nödvändigt!

Vad sägs om att du ändrar lite i Excel istället, om ingen har någon bättre ide?

Du kan ju ha ett blad till där den verkliga mallen är och det snutten ovan gör är att skjuta in data i ett blad som bara används för att lagra data som skall visas upp snyggt i din mall?

Exempel: Säg att du hämtar data från Access som skall bli en faktura i Excel, så du får tex kunduppgifter som adress mm, orderdatum och fakturans specifikation osv. Allt i varsina kolumner. I ditt andra blad i din template så har du beräkningsfunktioner i allting som tittar in i det andra excelarket med data och hämtar i dem? Kan det vara en workaround, om ingen annan har en bättre ide?

Det är en tanke jag klurat lite på. Problemet är att jag ändå måste infoga rad för rad för att ha kontroll hur själv importen går till! Får tänka på det men är rätt säker på att det går att lösa.

Hittade en metod GetRows.. kanske kan användas i syfte att plocka ut rader och "fields" från recordsettet? Inte fått styr på den dock... Jag avvaktar!

För att plocka ut data ur kolumner så har jag beskrivit hur man skriver referenser i denna tråd:

http://www.99.se/microsoft/241112-l-nka-kundregister-till-faktura-i-excel-2008-a.html

1
Bevaka tråden