2

プログラムの最後の部分を書き込もうとしていますが、Access ドキュメントからデータを取得して新しいブックに出力する必要があります。

まず、製品サプライヤーの名前を取得し、各サプライヤー名でワークシートを作成します。次に、各シートをループして、注文された各サプライヤーからの製品を印刷します。

新しいワークブックを開いて自分の情報を印刷する方法に頭を悩ませています。

4

4 に答える 4

7

以前の回答が削除されたため (「不十分」と見なされた)、より良い回答を提供する必要があります。

Access から Excel にデータを出力する場合は、次の手順に従う必要があります。

  1. 新しいワークブックを作成 (または開く)
  2. データを読み取る
  3. ワークブックにデータを書き込む
  4. ブック内のデータの書式を設定する

データ出力に焦点を当て、書式設定は省略します (データ部分は複雑なものです...書式設定は簡単です)

最初に、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 が親切にもコメントに移動してくれました)。

これがお役に立てば幸いです

于 2012-09-04T17:33:01.733 に答える
1
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
于 2013-01-28T10:02:23.290 に答える
0

あなたは多くの詳細を教えてくれないので、私はあなたに多くの詳細を返すことはできません. しかし、これが私がそれを行う方法です:

  1. 2 つのシートで新しいワークブックを手動で作成する
  2. 1 つのシートに、SELECT SupplierName FROM tblSuppliers WHERE Active=True のようなサプライヤー名のリストを返す外部データ テーブルを追加します。またはそのようなもの。
  3. そのクエリ テーブルで動的に拡張されるワークブック レベルの名前付き範囲を作成する
  4. 2 番目のシートで、SELECT * FROM Orders WHERE SupplierName=? のような外部データ テーブルを追加します。(これはパラメーター クエリになります)。その外部データ テーブルを行 3 から開始します。
  5. 私は漕いで、サプライヤーリストを指すコンボボックスボックスを置きます.

今VBAは簡単です

ThisWorkbook.RefreshAll

仕入先ごとに 1 つのシートではなく、仕入先を変更できるシートが 1 つあります。必要なスキルはこちら

  • 外部データ テーブルを作成する
  • パラメータ クエリを作成します (旧リファレンスhttp://www.dicks-clicks.com/excel/ExternalData6.htm ) 。
  • 動的に拡張する範囲名を作成する
  • 別のシートの範囲を指すコンボボックスまたはデータ検証を追加する
  • 上記のSQLは明らかに正しくありませんが、正しいSQLステートメントを記述できると思います

そのすべての詳細を見つけることができるはずですが、そうでない場合は、別の質問を投稿してください。

于 2012-09-04T18:06:13.220 に答える
0

列/行の幅を静的なピクセル量または自動調整に定義できます。太字などは事前に定義されています

Selection.Font.Bold = True

テンプレート スプレッドシートを作成し、内容をテンプレートにコピーして名前を付けて保存することもできます。あなたの投稿は、実際にどれだけのフォーマットを行う必要があるかを示していません。

于 2012-09-04T16:47:22.323 に答える