1

ここに、大量のファイルをExcelファイルに出力するVBAコードがあります。私の質問は、これから、Excelファイルを少しフォーマットするための方法はありますか?私がやりたいのは、列を太字にし、列をヘッダーのサイズにも合わせるようにすることです。

Sub OutPutXL()


Dim qdf As QueryDef
Dim rs As DAO.Recordset

Set qdf = CurrentDb.QueryDefs("OutputStudents")
Set rs = CurrentDb.OpenRecordset("Teachers")

Do While Not rs.EOF
qdf.SQL = "SELECT * FROM Students WHERE contact='" & rs!contact & "'"

''Output to Excel
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel8, _
qdf.Name, "C:\Users\chrisjones\Documents\ProjectionsFY14\Teachers\" _
& rs!contact & ".xls", True
rs.MoveNext
Loop

End Sub
4

4 に答える 4

2

これはPhil.Wheelerのコードと私の以前の入力の迅速で汚い組み合わせです。私にとってこれは機能しています。Access-MacroにExcelのオブジェクトライブラリを追加することを忘れないでください。

Sub doWhatIWantTheDirtyWay()

pathToFolder = "C:\Users\Dirk\Desktop\myOutputFolder\"
scaleFactor = 0.9

Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = False
objExcel.DisplayAlerts = False

Set objFso = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFso.GetFolder(pathToFolder)

For Each objFile In objFolder.Files
    If objFso.GetExtensionName(objFile.path) = "xls" Then
         Set objWorkbook = objExcel.Workbooks.Open(objFile.path)
         For Each sh In objWorkbook.Worksheets

            If sh.UsedRange.Address <> "$A$1" Or sh.Range("A1") <> "" Then
                With sh
                    columncount = .Cells(1, 256).End(xlToLeft).Column
                    For j = 1 To columncount

                        With .Cells(1, j)
                            i = Len(.Value)
                            .ColumnWidth = i * scaleFactor
                            .Font.Bold = True
                        End With
                    Next
                End With
            End If
         Next
         objWorkbook.Close True
    End If
Next

objExcel.Quit



End Sub
于 2013-01-18T14:45:07.803 に答える
1

私もこの問題に数回遭遇しました。@Remouが言ったように、xlsファイルをフォーマットするにはExcelを開く必要があります。コードをこのように変更すると、Excelがサイレントに開き、正しい方向に進むはずです。VBAプロジェクトにMicrosoftExcelオブジェクトライブラリへの参照を追加することを忘れないでください。

Sub OutPutXL()
Dim qdf As QueryDef
Dim rs As DAO.Recordset
Dim xl as Excel.Application
Dim wb as Object
Dim strFile as string

Set qdf = CurrentDb.QueryDefs("OutputStudents")
Set rs = CurrentDb.OpenRecordset("Teachers")
Set xl = New Excel.Application
xl.DisplayAlerts = False

Do While Not rs.EOF
    qdf.SQL = "SELECT * FROM Students WHERE contact='" & rs!contact & "'"

    'Output to Excel
    strFile = "C:\Users\chrisjones\Documents\ProjectionsFY14\Teachers\" & rs!contact & ".xls"
    DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel8, qdf.Name, strFile, True

    'Start formatting'
    Set wb = xl.Workbooks.Open(strFile)
    With wb.Sheets(qdf.name)
        'Starting with a blank excel file, turn on the record macro function'
        'Format away to hearts delight and save macro'
        'Past code here and resolve references'
    End With
    wb.save
    wb.close
    set wb = Nothing
    rs.MoveNext
Loop
xl.quit
set xl = Nothing
End Sub
于 2013-01-21T01:04:03.657 に答える
1

はい、可能です!これは私のコードの1つから一緒にハッキングされており、機能する前に少し編集する必要があるかもしれません...

'This deals with Excel already being open or not
On Error Resume Next
Set xl = GetObject(, "Excel.Application")
On Error GoTo 0
If xl Is Nothing Then
  Set xl = CreateObject("Excel.Application")
End If

Set XlBook = GetObject(filename)
'filename is the string with the link to the file ("C:/....blahblah.xls")

'Make sure excel is visible on the screen
xl.Visible = True
XlBook.Windows(1).Visible = True
'xl.ActiveWindow.Zoom = 75

'Define the sheet in the Workbook as XlSheet
Set xlsheet1 = XlBook.Worksheets(1)

'Then have some fun!
with xlsheet1
    .range("A1") = "some data here"
    .columns("A:A").HorizontalAlignment = xlRight
    .rows("1:1").font.bold = True
end with

'And so on...
于 2013-06-26T10:47:30.540 に答える
0

(ファイルの数に応じて)出力するファイルごとにテンプレートを作成できます。長期的には、誰かがフォーマットを変更する必要がある場合は、テンプレートを変更できます。これにより、Excelのフォーマットのゴミをふるいにかける必要がなくなります。資格のあるエンドユーザーにそれを行わせることもできます。

私が責任を持ってVBAを作成した場合、それは私がExcelシートで抱える最大の問題の1つです。このように(理論的には)、データの出力方法を変更せずに、あなたなしで表示される列を変更できるはずです。

+1ただし、Excelファイル自体を開き、その自動化を使用してフォーマットします。

于 2013-01-22T13:39:13.847 に答える