プログラムの最後の部分を書き込もうとしていますが、Access ドキュメントからデータを取得して新しいブックに出力する必要があります。
まず、製品サプライヤーの名前を取得し、各サプライヤー名でワークシートを作成します。次に、各シートをループして、注文された各サプライヤーからの製品を印刷します。
新しいワークブックを開いて自分の情報を印刷する方法に頭を悩ませています。
以前の回答が削除されたため (「不十分」と見なされた)、より良い回答を提供する必要があります。
Access から Excel にデータを出力する場合は、次の手順に従う必要があります。
データ出力に焦点を当て、書式設定は省略します (データ部分は複雑なものです...書式設定は簡単です)
最初に、Access ファイルで Excel オブジェクトを有効にする必要があります: [ツール] メニュー > [参照]。Microsoft Excel 12.0 オブジェクト ライブラリを見つけて、チェックボックスを有効にします。これで、完全な Excel ライブラリが利用できるようになりました :-)
今こそデータ処理の時です。新しいワークブックを作成する必要があると仮定します。
public sub createExcelFile()
dim XL as Excel.Application, WB as Excel.Workbook, WKS as Excel.Worksheet
dim db as DAO.database, rec as DAO.recordset, f as DAO.field
dim i as integer, j as integer
' Prepare your Excel stuff
Set XL = new Excel.Application
XL.Visible = True
Set WB = XL.Workbooks.Add
WB.Activate
Set WKS = WB.ActiveSheet ' Default: The first sheet in the newly created book
' Read your data here
set db = currentdb()
set rec = db.openrecordset("tblSampleData")
' A simple table that will show the data from rec
' i and j will be the coordiantes of the active cell in your worksheet
with rec
.movefirst
' The table headers
i = 1
j = 1
for each f in .fields
WKS.cells(i,j).value = f.name
j = j + 1
next f
' The table data
do
i = i+1
j = 1
for each f in .Fields
WKS.cells(i,j).value = f.value
j = j+1
next f
.moveNext
loop until .EOF
end with
end sub
WKS.cells(i,j)
セルをフォーマットする場合は、 (またはWKS.range(...)
) プロパティを使用できます。
私が以前残したリンクを見てください (Siddarth Rout が親切にもコメントに移動してくれました)。
これがお役に立てば幸いです
Option Compare Database
Public Function format(filepath, sheetname)
Set xls = CreateObject("EXCEL.APPLICATION")
xls.screenupdating = False
xls.displayalerts = False
xls.Visible = True
xls.workbooks.Open filepath
Set xlsdd = xls.ActiveWorkbook
'ヘッダーを削除します
xls.Range("1:1").Select
xls.Selection.Delete Shift:=xlUp
'1列追加
xls.Columns("A:A").Select
xls.Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
'adding 5 rows
'ActiveWorkbook.Sheets("sheet1").Select
xls.Rows("1:5").Insert Shift:=xlDown
'アクセスから行を取得し、それらを Excel に入れます
strsql = "select top 5 " & sheetname & ".* into top5_records from " & sheetname
DoCmd.RunSQL strsql
outputFileName = "C:\Users\hp\Desktop\top5_records.xls"
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "top5_records", outputFileName, True
'次に、その Excel を開いて行をコピーします
Set xls2 = CreateObject("EXCEL.APPLICATION")
xls2.screenupdating = False
xls2.displayalerts = False
xls2.Visible = True
xls2.workbooks.Open outputFileName
Set xlsdd2 = xls.ActiveWorkbook
xls2.Rows("1:5").Select
xls2.Selection.Copy
xls.Cells(1, 1).Select
xls.activesheet.Paste
' Dim currdb As DAO.Database
' Dim rst As DAO.Recordset
'
' Set currdb = CurrentDb
' Set rst = currdb.OpenRecordset(strsql) '<<<Opens query recordset via DAO
' rst.MoveLast
' rowsToReturn = rst.RecordCount
' Set rng = xls.Cells(1, 1)
' 'copy specified number of records to worksheet
'
'rng.CopyFromRecordset rst, rowsToReturn '<<<Gets all records in recordset
'最初の 6 行目を太字にします
xls.Rows("6:6").Select
With xls.Selection.Font
.Bold = True
.Name = "Arial"
.Size = 10
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
End With
'データを自動調整します
xls.Sheets(sheetname).Cells.Columns.autofit
xls.CutCopyMode = False
With xlsdd
.Save
.Close
End With
xls.Visible = False
Set xlsdd = Nothing
Set xls = Nothing
End Function
あなたは多くの詳細を教えてくれないので、私はあなたに多くの詳細を返すことはできません. しかし、これが私がそれを行う方法です:
今VBAは簡単です
ThisWorkbook.RefreshAll
仕入先ごとに 1 つのシートではなく、仕入先を変更できるシートが 1 つあります。必要なスキルはこちら
そのすべての詳細を見つけることができるはずですが、そうでない場合は、別の質問を投稿してください。
列/行の幅を静的なピクセル量または自動調整に定義できます。太字などは事前に定義されています
例
Selection.Font.Bold = True
テンプレート スプレッドシートを作成し、内容をテンプレートにコピーして名前を付けて保存することもできます。あなたの投稿は、実際にどれだけのフォーマットを行う必要があるかを示していません。