重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

こんにちは。どうぞ、お願いします。
Access2000についてです。

ファイル名とテーブル名を取得して、フォーム上に、表示したいのですが、
どうしたら良いのでしょう。

・現在開いているファイルのファイル名から
 拡張子(.mdb)を取り除いて、取得したいのです。
 (「平成14年.mdb」から平成14年を取り出したい。)

・現在編集中のテーブル名を取り出したい。
 (同じフォームで[01月]~[12月]というテーブルの中から
  選んで入力するようにしていますが、現在入力中のテーブル名を
  取り出したいのです。)
  
それで、ラベルなどに、入力し、表示できないだろうかと思います。
無理でしょうか? 可能ならば、
フォーム上に、"平成14年08月"という編集作業の年月が表示できるのですが。
(私の考えている希望なのです。)

どうぞ、お願い申し上げます。

A 回答 (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
に変更します。

保存して、フォームを開いてみて下さい。
ラベルに表示されると思います。

不明な点があれば、また返信下さい。
# 少し遅くなるかもしれませんが。
    • good
    • 0
この回答へのお礼

出来ました~!
input_mm = "01月"を
input_mm = "12月"まで、書き込んで、
動作を確認しました。ありがとうございました。
本当に、スイマセンでした。お礼申し上げます。

お礼日時:2002/08/30 13:21

再び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
    • good
    • 0
この回答へのお礼

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年月"には、
テーブル名だけが表示されています。

これから、ご助言を参考にして、努力し、
解決したいと思います。ありがとうございました。

お礼日時:2002/08/30 13:48

こんにちは。

maruru01です。

ファイル名は、
Application.CurrentProject.FullName
で取り出せます。(ただし、フルパス付き)
このフルパスからファイル名(拡張子抜き)を取り出すのは、
InStrRev関数で後ろから"\"を探して、その後ろだけ取り出し、その後さらにInStrRev関数で後ろから"."を探して、その前だけを取り出します。
または、Path系APIを使っても出来ます。

http://homepage1.nifty.com/nishikawa/laboratory/ …
http://plaza5.mbn.or.jp/~heropa/vb122.htm#PathFi …
http://plaza5.mbn.or.jp/~heropa/vb122.htm#PathRe …

テーブル名は現在のプログラム次第です。
>同じフォームで[01月]~[12月]というテーブルの中から
>選んで入力するようにしていますが
ということなら、フォームのレコードソースをあるタイミングで変更していると思いますので、その時にレコードソースに設定するテーブル名をついでに拾えばいいと思いますが。

あとは、2つを繋げて、ラベルで表示するなり、フォームのキャプションに設定すればいいでしょう。

この回答への補足

maruru01さん、お願いします。

2つの方法で、テーブルを選んでいます。

まず、ファイルを開く時に、別のフォームを開いて、
コマンドボタンをテーブルの数だけ作成し、クリック時のイベントで、
テーブルを指定しています。
--------------
もう1つは、入力するフォームに、
コンボボックスを作り、選択するようにしています。

この2つを満足させるのは、難しいですか。
これが、Accessを用いて作る最初のファイルですので、
なにが、難しいのかわからないというのが、正直な所なんです。
どうぞ、お願いします。

補足日時:2002/08/29 20:43
    • good
    • 0
この回答へのお礼

maruru01さん、ありがとうございました。
参考ページも拝見しています。
又、ご助言をどうぞお願いします。

お礼日時:2002/08/29 20:28

現在開いているアプリケーションのフルパスは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で取れます。
クエリーがレコードソースだとクエリーの名前になって
しまいますが…。
    • good
    • 0
この回答へのお礼

mantaro1さん、どうも、ありがとうございました。
参考になりました。もっと、勉強します。m(_ _)m

お礼日時:2002/08/29 20:26

>・現在編集中のテーブル名を取り出したい。


> (同じフォームで[01月]~[12月]というテーブルの中から
>  選んで入力するようにしていますが、現在入力中のテーブル名を
>  取り出したいのです。)

どうやって選んでいますか?
場合によっては、選んだ時に名称取得ができると思います。

この回答への補足

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月"
を加えています。
--------------
というような次第なのですが、
テーブルの選び方が、二つあるので、難しいでしょうか?
どうぞ、よろしく、ご指導くださいませんでしょうか。お願い申し上げます。

補足日時:2002/08/29 20:38
    • good
    • 0
この回答へのお礼

まずは、お礼を申し上げます。ありがとうございます。

それで、テーブルの選び方なのですが、
1つに纏めたほうがいいと思い、
変更しようと思います。テーブルを選ぶ時は、
申し上げたうちの1つである、フォームを開いて、
コマンドボタンをクリックする方法にしたいと思います。
どうぞ、ご指導ください、お願いします。

お礼日時:2002/08/29 21:01

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

ここまで。


保存して、フォームを開いてみて下さい。
ラベルに表示されると思います。
    • good
    • 0
この回答へのお礼

ファイル名を表示出来ました。ありがとうございます。
初心者なので、20020718様のように、
具体的に言っていただけると、助かります。

正直言うと、フォームのプロパティと言うのが、
上手く出なくて、戸惑いましたが。(~o~)
後は、テーブル名を解決するようにします。
ありがとうございました。お礼申し上げます。

お礼日時:2002/08/29 18:55

現在開いているファイル名は、VBAのCurrentDB.Nameで取得できます。


絶対パス形式になってますので、そこから、親フォルダ・パスと拡張子を取り除く必要がありますが。

こいつをイベントForm_Loadで、ラベルのcaptionとして設定してやれば良いかと。
    • good
    • 0
この回答へのお礼

osamuyさん、ありがとうございました。
Form_Loadというのが、わかりました。
全部わかったとは、申せませんけども。
また、ご指導のほどよろしくお願いします。

お礼日時:2002/08/29 20:30

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!