2

動的日付関数を使用して列ヘッダー、したがってフィールド名を生成するクロス集計クエリがあります。例: ForecastPeriod:DateAdd("m",[Period],[StartDate]) これは、クロス集計クエリを実行するたびに、異なるフィールド名になる可能性があることを意味します。このクロス集計の結果を取得し、他の 3 つの同様のクロス集計の結果と組み合わせて、新しいテーブルを作成する必要があります。現在、テーブル作成クエリと 3 つの追加クエリを使用しています。これを行う理由は、予測期間の範囲にわたって、材料項目ごとに 4 つの異なるカテゴリのデータを含めるためです。

結果は次のようになります。

材料区分 1 あたりの値 ...2 あたりの値 ......24 あたりの値

MatA デマンド 0 ... 10 ... 0

MatA デマンド ドル $0 ... $10 ....... $0

MatA 予報 10 ... 20 ... 50

MatA 予測ドル $10 ... $20 ....... $50

問題は、現在のクロス集計クエリの結果に対してテーブル作成クエリが既に作成されていることです。来月クロス集計を実行すると、結果のフィールド名が異なります。そのため、テーブル作成クエリの設計で期間を手動で変更し、結果に含まれなくなった期間を削除して、新しい期間を追加することに行き詰まっています。

クロス集計が実行されるまでフィールド名を知らなくても、VBA を使用して新しいテーブルを作成する方法はありますか?

または、フィールド名をコード化する方法や、実行後にクロスタブから取得する方法はありますか?

次のようなコードを使用する場合: strSQL = "SELECT tblForecast.Material, tblForecast.Category, tblForecast.X " & _ "INTO tblTemp " & _ "FROM tblForecast;"

tblForecast.X が実際に何と呼ばれるかは本当にわかりません。11/1/08 または 12/1/08 などの可能性があります。

フィールド名を保持する変数を宣言し、日付コードを使用して変更する場合、それをテーブルに追加するにはどうすればよいですか? Alter Table を使用しますか?

私はこれができると確信しています、私はそれを行う方法について頭を悩ませることができないので、どんな助けも大歓迎です!! ありがとう!

4

2 に答える 2

2

クエリの列をミラーリングするテーブルを作成する VBA:

Dim db As DAO.Database
Dim tdf As DAO.TableDef
Dim qdf As DAO.QueryDef
Dim fld As DAO.Field
Dim SourceField As DAO.Field

Set db = CurrentDb

'Create a new tabledef
Set tdf = New DAO.TableDef

'Reference existing, saved querydef
Set qdf = db.QueryDefs("Query1")

tdf.Name = "Table2"

'iterate fields in the query and create fields in the new tabledef
For Each SourceField In qdf.Fields
    Set fld = tdf.CreateField(SourceField.Name, SourceField.Type, SourceField.Size)
    tdf.Fields.Append fld
Next

'Table is created and saved when the tabledef is appended to the current db
db.TableDefs.Append tdf
于 2008-11-21T20:51:49.123 に答える
1

クロス集計に独自の見出しを使用することができます。次に例を示します。

ColHead:"Month" & DateDiff("m",[SaleDate],Forms!frmForm!txtSomeDate)

これにより、「Month」と呼ばれる列見出しとtxtSomeDateからのオフセット番号が生成されます。

vbaを使用して新しいクエリを作成することもできます。

于 2008-11-20T11:06:38.803 に答える