|
初めて投稿します。
以下の様な項目をもつテーブルをEXCELに出力しようとしており
ADOを利用して追加出力しようとしているのですが
参照中に並び位置が変わってしまいます。
<ACCESSのテーブル項目の並び>
[順] [BBBB] [AAAA] [DDDD] [CCCC]
<収集された際の項目の並び>
[AAAA] [BBBB] [CCCC] [DDDD] [順]
定義を与えて固定にしてしまえば一応は解決しますが、それですと今後フィールドの増減が発生した場合
VBA側でもテーブル定義の修正が入るので出来れば避けたいと思っています。
どの様にしたら取得の順番がACCESSのテーブル項目の順番で取得されるのでしょうか?
それとも変えられないものなのでしょうか?
------------------------------------------------------
Function EXCEL()
'/参照設定 Microsoft ActiveX Data object 2.0 Library /
'-----------------------------------
Const csTbl As String = "OutPut" 'Accessテーブル名
Dim voCn As ADODB.Connection
Dim vvArryFldName As Variant 'フィールド名用配列
Dim vvRet As Variant
vvRet = SysCmd(acSysCmdSetStatus, "Accessフィールド名取得中......")
vvArryFldName = FnGetArrayFldName(csTbl)
DoEvents
End Function
'-----------------------------------
Private Function FnGetArrayFldName(argsTblName As String) As String()
Dim voRs As ADODB.Recordset
Dim vsArryFldName() As String
Dim i As Long
Set voRs = CurrentProject.Connection _
.OpenSchema(Schema:=adSchemaColumns, _
Restrictions:=Array(Empty, Empty, argsTblName, Empty))
i = 0
Do Until voRs.EOF '繰り返し 開始 -----------------------------
ReDim Preserve vsArryFldName(i)
vsArryFldName(i) = voRs![COLUMN_NAME].Value 'ソートされて格納されてしまう箇所
Debug.Print vsArryFldName(i) 'デバック結果
i = i + 1
voRs.MoveNext '次のレコードへ
Loop ' 繰り返し 終了 -------------------------------------------
FnGetArrayFldName = vsArryFldName
voRs.Close: Set voRs = Nothing
End Function
-----------------------------------
|
|