- ベストアンサー
accessでファイル名とテーブル名を表示したい
こんにちは。どうぞ、お願いします。 Access2000についてです。 ファイル名とテーブル名を取得して、フォーム上に、表示したいのですが、 どうしたら良いのでしょう。 ・現在開いているファイルのファイル名から 拡張子(.mdb)を取り除いて、取得したいのです。 (「平成14年.mdb」から平成14年を取り出したい。) ・現在編集中のテーブル名を取り出したい。 (同じフォームで[01月]~[12月]というテーブルの中から 選んで入力するようにしていますが、現在入力中のテーブル名を 取り出したいのです。) それで、ラベルなどに、入力し、表示できないだろうかと思います。 無理でしょうか? 可能ならば、 フォーム上に、"平成14年08月"という編集作業の年月が表示できるのですが。 (私の考えている希望なのです。) どうぞ、お願い申し上げます。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
> まず、ファイルを開く時に、別のフォームを開いて、 > コマンドボタンをテーブルの数だけ作成し、クリック時のイベントに、 > > DoCmd.OpenForm "Total" > Forms!Total.RecordSource = "01月" > のようにしてます。(そして、このフォームは閉じるようにしています。) とのことですので、 まず、モジュールを新規作成して下さい。 VBAのウィンドウが開くので以下をコピーして下さい。 Option Compare Database Public input_mm ここまで。 次に、クリック時のイベント内の、 DoCmd.OpenForm "Total" の上に以下の一行を追加してください。 input_mm = "01月" で、前回の回答の ラベル.caption = myName を、 ラベル.caption = myName & input_mm に変更します。 保存して、フォームを開いてみて下さい。 ラベルに表示されると思います。 不明な点があれば、また返信下さい。 # 少し遅くなるかもしれませんが。
その他の回答 (6)
- maruru01
- ベストアンサー率51% (1179/2272)
再びmaruru01です。 誰の方法でもいいですが、最初のフォームのLoadイベントでファイル名を取得し、グローバル変数に格納しておきます。 グローバル変数は、標準モジュールに、 Public AppFileName As String などとPublicで宣言します。 こうすると、プログラム中のどこでも使用出来ます。 あとは、"Total"フォームに、表示用のラベル[lbl年月]があるとして、 "Total"フォームのLoadイベントに、 Me!lbl年月.Caption = AppFileName & Me.RecordSource コンボボックス("Total"フォーム上にあるんですよね)の更新後のイベントの、最後に以下を追加、 Me!lbl年月.Caption = AppFileName & Me![cboTableName].Text
お礼
maruru01さん、ありがとうございました。ラベル名を"lbl年月"としました。 私のスキル不足で、上手く行きませんでした。スイマセン。 どうぞ、お許しくださいませ。以下のようにしましたが、エラーが出ました。 Module1を新規作成し、 Option Compare Database Public AppFileName As String -------------- Private Sub Form_Load() Me!lbl年月.Caption = AppFileName & Me.RecordSource End Sub -------------- Private Sub cboTableName_AfterUpdate() Me.RecordSource = Me![cboTableName].Text Me!lbl年月.Caption = AppFileName & Me![cboTableName].Text End Sub -------------- これで、コンボボックスからテーブルを選ぶと、 実行時エラー '2185': コントロールがフォーカスを取得していないときに、 コントロールのプロパティまたはメソッドを参照することはできません。 デバッグ押下>以下を指し示します。 Me!lbl年月.Caption = AppFileName & Me![cboTableName].Text -------------- それで、フォームのラベル"lbl年月"には、 テーブル名だけが表示されています。 これから、ご助言を参考にして、努力し、 解決したいと思います。ありがとうございました。
- maruru01
- ベストアンサー率51% (1179/2272)
こんにちは。maruru01です。 ファイル名は、 Application.CurrentProject.FullName で取り出せます。(ただし、フルパス付き) このフルパスからファイル名(拡張子抜き)を取り出すのは、 InStrRev関数で後ろから"\"を探して、その後ろだけ取り出し、その後さらにInStrRev関数で後ろから"."を探して、その前だけを取り出します。 または、Path系APIを使っても出来ます。 http://homepage1.nifty.com/nishikawa/laboratory/Tips/Win/pathFunctions.html http://plaza5.mbn.or.jp/~heropa/vb122.htm#PathFindFileName http://plaza5.mbn.or.jp/~heropa/vb122.htm#PathRemoveExtension テーブル名は現在のプログラム次第です。 >同じフォームで[01月]~[12月]というテーブルの中から >選んで入力するようにしていますが ということなら、フォームのレコードソースをあるタイミングで変更していると思いますので、その時にレコードソースに設定するテーブル名をついでに拾えばいいと思いますが。 あとは、2つを繋げて、ラベルで表示するなり、フォームのキャプションに設定すればいいでしょう。
お礼
maruru01さん、ありがとうございました。 参考ページも拝見しています。 又、ご助言をどうぞお願いします。
補足
maruru01さん、お願いします。 2つの方法で、テーブルを選んでいます。 まず、ファイルを開く時に、別のフォームを開いて、 コマンドボタンをテーブルの数だけ作成し、クリック時のイベントで、 テーブルを指定しています。 -------------- もう1つは、入力するフォームに、 コンボボックスを作り、選択するようにしています。 この2つを満足させるのは、難しいですか。 これが、Accessを用いて作る最初のファイルですので、 なにが、難しいのかわからないというのが、正直な所なんです。 どうぞ、お願いします。
- mantaro1
- ベストアンサー率48% (19/39)
現在開いているアプリケーションのフルパスはCurrentdb.Nameで取れます。 Dim strFileName As String strFileName = CurrentDb.Name strFileName = Mid(strFileName, InStrRev(strFileName, "\", , vbTextCompare) + 1, Len(strFileName)) strFileName = Left(strFileName, Len(strFileName) - 4) ちなみにInStrRev関数はAccess2000以上対応です。 また現在編集中のテーブルはMe.RecordSourceで取れます。 クエリーがレコードソースだとクエリーの名前になって しまいますが…。
お礼
mantaro1さん、どうも、ありがとうございました。 参考になりました。もっと、勉強します。m(_ _)m
- 20020718
- ベストアンサー率48% (13/27)
>・現在編集中のテーブル名を取り出したい。 > (同じフォームで[01月]~[12月]というテーブルの中から > 選んで入力するようにしていますが、現在入力中のテーブル名を > 取り出したいのです。) どうやって選んでいますか? 場合によっては、選んだ時に名称取得ができると思います。
お礼
まずは、お礼を申し上げます。ありがとうございます。 それで、テーブルの選び方なのですが、 1つに纏めたほうがいいと思い、 変更しようと思います。テーブルを選ぶ時は、 申し上げたうちの1つである、フォームを開いて、 コマンドボタンをクリックする方法にしたいと思います。 どうぞ、ご指導ください、お願いします。
補足
20020718さん、お世話になっています。 2つの方法で、テーブルを選んでいます。これも、問題でしょうか。 でも、1つに統合できません。 まず、ファイルを開く時に、別のフォームを開いて、 コマンドボタンをテーブルの数だけ作成し、クリック時のイベントに、 DoCmd.OpenForm "Total" Forms!Total.RecordSource = "01月" のようにしてます。(そして、このフォームは閉じるようにしています。) -------------- もう1つは、入力するフォームに、 コンボボックスを作り、 更新後のイベントを以下のようにしています。 Private Sub cboTableName_AfterUpdate() Me.RecordSource = Me![cboTableName].Text End Sub そして、値ソースに "01月";"02月";"03月";"04月";"05月";"06月";"07月";"08月";"09 月";"10月";"11月";"12月" を加えています。 -------------- というような次第なのですが、 テーブルの選び方が、二つあるので、難しいでしょうか? どうぞ、よろしく、ご指導くださいませんでしょうか。お願い申し上げます。
- 20020718
- ベストアンサー率48% (13/27)
yama3desuさんがどの程度お分かりかわかりませんが。。。 >・現在開いているファイルのファイル名から > 拡張子(.mdb)を取り除いて、取得したいのです。 > (「平成14年.mdb」から平成14年を取り出したい。) ↑とりあえずこれだけ。 フォームに、 「ラベル」という名前のラベルを作成して下さい。 フォームのプロパティの「読み込み時」 の「▼」を押して、[イベント プロシージャ]としてください。 「▼」の横の「...」を押して下さい。 VBAのウィンドウが開くので以下をコピーして下さい。 Private Sub Form_Load() Dim myPath Dim myName myPath = CurrentDb.Name myName = Left(Dir(myPath), Len(Dir(myPath)) - 4) ラベル.caption = myName End Sub ここまで。 保存して、フォームを開いてみて下さい。 ラベルに表示されると思います。
お礼
ファイル名を表示出来ました。ありがとうございます。 初心者なので、20020718様のように、 具体的に言っていただけると、助かります。 正直言うと、フォームのプロパティと言うのが、 上手く出なくて、戸惑いましたが。(~o~) 後は、テーブル名を解決するようにします。 ありがとうございました。お礼申し上げます。
- osamuy
- ベストアンサー率42% (1231/2878)
現在開いているファイル名は、VBAのCurrentDB.Nameで取得できます。 絶対パス形式になってますので、そこから、親フォルダ・パスと拡張子を取り除く必要がありますが。 こいつをイベントForm_Loadで、ラベルのcaptionとして設定してやれば良いかと。
お礼
osamuyさん、ありがとうございました。 Form_Loadというのが、わかりました。 全部わかったとは、申せませんけども。 また、ご指導のほどよろしくお願いします。
お礼
出来ました~! input_mm = "01月"を input_mm = "12月"まで、書き込んで、 動作を確認しました。ありがとうございました。 本当に、スイマセンでした。お礼申し上げます。