じゃばのひまつぶし:ExcelVBAによる競馬ソフト自作教室とJRA-VAN登録ソフト(おずたんシリーズ)のサポートサイトです。
JRA-VAN Data Lab対応 競馬ソフト自作教室

<New JVData Explorer> 準備編:初期ディレクトリ設定
 
第3回(2)

更新日
2012-01-14


「初期設定」プログラムの作成
ここでは「初期設定」ワークシートに所定のフォルダやディレクトリを設定するプログラムを作成します。

(注意)この回のプログラムは、この回の分をすべて記述して上書き保存し、実行してから[New_JVData_Explorer]を終了してください。この回を未完のまま終了すると次回起動時にエラーになる恐れがあります。
(1)「初期設定」の考え方
ダウンロードしたJVDataを保存したり、New_JVData_Explorerで解析したデータを保存するには、あらかじめ保存先ディレクトリを設定しておく必要があります。初期に一度だけ設定すれば構いませんが、ユーザが自分の好きなところに保存するために「フォルダを開く」ダイアログ画面で選択できるようにします(ダイアログ画面を開くマクロは前回作成しましたが、実行するのは今回作るプログラムで行います)。

データを保存するフォルダを次のように決めます。
@「コピーフォルダ」(COPY_FLD)・・・ダウンロードしたJV-Dataを保存するフォルダ。フォルダ名は”\CopyData2”とします。
A「セーブフォルダ」(SAVE_FLD)・・・New_JVData_Explorerが解析したデータを保存するフォルダ。フォルダ名は”\New_JVData_Explorer”とします。
B「メインフォルダ」(MAIN_FLD)・・・COPY_FLD(\CopyData2) とSAVE_FLD(\New_JVData_Explorer)を保存するフォルダ。このプログラムでのメインのディレクトリです。フォルダ名を”\New_JVDATA”とします。(これはJRA-VAN Data Lab登録ソフト「おずたん」と同じとしていますが、ユーザが任意のフォルダに変えることもできます)
C「トップディレクトリ」(TOP_DIR)・・・メインフォルダを設定するフォルダ(ディレクトリ)です。デフォルトでは、通常は一番上位の”\My Documents”としますが、ユーザさんが変えることもできます。

フォルダ種類   フォルダ記号 フォルダ名  パス  備考
コピーフォルダ COPY_FLD CopyData2 C:\MyDocuments\CopyData2 JVData保存
セーブフォルダ SAVE_FLD New_JVData_Explorer C:\MyDocuments\New_JVDATA\New_JVData_Explorer 解析結果保存
メインフォルダ MAIN_FLD New_JVDATA C:\MyDocuments\New_JVDATA 上記両方の保存
トップディレクトリ TOP_DIR MyDocuments C:\MyDocuments メインフォルダ保存

上記のフォルダを記録するために、ワークシート「初期設定」に下図のように枠を作成します。ボタンも作成して「初期ディレクトリ設定」と名前を付けてください。すでにあるボタン<Topシートへ>は右クリックして位置を適当にずらせてください。
(注:右クリックしてもボタンの周囲に○点が出ない場合は、移動できません。その時は、第2回を参考にして、「コントロールツールボックス」を表示し、デザインモードにしてから行ってください)

Excel2007/2010 でボタンを移動する方法はこちらを参考にしてください。

枠の罫線やセルの幅および色は任意ですが、2行目のセル(A2〜D2)は必ず空白にしておいてください。
 
 CommandButton
Caption
備考 
Topシートへ 作成済 
初期ディレクトリ設定 今回作成 


(2)「初期設定」プログラムのフローチャート
 「初期設定」ワークシートの「初期ディレクトリ設定」ボタンをクリックすると、まず「初期設定」ワークシートの2行目のセルA2〜D2の各情報で指定されたディレクトリ(フォルダ)があるかどうか調べます(実際にはディレクトリの中の初期設定用ファイルの有無をチェック)。なければディレクトリ設定のためのメッセージを表示します。プログラムを始めて起動した場合には必ずこの状態になります。
(3)「初期ディレクトリ設定」プログラム
下記の初期ディレクトリを設定するプログラムを標準モジュール(mMod0)に記述します。[初期ディレクトリ設定]マクロ
場所はこれまでに作成したプログラムの下に作ってください。
[プログラムの説明](○内の番号は上記プログラムの番号です)[初期ディレクトリ設定]マクロ
@On Error GoTo ErrHandler はエラーが起こった場合にエラー処理ルーチン(ErrHandler)に飛ぶためのコードです。
[ErrorHandler]はマクロの最後尾に記述しています。その上のErrorPoint$にはこのプログラムの名称を代入しています。もしエラーが起こればどのプログラム部分で発生したかを調べやすくするための工夫です。

If 〜 End Ifの部分は、初期設定シートのセル(A2〜D2)のデータ有無をチェックします。
最初の状態では、「初期設定」ワークシートのセル"A2","B2","C2","D2"には何も記入されていないので、If thenの最初の条件のところ(Aの部分)を実行します。ここではデフォルトのフォルダ名を設定しておきます。デフォルト値を変更したい場合は、あらかじめこの部分を書き換えてください。

Bここではデフォルトのフォルダ名をMAIN_FLDなどの変数にセットしてCのサブルーチン[GetTopDirectoryInfo]を実行します。このデフォルト値の設定は任意ですが、ここでは他のプログラムとフォルダを共有するためにMAIN_FLDは以前作成したNewLiteMiningソフトと同じにしています(JRA-VAN登録ソフト「おずたん」とも同じです)。
次回以降に初期ディレクトリ設定ボタンを押すとすでにセルに値が記入済なのでBの部分を実行します。

Cサブルーチン[GetTopDirectoryInfo]
 このサブルーチン[GetTopDirectoryInfo]では、デフォルト値のフォルダ名を手がかりにしてSAVE_FLDの中に初期設定ファイルの[Initial.txt」の有無を調べ、なければディレクトリがないものとみなして必要なディレクトリを作成します。
 HのNew_GetDirectoryPathName は、トップディレクトリを得るファンクション(サブルーチンの一種)で、前回、標準モジュール(mDialog)に作成したマクロです。コードがここにくるとファンクションの中でユーザがフォルダを選択するダイアログ画面を表示して、選択されたフォルダのフルパスを変数[TOP_DIR]に文字列で返します。フォルダ選択をキャンセルすると[TOP_DIR]は空白になるので、Kを実行します。
このフルパスの指定ディレクトリに目的のフォルダがなければI[SetDirectoryData]でディレクトリ情報を設定し、J[MakeDirectory]でディレクトリを作成します。あれば作成済みとしてメッセージを出して、Iでディレクトリ情報を確認(設定)して抜けます。

@エラー処理ルーチン[ErrorHandler]
 この初期ディレクトリ設定プロシージャの中でエラーが発生したときにエラーを処理して流れを止めないようにするルーチンです。上記の[GetTopDirectoryInfo]の中で[MakeDirectory()]というサブルーチンを使ってますが、この中で一度作成したディレクトリを再作成しようとするとエラー(エラー番号75)を発生します。このエラーを回避するための処理です。
このコードの下から2行目にStopというところがあります。エラーが発生した場合はこのStopでいったんプログラムの実行が止まりますので、ユーザがファンクションキー(F8)を押すと、Resume Nextに移動し、さらに(F8)キーを押すと、エラーが発生した箇所の次の行に移動します。つまりエラーはその上の行あるいは上の行を実行中に発生しているので、エラーになった原因箇所を知ることができます。プログラムをいったん終了して、バグを修正するときにStopがあると便利です。ただし、本番では不便なので、実際に利用する場合は、Stopを削除するかコメント行に変えておきます。
(注意)エラーはメッセージとしても表示されますが、プログラムのデバッグ・ウインドウ(イメディエイト・ウインドウ)にも表示されます。
---------------------------------------------------
ErrorHandler: '@エラー処理ルーチン
Debug.Print "エラー:"; ErrorPoint$; "/"; Err.Number; " "; Err.Description 'エラー箇所とエラー番号と内容を表示
If Err.Number = 75 Then '既にディレクトリがある場合
MsgBox "既にディレクトリ " & vbCrLf & _
DirFolder & vbCrLf & " は作成済みです。"
Else
MsgBox "エラーが発生しました。" & vbCrLf & _
"エラー内容をお知らせください。" & vbCrLf & _
Err.Number & " " & Err.Description
End
End If
Stop
Resume Next

--------------------------------------------------------
Eサブルーチン[GetDirectoryData]とI[SetDirectoryData]
このサブルーチンは、[GetTopDirectoryInfo]の中で呼び出されます。引数には、デフォルトで設定された値が与えられます。
標準モジュール(mMod0)に下記のマクロを追加してください。
Jサブルーチン[MakeDirectory]
このサブルーチンも[GetTopDirectoryInfo]の中で呼び出され、必要なディレクトリを作ります。もし既にディレクトリが作成済みの場合は、エラーにならないように処理します。
やはり標準モジュール(mMod0)に下記のマクロを追加してください。
プログラムのポイント
このマクロでは、頭の[Public Sub MakeDirectory]の後のカッコ内にいくつかデータ(引数)が記述されています。今までのマクロにはありませんでしたが、今までのマクロはそのまま実行できますが、カッコ内に引数があるマクロは適正なデータを指定しないと動きません。
引数の前に[ByVal]とあるのは、引数の区別を表し、[ByRef]という形もあります。その違いについてはVBAの教科書をご覧いただきたいのですが、ByValはマクロの実行前後でも引数の値が変わらず、ByRefの場合は、マクロの実行前後で引数の値が変わりうると覚えてください。ここのソフトでは、JVLinkのデータセット関数以外ではByVal形式の引数を使います。
また引数の指定は、ByVal filename As Stringのように引数のデータ型を指定する必要がありますが、指定しないでも動きます。

これ以降のマクロでは、引数を使うマクロがよく出てきます。
(4)「初期ディレクトリ設定」ボタンへのプログラム記述
このページの最初の方で作成したボタン<初期ディレクトリ設定>ボタンに作成した[初期ディレクトリ設定]プログラムを呼び出すコードを記述します。作成したボタンを右クリックして周囲が○点で囲まれた状態で、ボタン自体を左ダブルクリックします。(もし、右クリックしても周囲に○点が出ない場合はデザインモードになっていないので、デザインモードにしてから行ってください)

ボタンをダブルクリックすると通常はSheet28(初期設定)のモジュールにCommandButton2_Click()というSubマクロが表示されます。
この部分に下記のように1行のコードを記述します。
Call の後に半角スペースを開けて、初期ディレクトリ設定 と記述します。
”初期ディレクトリ設定”は先ほど作成したマクロです。ボタンをクリックするとこのマクロが呼び出されて実行されます。


(注意)ここまで記述が済んだら、いったん上書き保存してください。その後に下記の手順で実行してください。
(5)「初期ディレクトリ設定」プログラムの実行
 上記までの作業が済んだら、「コントロールツールボックス」をデザインモードをオフにして(第二回参照)、プログラムをセーブして、「初期設定」ワークシートの「初期ディレクトリ設定」ボタンをクリックしてみてください。
 次のようなダイアログが出れば正常です。デフォルトの場合、「マイ ドキュメント」を選択して「OK」をクリックしてください。
(左図はExcel2003の場合。右図はExcel2007の場合。Excel2007では、「マイドキュメント」の階層が少し違っています)
左図はExcel2003の場合
右図はExcel2007の場合。Excel2007では、「マイドキュメント」の階層が少し違っています
ディレクトリ設定が済んだメッセージが出て、「初期設定」ワークシートのセルに各ディレクトリデータが記入されていれば完了です。
作成したディレクトリの確認
トップディレクトリの「マイドキュメント」→「New_JVData」(MAIN_FLD)の下に「CopyData2」(COPY_FLD)と「New_JVData_Explorer」(MAIN_FLD)ができていると思います。CopyData2の中にはまだなにもないですが(以前のJVData_Explorerがなければ)、New_JVData_Explorerの下にはInitial.txtファイルができていると思います。
(図の[JVData_Explorer]フォルダは以前のプログラムのもの)




(注意)ここで終了する場合は、上書き保存してから[New_JVData_Explorer]を終了してください。

今回で「準備編」は終了です。
次回は、実際にJV-Dataを取得するプログラムを作っていきます。
注意:次回に進む前にこれまでのプログラムは必ず実行しておいてください。データのダウンロード時は初期設定のディレクトリを利用しますので、未実行だと動作しません。

ページトップへ
 Copyright(C):Jaba 2000-2016