MS Office オートメーション テキストの CSV 形式での保存 :TransferText( サンプル :TransText) Access のデータを 他のアプリケーションで汎用に使える CSV 形式や Excel で使う時に便利な Excel 形式へのコンバート等に付いて 其の方法を紹介する テキストを CSV 形式で保存すると謂うのは Visual Basic でコーディングしても大した物ではないが Access を使用すると 態々コーディングする必要も無く成る 此れには TransferText メソッドを使用する 下記に此のメソッドの概要を示す DoCmd.TransferText [ 変換種類 ][, 定義名 ], テーブル名, ファイル名 [, フィールド名有無 ][,HTML テーブル名 ] 指定項目変換種類定義名テーブル名ファイル名フィールド名有無 HTML テーブル名 内容下記の孰れかの組み込み定数を指定 acexportdelim : 区切記号付テキストファイルのエクスポート acexportfixed : 固定長テキストファイルのエクスポート acexporthtml :HTML ファイルのエクスポート acexportmerge : acimportdelim : 区切記号付テキストファイルのインポート ( 既定値 ) acimportfixed : 固定長テキストファイルのインポート acimporthtml :HTML ファイルのインポート aclinkdelim : 区切記号付テキストファイルのリンク aclinkfixed : 固定長テキストファイルのリンク aclinkhtml :HTML ファイルのリンク作成してカレントデータベースに格納したインポート又はエクスポート定義の名前固定長テキストファイルの場合 此の引数を指定するか 又は インポート エクスポート リンクするテキストファイルと同じフォルダに有る schema.ini ファイルを使用する必要が有る 区切記号付テキストファイルでは 此の引数に定義名を指定しなくても インポート エクスポート リンクが出来る テキストデータとのインポート エクスポート リンクを行なう Access テーブルの名前 又は 結果をテキストファイルにエクスポートする Access の選択クエリー名インポート エクスポート リンクを行なうテキストファイルのフルパス名インポート エクスポート リンク時に, テキストファイルの最初の行をフィールド名とするか何うかを指定 ( 既定値は False) インポート リンクする HTML ファイル内のテーブルかリストの名前 ( 此の引数を指定しないと HTML ファイルの先頭のテーブルかリストがインポート リンクされる ) CSV 形式のファイルは インポート エクスポート 又は リンク ( 従来のアタッチに相当 ) させる事が出来る 実は, 此の後で紹介する其他のファイル形式との遣り取りも 大抵は此の 3 つの形式を選択する事が出来る 此の作業は 下記の孰れかと謂う事に成る 1. 元テーブルとコンバート先のファイル形式を指定してエクスポート 2. コンバート元のファイル形式とファイルを指定してインポートし 適当なテーブルを作成 3. 外部のファイル形式とファイルを指定し 内部のテーブル名を指定してリンク エキスポートで ファイル名で指定したファイルが無いと 自動的に新規作成される -1-
ワークシート形式 RTF 形式 HTML 形式 他のデータベース形式共 基本的には 同じ遣り方と謂う事に成る 其処で 此処では 大枠のプログラムから CSV 形式の物而巳のコーディング例を示す Option Explicit ' Microsoft Access x.x Object Library の参照設定を行う (x.x はバージョン番号 ) Private Ac Private Sd As Access.Application As String ' フォームが読み込まれた時の処理 Private Sub Form_Load( ) ' 起動パスの設定 Sd = App.Path: If Not Right$( Sd, 1 ) = " " Then Sd = Sd & " " ' Access オブジェクトのインスタンス生成 Set Ac = New Access.Application ' Access ファイルのオープン Ac.OpenCurrentDatabase ( Sd & "transfer.mdb" ) ' フォームが閉じられ様と仕た時の処理 Private Sub Form_QueryUnload( Cancel As Integer, UnloadMode As Integer ) ' Access の終了 Ac.Quit ' Access の解放 Set Ac = Nothing ' コマンドボタン ( 読込 ) がクリックされた時の処理 Private Sub cmdloadcsv_click( ) ' CSV ファイル名の設定 F = Sd & "import.csv" テーブル インポート が新規作成され 其処に import.csv の内容が書き込まれる 猶 先頭行は フィールド名と解釈する ' CSV ファイルのインポート Ac.DoCmd.TransferText acimportdelim,, " インポート ", F, True MsgBox "CSV ファイルのインポートが完了しました ", vbokonly, " 通知 " ' コマンドボタン ( 書込 ) がクリックされた時の処理 Private Sub cmdsavecsv_click( ) ' CSV ファイル名の設定 F = Sd & "export.csv" テーブル エクスポート の内容が export.csv にカンマ区切で書き込まれる 猶 先頭行に フィールド名は書き込まない ' CSV ファイルのエクスポート Ac.DoCmd.TransferText acexportdelim,, " エクスポート ", F, False MsgBox "CSV ファイルへエクスポートが完了しました ", vbokonly, " 通知 " -2-
ワークシート変換 :TransferSpreadsheet( サンプル :TransXls) ワークシート変換は Access のデータを Excel や Lotus 1-2-3 形式のファイルと変換する物で有る 此れも インポート エクスポート リンクの孰れもが可能で有る 但し 実際にはアプリケーションのバージョンに依り サポートが異なるので注意を要する 下記に ワークシート変換を行う TransferSpreadsheet メソッドの概要を示す Excel 及び Lotus のワークシートのデータをインポート エクスポート リンクを行う事が出来る 但し Lotus ワークシートは読み取り専用で有る DoCmd.TransferSpreadsheet [ 変換種類 ][, シート種類 ], テーブル名, ファイル名 [, フィールド名有無 ][, 範囲 ] 指定項目変換種類シート種類テーブル名ファイル名フィールド名有無範囲 内容下記の孰れかの組み込み定数を指定 acimport : インポート ( 既定値 ) acexport : エクスポート aclink : リンク下記の孰れかの数値を指定 0:acSpreadsheetTypeExcel3 6:acSpreadsheetTypeExcel4 5:acSpreadsheetTypeExcel5 5:acSpreadsheetTypeExcel7 8:acSpreadsheetTypeExcel8( 既定値 ) 8:acSpreadsheetTypeExcel9 2:acSpreadsheetTypeLotusWK1 3:acSpreadsheetTypeLotusWK3 7:acSpreadsheetTypeLotusWK4 4:acSpreadsheetTypeLotusWJ2( 日本語バージョン而巳 ) ワークシートとのインポート エクスポート リンクを行なう Access テーブルの名前 又は 結果をワークシートにエクスポートする Access の選択クエリー名猶 変換種類にインポートを指定した場合 指定したテーブルが既に存在する時にはワークシートのデータは 此のテーブルに追加され 存在しない時は 新しいテーブルが作成されて 指定したワークシートのデータがインポートされる インポート エクスポート リンクを行なうワークシートファイルのフルパス名インポート エクスポート リンク時に, ワークシートファイルの最初の行をフィールド名とするか何うかを指定 ( 既定値は False) 但し Access テーブル 又は 選択クエリのデータをワークシートにエクスポートする場合は 此の引数に何を指定したかに拘らず フィールド名がワークシートの最初の行に挿入される セルの有効範囲 又は ワークシートの範囲名を文字列式で指定但し 此の引数はインポートする場合に丈指定し ワークシートにエクスポートする場合には 此の引数を指定しない 範囲を入力すると エクスポートは失敗に成る 猶 インポートする場合でも ワークシート全体をインポートする場合は 此の引数を指定しない 構文の途中に有る引数を省略する場合 引数のカンマは省略出来ない 後に続く引数を指定しない場合は 最後に指定した引数の後ろにはカンマは付けない エキスポートで ファイル名で指定したファイルが無いと エラーが発生する -3-
此処では Excel との変換を行うコーディング例を示す 猶 下記のコードで CSV 形式の場合と異なるのは 実質的には 実際にインポートやエクスポートを行う 2 行丈で有る Option Explicit ' Microsoft Access x.x Object Library の参照設定を行う (x.x はバージョン番号 ) Private Ac Private Sd As Access.Application As String ' フォームが読み込まれた時の処理 Private Sub Form_Load( ) ' 起動パスの設定 Sd = App.Path: If Not Right$( Sd, 1 ) = " " Then Sd = Sd & " " ' Access オブジェクトのインスタンス生成 Set Ac = New Access.Application ' Access ファイルのオープン Ac.OpenCurrentDatabase ( Sd & "transfer.mdb" ) ' フォームが閉じられ様と仕た時の処理 Private Sub Form_QueryUnload( Cancel As Integer, UnloadMode As Integer ) ' Access の終了 Ac.Quit ' Access の解放 Set Ac = Nothing ' コマンドボタン ( 読込 ) がクリックされた時の処理 Private Sub cmdloadxls_click( ) ' Excel ファイル名の設定 F = Sd & "import.xls" テーブル インポート が新規作成され 其処に import.xls の内容が書き込まれる 猶 先頭行は フィールド名と解釈する ' Excel ファイルのインポート Ac.DoCmd.TransferSpreadsheet acimport, acspreadsheettypeexcel9, " インポート ", F, True MsgBox "XLS ファイルのインポートが完了しました ", vbokonly, " 通知 " ' コマンドボタン ( 書込 ) がクリックされた時の処理 Private Sub cmdsavexls_click( ) ' Excel ファイル名の設定 F = Sd & "export.xls" テーブル エクスポート の内 容が export.xls の新規シート に書き込まれる 猶 先頭行に は 常に フィールド名が書き込まれる ' Excel ファイルへのエクスポート Ac.DoCmd.TransferSpreadsheet acexport, acspreadsheettypeexcel9, " エクスポート ", F MsgBox "XLS ファイルへエクスポートが完了しました ", vbokonly, " 通知 " -4-
RTF 形式や Excel 形式でのファイル作成 :OutputTo( サンプル :TransRtf) OutputTo メソッドでは RTF 形式や Excel 形式やテキスト形式でのファイル作成が可能で有る 但しインポートは 出来ない 下記に OutputTo メソッドの概要を示す DoCmd.OutputTo オブジェクト種類 [, オブジェクト名 ][, 出力ファイル形式 ][, 出力ファイル ][, 自動起動 ][, テンプレートファイル ] 指定項目オブジェクト種類オブジェクト名出力ファイル形式出力ファイル自動起動テンプレートファイル 内容下記の孰れかの組み込み定数を指定 acoutputform : フォーム acoutputmodule : モジュール acoutputquery : クエリ acoutputreport : レポート acoutputtable : テーブル ( 既定値 ) オブジェクトの種類の引数で選択した種類のオブジェクトの有効名を文字列式で指定下記の孰れかの組み込み定数を指定 acformatxls acformatrtf acformattxt acformathtml acformatasp acformatdap acformatiis acformatsnp オブジェクトの出力先のファイルの名前をフルパスで指定猶 此の引数を指定しない場合 出力ファイル名を入力する為のプロンプトが表示される Windows 対応のアプリケーションを起動して 出力ファイル形式の引数で指定したファイルをロードする時には True を設定猶 XLS ファイルの場合は Excel TXT ファイルの場合はメモ帳 RTF ファイルの場合は Word で HTML ファイルの場合は 既定のインターネットブラウザで Access のオブジェクトの出力ファイルを開く HTML ファイル HTX ファイル ASP ファイルのテンプレートと仕て使用するファイルを指定猶 此処で謂う処のテンプレートファイルとは HTML タグを含むファイルの事で有る OutputTo メソッドでは 自動起動の引数を True に設定すると ファイルを出力した後で 対応するアプリケーションを自動的に実行する事が出来る 猶 HTML 形式では 不必要に Microsoft の独自タグが記述され ファイルサイズも大きく成る為 此の儘 出力ファイルをサーバにアップロードして使用する様な事は避けた方が良い 飽く迄もアウトライン作成用に使用し 後で 不要なタグを手作業で取り除く事が望ましい 出力ファイルで指定したファイルが無いと 自動的に新規作成される (XLS の場合も ) -5-
下記に Excel 形式と HTML 形式と RTF 形式で出力するサンプルコードを示す Option Explicit ' Microsoft Access x.x Object Library の参照設定を行う (x.x はバージョン番号 ) Private Ac Private Sd As Access.Application As String ' フォームが読み込まれた時の処理 Private Sub Form_Load( ) ' 起動パスの設定 Sd = App.Path: If Not Right$( Sd, 1 ) = " " Then Sd = Sd & " " ' Access オブジェクトのインスタンス生成 Set Ac = New Access.Application ' Access ファイルのオープン Ac.OpenCurrentDatabase ( Sd & "transfer.mdb" ) ' フォームが閉じられ様と仕た時の処理 Private Sub Form_QueryUnload( Cancel As Integer, UnloadMode As Integer ) ' Access の終了 Ac.Quit ' Access の解放 Set Ac = Nothing ' コマンドボタン (HTML ファイルへの書込 ) がクリックされた時の処理 Private Sub cmdsavehtml_click( ) ' HTML ファイル名の設定 F = Sd & "import.html" ' HTML ファイルの出力 Ac.DoCmd.OutputTo acoutputtable, " エクスポート ", acformathtml, F, True ' コマンドボタン (RTF ファイルへの書込 ) がクリックされた時の処理 Private Sub cmdsavertf_click( ) ' RTF ファイル名の設定 F = Sd & "export.rtf" ' RTF ファイルの出力 Ac.DoCmd.OutputTo acoutputtable, " エクスポート ", acformatrtf, F, True ' コマンドボタン (Excel ファイルへの書込 ) がクリックされた時の処理 Private Sub cmdsavexls_click( ) ' Excel ファイル名の設定 F = Sd & "export.xls" ' Excel ファイルの出力 Ac.DoCmd.OutputTo acoutputtable, " エクスポート ", acformatxls, F, True -6-
データベース変換 :TransferDatabase クライアント / サーバー型 RDBMS にも応用可能なデータベース変換機能だ.Access ではさまざまな種類のデータベースファイルとのコンバートが可能であるが, これをすべて Visual Basic からも呼び出して使うことができる. しかも,ODBC を使って Oracle や SQL Server などの RDBMS とのインポート, エクスポート, そしてリンクも可能である. こうなってくると,SQL*Plus や ISQL などを使うのが馬鹿馬鹿しくなってくる. この機能を実現するのが,TransferDatabase メソッドだ. 次に, 概要を示す DoCmd.TransferDatabase [transfertype], databasetype, databasename [, objecttype], source, destination [, structureonly] [, saveloginid] 指定項目 transfertype databasetype databasename objecttype source destination structureonly saveloginid 内容下記の孰れかの組み込み定数を指定 acimport : インポート acexport : エクスポート aclink : リンクデータのインポート エクスポート リンクが可能なデータベースの種類の有効名を文字列式で指定データのインポート エクスポート リンクに使用するデータベースの名前をフルパスで指定下記の孰れかの組み込み定数を指定 actable : テーブル acquery : クエリ acform : フォーム acreport : レポート acmacro : マクロ acmodule : モジュールインポート エクスポート リンクするデータのオブジェクト名を文字列式で指定データベースのインポート エクスポート リンクする先のオブジェクト名を文字列式で指定データベーステーブルの構造丈をインポートやエクスポートする時に True を テーブルの構造と其のデータをインポートやエクスポートする時には False を指定 ODBC データベースのログオン ID とパスワードをデータベースからリンクされたテーブルの接続文字列に格納する時は True を指定 此処では ODBC データソースに接続して居る 因みに 引数 databasetype には ODBC を指定する ( 此の辺り サンプルプログラムやヘルプには誤記が有るので注意され度い ) エクスポートでは 指定されたテーブルを 其の儘の名前で ODBC データソース名 SQL65 の Microsoft SQL Server 6.5 にエクスポートして居る インポートでは,SQL Server 上に有る authors テーブルを ローカルの Import_SQL60 テーブルにインポートして居る ( 此の順番も Preview Program のヘルプでは誤記が有るので注意され度い ) リンクでも 同様に authors テーブルを Link_SQL65 テーブルにリンクして居る -7-
下記に TransferDatabase メソッドのコーディング例を示す ' ODBC SQL へのエクスポート Private Sub cmdexpdb_click( ) On Error Resume Next Ac.DoCmd.TransferDatabase acexport, "ODBC", _ "ODBC;DSN=SQL65;UID=sa;PWD=;LANGUAGE=japanese;DATABASE=pubs", _ actable, cbotables.text, cbotables.text If Err Then MsgBox Err.Description, vbcritical, "Error " & CStr( Err.Number ) Else MsgBox "Export ODBC File Complete!!" End If ' ODBC SQL からインポート Private Sub cmdimpdb_click( ) On Error Resume Next Ac.DoCmd.TransferDatabase acimport, "ODBC", _ "ODBC;DSN=SQL65;UID=sa;PWD=;LANGUAGE=japanese;DATABASE=pubs", _ actable, "authors", "Import_SQL65", False If Err Then MsgBox Err.Description, vbcritical, "Error " & CStr( Err.Number ) Else MsgBox "Import ODBC File Complete!!" End If ' ODBC SQL とのリンク Private Sub cmdlinkdb_click( ) On Error Resume Next Ac.DoCmd.TransferDatabase aclink, "ODBC", _ "ODBC;DSN=SQL65;UID=sa;PWD=;LANGUAGE=japanese;DATABASE=pubs", _ actable, "authors", "Link_SQL65", False If Err Then MsgBox Err.Description, vbcritical, "Error " & CStr(Err.Number) Else MsgBox "Link ODBC File Complete!!" End If -8-