0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ACCESS VBAでエクスポート操作の出力先パスを変更する(エクスポート定義ではない)

Posted at

ACCESS VBAで既存のエクスポート操作を使いたい場面で出力先の設定に苦戦したのでメモ

元の定義で<ImportExportSpecification Path="ここにパス" xmlns="urn:www.microsoft.com/office/access/imexspec">のようになっている場合以下のようにすると出力先パスを変更してエクスポート操作を指定できます。
・定義XMLの中身を確認するにはstrXML = Obj.XMLのところをデバッグ
・パスの指定箇所が上述のものと異なる構造な場合はprefix = newLine = の箇所を修正

Function main()
        ' エクスポート操作の名前を指定
        Dim strExportName  As String
        strExportName = "エクスポート操作の名前"
        Set Prj = CurrentProject
        
        ' XMLで定義を取得する
        Set Obj = Prj.ImportExportSpecifications(strExportName)
        strXML = Obj.XML
        strXML = ProcessLines(strXML, "ここに新しい出力先")
        ' 変更後のXMLを適用
        Obj.XML = strXML

        ' エクスポート操作の実行
        DoCmd.RunSavedImportExport strExportName

End Function

' エクスポート操作の一部変更用
Function ProcessLines(str As String, newPath As String) As String
    Dim str2 As String
    Dim lines() As String
    Dim i As Integer
    Dim prefix As String
    Dim newLine As String

    ProcessLines = ""
    str2 = ""
    prefix = "<ImportExportSpecification"
    newLine = "<ImportExportSpecification Path=""" & newPath & """ xmlns=""urn:www.microsoft.com/office/access/imexspec"">"

    ' 文字列を改行で分割
    lines = Split(str, vbCrLf)

    ' 各行を処理
    For i = LBound(lines) To UBound(lines)
        ' 各行を表示 (ここで必要な処理を行う)
        ' Debug.Print (i) & ":" & lines(i)
        '     文字列前方一致確認
        If (Left(lines(i), Len(prefix)) = prefix) Then
            ' Debug.Print "変換"
            str2 = str2 & newLine & vbCrLf
        Else
            str2 = str2 & lines(i) & vbCrLf
        End If
    Next i
    ProcessLines = str2
End Function

無理やり感がありますが、もっとスマートな方法があれば教えていただけると嬉しいです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?