MSAceessコントロールソースで定数を使いたい

このQ&Aのポイント
  • MSAceessコントロールソースで定数を使いたい場合、ディレクトリパスを定数定義して参照する方法があります。これにより、パス変更時にも簡単に対応することができます。
  • 例えば、イメージコントロールのコントロールソースに以下のような指定を行います:=IIf([Name] <> "", 定数 & Name & ".png", "")。これにより、定数とファイル名を組み合わせてパスを生成することができます。
  • 定数はどこで定義するかについては、通常、VBAコードで設定することが多いです。フォームのモジュール内にグローバルな変数として定数を宣言し、フォーム全体で利用することができます。また、グローバルモジュールを作成してそこで定数を定義する方法もあります。
回答を見る
  • ベストアンサー

MSAceessコントロールソースで定数を使いたい

環境はWinXP SP3, MS Access 2007です。 イメージコントロールのコントロールソースにて、以下のような指定をしています。 =IIf([Name] <> "", "C:\~\~\~\~\~\" & Name & ".png", "") ディレクトリパスの"C:\~\~\~\~\~\"の部分を 定数定義しておいてそれを参照するようにすることは可能でしょうか。 可能な場合、どこで定義すればよいでしょうか。 多数のイメージコントロールがあるので、 コントロールごとにパス指定していると、パス変更時に対応が大変なので 集約しておきたいです。 なお、「他のテキストコントロールを作成してそこに書いておく」以外の方法があれば 教えてください。 フォームが小さいので不要なコントロールを作成したくないのと、 非表示とかサイズ0のコントロールを作ると、後々パス変更したいときに どこで設定しているのか分からなくなりそうだからです。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

定数保存用のテーブルを作成しておいて、そこに格納するのがシンプルだし、データペースらしい設計だと思います。 定数が一つだけでいいのなら、 テーブル T_Path フィールド Path テキスト型 としてそこにパスを入力しておきます。  コントロールソースは =IDLookup("Path","T_Path") とすれば参照できます。 パスに変更があった場合はテーブルを開いてフィールドの値を変更するだけです。 他には、2007以降なら、「一時変数」を使う方法もあります。 "SetTempVar/一時変数の設定" マクロ アクション - Access - Office.com http://office.microsoft.com/ja-jp/access-help/HA010120216.aspx AutoExecマクロで、上記のマクロで一時変数にパス名を格納しておきます。 コントロールソースは =[TempVars]![変数名] で、参照できます。 あとは、VBAの定数を参照する方法 標準モジュール Public Const FolderPath = "C:\~\~\~\~\~\" Public Function GetFolderPath() As String GetFolderPath = FolderPath End Function コントロールソース =GetFolderPath() 変更時の手軽さから、最初の案がお勧めです。

palayo
質問者

お礼

なるほど。 パスは複数定義しておきたいので、テーブルを使う案を採用しようと思います。 非常に参考になりました。 ありがとうございました。

その他の回答 (1)

  • shut0325
  • ベストアンサー率40% (490/1207)
回答No.2

定数用のテーブルを作っておいて、DLookUp関数で呼び出すというのはどうでしょうか?

関連するQ&A

  • access2007のコントロールソースで

    初めて質問します。よろしくお願いします。 OS:Windows7 Home Premium Edition Access:2007 ある業者がAccess2003で構築したシステムを2007で動くようにユーザーから依頼され 動作確認をしているのですが、 <レポートのレポートフッター-イベントプロシージャで> Option Compare Database Option Explicit Public gDSum As Currency <レポートフッター-フォーマット時イベントで> gDSum = IIf(IsNull([明細金額]), 0, [明細金額]) <レポートフッター-テキストのコントロールソースで> =[gDSum] レポートを実行すると、レポートフッター-テキストが 「#Name?」になります。 Access2003とAccess2007で記述が変更になっているのでしょうか?

  • コントロールの挿入と同時に画像を表示する方法

    アクティブエックスコントロールのイメージコントロールの設置と同時に、 画像をそのコントロールに表示するvbaを作ってるのですが、 実行時エラー438が発生します。 Sub test() Dim objOLE As OLEObject Set objOLE = ActiveSheet.OLEObjects.Add("Forms.Image.1") With objOLE .Name = "Image" .Picture = LoadPicture("C:\1.gif") End With End Sub C:\1.gifのパスをブラウザで表示させることはできるので、ファイルは存在しているし、 パスは間違っていません。 .Picture = LoadPicture("C:\1.gif") をコメントアウトすれば正常にコントロールが挿入されます。 コントロールの挿入と同時に画像を表示する方法を教えてください。 ご回答よろしくお願いします。

  • Accessでグローバル変数を宣言して定数を定義したい

    Access97でグローバル変数を持ちたいと思ったのですが、 それらしきものが見つかりません。 Public変数というものがあるのですが、これはプロシージャ-単位で しか定義できないようです。 ひとつのデータベース全体でグローバルに定義できる定数を持ちたいのです。 たとえば、データベース内で頻繁に読み込む必要があるファイルのPATH "C:\Program Files\Netscape\Communicator\"を 固定で持っておきたい。 何か方法はないでしょうか? よろしくお願いします。

  • addruleでアップロードさせる画像の種類をコントロールする

    こんにちは pearの addruleについてご質問させていただきます。 phpのフォームからアップさせる画像の種類をコントロールしたいのですがaddruleのmimetypeでできると思ったのですがうまくいきません。 下に記述したように jpg, jpeg, gif, png, xbm だけをアップ可能にしたいのですが、なぜか今gifのみアップでき、他がすべてエラーになってしまいます。 はじめに $pictype という配列を作成しそこにアップ可能なタイプを指定、それをaddruleで読み込んでいるつもりなのですが... 間違いのご指摘お願いいたします。 $pictype = array('image/jpeg','image/jpeg','image/gif','image/png','image/x-xbitmap'); $this->addRule('pic1', '■写真1* が読み込めません。写真は (jpg, jpeg, gif, png, xbm) が使用可能です', 'mimetype', $pictype );

    • 締切済み
    • PHP
  • PerlMagickでのPNG保存

    PerlMagickでPNG形式のファイルを保存するときに、ドライブ名も含めたフルパスで保存先を指定すると、ファイルが壊れてしまうようなのですが、何が問題なのでしょうか? 因みにJPGなどは、同じようにしても問題ありませんでした。 PNG形式でも、ドライブ名を含めずに相対パスで保存先を指定した場合は問題ありませんでした。 例: $i = Image::Magick->new; $i->Read('a1.png'); $i->Write('a2.png'); $i->Write('C:\a3.png'); このように開いて保存するだけでもa2.pngは正常で、a3.pngは壊れているようです。ファイルサイズも違います。 できればフルパス指定で保存したいのですが、どのように 設定すればよろしいか、教えていただけませんか。

    • ベストアンサー
    • Perl
  • レポートへの表示

    すでに同じ質問があったらすみません。 次のようなイメージのレポートを作成しています。 Ban Name Address Ban Name Address(タイトル) 1 Kaoru a@docomo.ne.jp 11 Megumi c@docomo.ne.jp 2 Taro b@docomo.ne.jp 12 ... 3... 名前とアドレスは、テーブルにデータがあり、連番は、[CurrentRecord]を使って表示させようとしています。テーブルに値は持っていません。 詳細タブにタイトルを二列並べて、左側の列には、連番1-10までのデータ、右側の列には、連番11-20までのデータを表示させたいのです。カレントレコードは、コントロールソースに以下の条件で表示されたのですが、その他の項目がエラーになってしまい、うまくいきません。 VBAを使ったほうがいいのでしょうか? ・Banのコントロールソース =IIf([CurrentRecord]<6,[CurrentRecord]) ・Nameでエラー =IIf([CurrentRecord]<6,[Name])

  • VB.netユーザコントロールのフォーカス

    VB.net(2008)でユーザコントロール(TextBoxなど)を作成していますが、そのコントロールに フォーカスが移りません。 ユーザコントロールではWndProcをオーバライドし、enabled指定時の動作のみを 定義していますが、そのコントロールにSelectALLでフォーカスを移そうとしても 飛んでくれません。 何が問題なのでしょうか? よろしくお願いいたします。

  • ホームページビルダーのフラッシュタイトル

    ホームページビルダー17のフラッシュタイトルを使ってみました。 リンクの指定は1個ですが、これをなんとか複数の画像と並行して 切り替わる方法がないか知りたいところです。 今後を含めコンピュータに詳しくない人がホームページを扱う状態でしたので、 ホームページビルダー枠でのシンプルな方法ですと助かります。 よろしくお願いいたします。 ----フラッシュタイトル作成でできたファイルの中身----------- <?xml version="1.0" encoding="utf-8" ?> <flashcontents> <setting> <size manual="0" width="900" height="220"></size> <view loop="1" scale="0" backcolor="0xFFFFFF"></view> </setting> <object type="0"> <common> <image> <image_effects> <image_effect transition="1" property="-1" transtime="1000" viewtime="4000"></image_effect> </image_effects> <link_effects> <link_effect path="(リンク先1).html" target=""></link_effect> </link_effects> </image> </common> <images> <image path="(画像1).png"></image> <image path="(画像2).png"></image> <image path="(画像3).png"></image> <image path="(画像4).png"></image> <image path="(画像5).png"></image> <image path="(画像6).png"></image> </images> </object> </flashcontents> ------------------------------------------

  • Accessフィールドのコントロールソース変更

    AccessのVBAを久々に作らざるを得なくなったのですが、 方法が判らずに困っています。 Accessで月毎に列を持っているクエリー(テーブル)から、 各月の数字を印刷するレポートを作成するために、 レポートで参照する列名を固定にして、クエリーの計算式(参照先)をVBAで変更しよう と考えてます。 例) 月別集計クエリーQ1(テーブルAとBをジョインして作成している) 列名 参照先 -------------- M1 A.M1 M2 A.M2 M3 A.M3 (略) M12 A.M12 M (可変)11月の時A.M11 N (可変) 11月の時B.M11 これに対して、 コントロールソースQ1を使用しているレポートを開く時のイベントで M及びNのコントロールソースを変更させようと思います。 "M11"の部分は実際には変数で値をセットします。 Dim db As DAO.Database Dim qd As DAO.QueryDef Dim fld As DAO.Field Dim tb As DAO.QueryDef Set db = CurrentDb() Set qd = db.QueryDefs("A") Set fld = qd.Fields("M11") Me("M").ControlSource = fld.Name というような方法で書くと、 「指定した式で参照されている'M'フィールドが見つかりません。」 と出ます。 Me.Controls("SS4JNSR").ControlSource = fld.Name でも同じです。 レポートのコントロールソースがジョインしていないクエリーだと、 Set fld = tb.Fields("M11") Me("M").ControlSource = fld.Name だけで動作するのですが、結合列の場合の参照の仕方が判りません。 教えて頂けないでしょうか?

  • 動的に追加したコントロールについて

    ASPをVBScriptで作成しています。 DBから検索した結果により、動的にコントロールを追加しているのですが、 この追加されたコントロールをループなどさせながら動的に指定して、 属性を変更したりしたいのですが、どのようにすればいいのでしょうか? 以下のように指定しても「オブジェクトがありません」となってしまいます。 Dim objTest Dim iCnt For iCnt = 0 To X   Set objTest = "Control" & iCnt   objTest.bgcolor = "#000000" Next ご存知の方いましたら、ご教授願います。

専門家に質問してみよう