Avatar billede mundt Nybegynder
07. december 2004 - 14:52 Der er 2 løsninger

Automatisk justering af feltbredde

Jeg bruger docmd.transferSpreadsheet i nedenstående script til at eksportere indholdet fra en tabel til ca. 40 regneark. Det virker fint, men kan man på nogen simpel måde justere kolonnebredden i excel så hele indholdet i de enkelte felter ses. Yderligere kunne jeg godt tænke mig at det man skriver ud fra excel, udskrives med rammer/skelet. Grunden til at jeg skriver så mange regneark ud er at de skal sendes pr. mail og man skal kunne se hvem (dvs. organisationsnavnet) de skal sendes til på filnavnet.

Sub eksportToExcel()

    Dim cn As ADODB.Connection
    Dim rsInst As ADODB.Recordset
    Dim rsInstUsers As ADODB.Recordset
    Dim rsInstBrugere As ADODB.Recordset
   
    Dim strSQL As String
    Dim strFileName As String
   
    Set rsInst = New ADODB.Recordset
    Set rsInstUsers = New ADODB.Recordset
    Set rsInstBrugere = New ADODB.Recordset
     
    Set cn = New ADODB.Connection
    Set cn = CurrentProject.Connection
   
    rsInst.Open "qryRapportgrundlagTilBrugerOprydningInstitutioner", cn, adOpenKeyset, adLockOptimistic
    cnt = 1

    Do Until rsInst.EOF

        strSQL = "SELECT qryRapportgrundlagTilBrugerOprydning.[CPR Nummer], qryRapportgrundlagTilBrugerOprydning.Brugernavn, qryRapportgrundlagTilBrugerOprydning.Fornavn, qryRapportgrundlagTilBrugerOprydning.Efternavn, qryRapportgrundlagTilBrugerOprydning.Afdelingsnavn FROM qryRapportgrundlagTilBrugerOprydning WHERE (((qryRapportgrundlagTilBrugerOprydning.Institutionsnavn) Like '" & rsInst![Institutionsnavn] & "'));"
        rsInstUsers.Open strSQL, cn, adOpenKeyset, adLockOptimistic
        rsInstBrugere.Open "tblBrugere", cn, adOpenKeyset, adLockOptimistic
       
        Do Until rsInstUsers.EOF
            rsInstBrugere.AddNew
           
            rsInstBrugere![CPRNummer] = rsInstUsers![CPR Nummer]
            rsInstBrugere![Brugernavn] = rsInstUsers![Brugernavn]
            rsInstBrugere![Fornavn] = rsInstUsers![Fornavn]
            rsInstBrugere![Efternavn] = rsInstUsers![Efternavn]
            rsInstBrugere![Afdeling] = rsInstUsers![Afdelingsnavn]
            rsInstBrugere![Status] = ""
           
            rsInstBrugere.MoveNext
            rsInstUsers.MoveNext
        Loop
       
        strFileName = "c:\" & CStr(rsInst![Institutionsnavn]) & ".xls"
       
        DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "tblBrugere", strFileName
        rsInstBrugere.Close
        rsInstUsers.Close
        DoCmd.SetWarnings False
        DoCmd.RunSQL "DELETE FROM tblBrugere;"
        DoCmd.SetWarnings True
        rsInst.MoveNext
    Loop

    rsInst.Close
    cn.Close
               
End Sub
Avatar billede terry Ekspert
07. december 2004 - 18:56 #1
When you transfer data from Access to Excel using TransferSpreadsheet then you have very little control over Excel. To do that would require automating Excel and writing data directly into the cells. Then you could do almost anything you like.
Avatar billede mugs Novice
07. december 2004 - 23:03 #2
Jeg bruger denne, og som terry påpeger, kontrollerer jeg Excel fra Access. Benærk linien:
wkb.Worksheets("Ark1").UsedRange.Columns.AutoFit
som automatisk tilpasser kolonnebredden i Excel

Dim Obvar As Object, wkb As Object, Rst As Recordset
Dim i As Integer, Felt1 As Integer, Felt2 As Integer
Set Rst = DBEngine.Workspaces(0).Databases(0).OpenRecordset("temp", dbOpenTable)
Set Obvar = CreateObject("excel.application")
Obvar.Visible = True
Set wkb = Obvar.Workbooks.Add
wkb.Worksheets("Ark1").Cells(1, 1).Value = "Felt 2"
wkb.Worksheets("Ark1").Cells(1, 2).Value = "Felt 1"
For i = 2 To Rst.RecordCount + 1
wkb.Worksheets("Ark1").Cells(i, 1).Value = Str$(Rst.Fields![Felt2])
wkb.Worksheets("Ark1").Cells(i, 2).Value = Str$(Rst.Fields![Felt1])
Rst.MoveNext
Next
wkb.Worksheets("Ark1").Cells(Rst.RecordCount + 2, 2).Value = Tek
wkb.Worksheets("Ark1").UsedRange.Columns.AutoFit
Set Obvar = Nothing
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
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

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