Microsoft Access Club Access超初心者対象Forum Access初級者対象Forum Access初・中級者対象Forum Access VBA Tips Forum DAO、ADO、SQL Forum

     

リストへもどる

投稿記事の一括表示

タイトルDAOで一行出力
記事No10855
投稿日: 2017/04/12(Wed) 14:28
投稿者ケバブ
解決済: ON
OS:Windows7
Access Version:2010

Access VBAでADOで「エクスポート999」というテーブルがあり、フィールドが1〜16の16個あり全てつなげて一行出力をしたいです。下記のやつでは1列は出力できるのですが2〜15列は出力できません。100行以上あります。
どこをどんな風にすれば2〜15列も出力出来るのでしょうか?
宜しくお願い致します。
Sub 実行()
一行出力 "エクスポート999", "テスト"
End Sub
Sub 一行出力(エクスポート999 As String, test As String)
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim fld As Field
Dim Tmp As String
Dim SW As Boolean

Set db = CurrentDb
Set rs = db.OpenRecordset(エクスポート999)
Set fld = rs.Fields("1")



Open Application.CurrentProject.Path & "\一行出力.txt" For Output As #1
SW = True
If rs.EOF = False Then
Do Until rs.EOF
If SW Then
Tmp = fld
SW = False
Else
Tmp = Tmp & " " & fld
End If
rs.MoveNext

Loop
End If
Print #1, Tmp
Close #1
db.Close
MsgBox Application.CurrentProject.Path & "\一行出力.txt として書き出しました。"
End Sub

タイトルRe: DAOで一行出力
記事No10856
投稿日: 2017/04/12(Wed) 17:13
投稿者hatena
解決済: ON
下記のコードで、フィールド1〜5まではつなげて出力できます。
コードの意味が理解できれば、16までつなげるのは簡単ですよね。
 

Sub 一行出力(エクスポート999 As String, test As String)
    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Dim Tmp As String
    Dim SW As Boolean


    Set db = CurrentDb
    Set rs = db.OpenRecordset(エクスポート999)


    Open Application.CurrentProject.Path & "\一行出力.txt" For Output As #1
    SW = True
    If rs.EOF = False Then
        Do Until rs.EOF
            If SW Then
                Tmp = rs.Fields("1") & rs.Fields("2") & rs.Fields("3") & rs.Fields("4") & rs.Fields("5")
                SW = False
            Else
                Tmp = Tmp & " " & rs.Fields("1") & rs.Fields("2") & rs.Fields("3") & rs.Fields("4") & rs.Fields("5")
            End If
            rs.MoveNext

        Loop
    End If
    Print #1, Tmp
    Close #1
    db.Close
    MsgBox Application.CurrentProject.Path & "\一行出力.txt として書き出しました。"
End Sub

タイトルRe: DAOで一行出力
記事No10857
投稿日: 2017/04/12(Wed) 17:16
投稿者tkawn
解決済: ON
> Access VBAでADOで
DAOですね。
GetRows メソッドhttps://msdn.microsoft.com/ja-jp/library/office/ff194427.aspx
はどうでしょうか?

Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim intF As Integer, intR As Integer
Dim varRcord As Variant
Dim Tmp As String

Set db = CurrentDb
Set rs = db.OpenRecordset(エクスポート999)

Open Application.CurrentProject.Path & "\一行出力.txt" For Output As #1

varRecord = GetRows(rs)

 For intR = 0 To Ubound(varRecord, 1)

  For intF = 0 To UBound(varRecord, 2)
    Tmp = Tmp & " " & varRecord(intF,intR)
   Next IntF
   
  Tmp = Tmp & vbCrLf
 Next intR

Tmp = Mid$(Tmp, 2)

Print #1, Tmp
Close #1
db.Close
MsgBox Application.CurrentProject.Path & "\一行出力.txt として書き出しました。"
End Sub

タイトルRe: DAOで一行出力
記事No10858
投稿日: 2017/04/13(Thu) 01:26
投稿者hatena
解決済: ON
前の回答が理解できたら、
& でフィールドを連結するのは冗長なので、
下記のようにする方法も学習するといいでしょう。

Sub 一行出力(エクスポート999 As String, test As String)
    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Dim Tmp As String
    Dim i As Long

    Set db = CurrentDb
    Set rs = db.OpenRecordset(エクスポート999)


    Open Application.CurrentProject.Path & "\一行出力.txt" For Output As #1
    If rs.EOF = False Then
        Do Until rs.EOF
            Tmp = Tmp & " "
            For i = 0 To rs.Fields.Count - 1
                Tmp = Tmp & rs.Fields(i)
            Next
            rs.MoveNext
        Loop
    End If
    Tmp = Mid$(Tmp, 2)
    Print #1, Tmp
    Close #1
    db.Close
    MsgBox Application.CurrentProject.Path & "\一行出力.txt として書き出しました。"
End Sub

タイトルRe^2: DAOで一行出力
記事No10859
投稿日: 2017/04/13(Thu) 11:06
投稿者ケバブ
解決済: ON
皆様出来ました。
ありがとうございました。

- 以下のフォームから自分の投稿記事を修正・削除することができます -
処理 記事No パスワード

ページの先頭へ 前ページへ戻る