• 締切済み

ACCESSで画像を参照する設定がうまくゆきません

あまり詳しくはないですが、ACCESSを使って仕事をしています。 ひとつのデータにひとつの画像をつけたデータを扱うのですが、画像を直接テーブルに貼り付けているので非常に容量を食ってしまいます。(JPG形式です) そこでネットで色々調べて、現在データを保管しているテーブルに、パス用のテキストボックスを追加し、既存のフォームにイメージを配置して表示させる方法を試していますが、うまくゆかず、「プロシージャの呼び出しまたは引数が不正です」というエラーが出てしまいます。 プロシージャというもの自体をはじめて知ったので、ネットで引っ張ってきたコードをそのまま貼り付けて使っている状態です(テキストボックスの名前やイメージの名前は変えています) 現状は以下の通りです。 ファイル形式:ACCESS2000 使用ソフト :ACCESS2003 テキストボックス名:パス イメージ名     :参照 フォームの「レコード移動時」の「イベントプロシージャ」に貼り付けたコード Option Compare Database Private Sub パス_BeforeUpdate(Cancel As Integer) End Sub Private Sub Form_Current() '指定された画像に入れ替える処理 '2006/04/15 pPoy On Error GoTo Err_Form_Current Dim myPath As String myPath = CurrentProject.Path If Not IsNull(Me!パス) Then Me!参照.Picture = myPath & "\" & Me!パス Else '新規レコードに移動した際はデザイン時の画像を表示 Me!参照.Picture = myPath & "花.JPG" End If Exit_Form_Current: Exit Sub Err_Form_Current: MsgBox Err.Description Resume Exit_Form_Current End Sub ちなみに、この「イベントプロシージャ」も突然消えてしまったりします。 非常に困っていますので、よろしくお願いいたしますm()m

  • setti
  • お礼率50% (2/4)

みんなの回答

回答No.4

テスト1とテスト2とのコードは全く同じものです。 Null関数を使うもLen関数を利用するも、これは好みの問題。 重要な差異ではありません。 ということは、作成過程で >「オブジェクトはこのプロパティまたはメソッドをサポートしていません」 の原因を紛れ込ませたということです。 <対策> もう一度、一から構築しなおす。 そうして、どこでミスを犯したのかを発見する。 初心者の間は、この最初に立ち返ってやり直すのが一番。 そういう中で覚えていくもんです。 なお、絶対に一度作成したプロシージャはコピペ移動してはいけませんよ。 これをやるとAccessは不可解な誤動作を開始します。 注意されてください。

setti
質問者

お礼

ありがとうございました。 もういちど、あたまからやり直してみます。

回答No.3

<テスト1> 1、テーブル[画像一覧]を回答のように作る。 2、画像データを用意しテーブルに登録。 3、フォームを生成する。 4、イメージを配置し名前を”参照”とする。 5、回答のコードをコピペする。 <テスト2> 1、全コードをメモ帳等に非難。 2、全てのコードを削除した上でフォームを保存。 3、再度フォームを開き、必要なコードのみを一回だけコピー。   質問の場合は、Form_Current()のみをコピー。 4、"パス"というカタカナ名を画像名に変更。   コントロールの名称も画像名に変更。   テーブルの列名も変更。   *カタカナ名を[]で囲む必要があるかどうかは未確認。   *でも、それは<テスト2>-4で確認できるでしょう。 多分、どちらも成功するでしょう。 でも、先に試されずみの<テスト1>から。 10分もあれば試せますので・・・。

setti
質問者

お礼

すみません。補足のところにテスト結果を入れようと思ってのですが、もう入力ができませんでしたので、お礼のところに書いてしまいます。 テスト1は成功しました イベントプロシージャは以下の通りいれました Private Sub Form_Current() 'On Error GoTo Err_Form_Load Dim myPath As String myPath = CurrentProject.Path If Len(Me.画像名 & "") <> 0 Then Me.参照.Picture = myPath & "\" & Me.画像名 Else Me!参照.Picture = myPath & "\gazou\花.JPG" End If Exit_Form_Current: Exit Sub Err_Form_Current: MsgBox Err.Description Resume Exit_Form_Current End Sub テスト2は下記エラーになりました。 「オブジェクトはこのプロパティまたはメソッドをサポートしていません」 イベントプロシージャは以下のようになっています Private Sub Form_Current() '指定された画像に入れ替える処理 '2006/04/15 pPoy On Error GoTo Err_Form_Current Dim myPath As String myPath = CurrentProject.Path If Not IsNull(Me!画像名) Then Me!画像名.Picture = myPath & "\" & Me!画像名 Else '新規レコードに移動した際はデザイン時の画像を表示 Me!画像名.Picture = myPath & "\gazou\花.JPG" End If Exit_Form_Current: Exit Sub Err_Form_Current: MsgBox Err.Description Resume Exit_Form_Current End Sub どうしたらよいでしょうか?

setti
質問者

補足

ありがとうございます。 実は、休みに入ってしまい、火曜日までaccessで実験できません。 休みあけに実験してみて、またご連絡させてください。m()m

回答No.2

テーブル[画像一覧] ID__画像名 01__桃太郎.jpg 02__marii_01.gif 03______________ フォーム[画像一覧] Option Compare Database Option Explicit Private Sub Form_Current()   On Error GoTo Err_Form_Load   Dim myPath As String   myPath = CurrentProject.Path   If Len(Me.画像名 & "") <> 0 Then     Me.参照.Picture = myPath & "\" & Me.画像名   Else     Me!参照.Picture = myPath & "\hinano001.gif"   End If Exit_Form_Current:   Exit Sub Err_Form_Current:   MsgBox Err.Description   Resume Exit_Form_Current End Sub これで、テーブル[画像一覧]の画像を順次表示します。 ということは、コード自体には表面的には誤まりはないということです。 Private Sub Form_Current()   'On Error GoTo Err_Form_Load   Dim myPath As String このようにOn Error文を無効化されてエラー箇所を探されたら解決すると思いますよ。

setti
質問者

補足

ご指示のように’をつけてみましたが、エラー箇所の表示はなく、以前と同じにエラー表示が出てしまいました…

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

意図している処理と合致するかどうかわかりませんが、 単に「イメージ」をフォーム内に配置し、そのコントロールソースに、パスを書いたフィールドを指定すればよいかと思います。 また、コントロールソースには式ビルダが使えます。 なので、「表示したい画像は、Cドライブ直下に製品名+jpgで保管してある」というような場合、 コントロールソースを ="C:\" & [製品名] & ".jpg" というような記述をします。

setti
質問者

補足

早速ありがとうございます。 「イメージ」のプロパティを探しましたが、「コントロールソース」はありませんでした。「ハイパーリンクアドレス」のことでしょうか?

関連するQ&A

  • 「ACCESS」レポートで、外部画像を多数表示できない

    はじめまして。ACCESS初心者ですが、よろしくお願いします。 レポートで外部画像を多数表示させたく、サンプルを公開しているサイト様のソースを使用しました。 サンプルは、1枚表示のものだったので、 「Me!img_○.Picture = myPath & "\" & [番号] & "\○.jpg"」 の部分を追加してみたのですが、この場合、[番号]フォルダに指定される画像が全てないと、そのレポートが白紙になってしまいます。 指定の画像がなくても、他の画像は表示される方法はありますでしょうか。ご回答よろしくお願いいたします。 Option Compare Database Private Sub 詳細_Print(Cancel As Integer, PrintCount As Integer) '指定された画像をセットする処理 '2006/04/22 pPoy On Error GoTo Err_詳細_Print Dim myPath As String myPath = CurrentProject.Path '※ Me!img_1.Picture = myPath & "\" & [番号] & "\1.jpg" Me!img_2.Picture = myPath & "\" & [番号] & "\2.jpg"   Me!img_3.Picture = myPath & "\" & [番号] & "\3.jpg" Exit_詳細_Print: Exit Sub Err_詳細_Print: 'ファイルが見つからなかった場合はデザイン時の画像を表示 Me!img_1.Picture = myPath & "\no_img.gif" Me!img_2.Picture = myPath & "\no_img.gif" Resume Exit_詳細_Print End Sub

  • Access2013で確認メッセージを消すには

    画像ファイルの管理データベースを作っています。 管理データベースには、ローカルファイルのフルパスのみ記録し ボタンをクリックしたとき、Windowsフォトビューアで プレビューするようにコードを書きました。 しかし、JPGファイルを開くときは問題ないのですが PNGファイルを開くとき、毎回Microsoft Officeの確認メッセージ ~を開いています。ファイルにはウイルスやコンピューターに問題を起こす 可能性のあるものが含まれていることがあります。 このファイルが信頼できる所からのものか確かめてください。 ファイルを開きますか? が表示されます。 メッセージを表示させない為にはどうしたら良いか、ご教授願います。 以下、ファイルを開く為に作ったコード2種です。 実行結果は同じです。 コード1 Private Sub OpenBotan_Click() Dim strInput As String On Error GoTo Error_GetUserAddress strInput = Me.パス Application.FollowHyperlink strInput, , True GetUserAddress = True Exit_GetUserAddress: Exit Sub Error_GetUserAddress: MsgBox Err & ": " & Err.Description GetUserAddress = False Resume Exit_GetUserAddress End Sub コード2 Private Sub イメージ21_Click() On Error GoTo エラー Dim myTextValue As TextBox Set myTextValue = Me.パス If IsNull(myTextValue) Then MsgBox "URLが未入力です。": Exit Sub Me.イメージ21.HyperlinkAddress = "" '--- A Me.イメージ21.HyperlinkAddress = myTextValue Exit Sub エラー: MsgBox Err.Number & " : " & Err.Description Exit Sub End Sub

  • Access レコードのロック

    Access2000 フォームを読み込んだとき,テキストボックス"受付No."欄が 入力されている場合,テキストボックス"件名"欄をデータの変更が 出来ないようにロックを掛けたいのです。 下記のイベントプロシージャを組んだのですが,全くロックされません。 VBA初心者なので多分とんでもない間違いをしていると思いますが, どこが違うのかご指摘下さい。 Private Sub Form_Load() If Me.受付No. <> "" Then Me.件名.Locked = True Me.件名.Enabled = False End If End Sub

  • アクセス フォームのテキストボックス内の文字列

    お世話になります。 アクセス使い始めて1ヶ月ぐらいの初心者です。 アクセスのフォーム1に、ファイル参照ボタンを作って フォーム1にテキストボックスも作り、参照ボタンで選んだ path?をテキストボックスに入るようにしました。 次にそのテキストボックスに入ったpathを利用して、外部からテキストファイルを インポートしたいのですが、 インポートボタンを作って、ボタンを押したらテキストボックスに参照して入ってるpathを 取得してインポートできるようにしたいのですが、、、 知恵をお貸しいただけたら嬉しいです。 今作ったのは Private Sub コマンド44_Click() Dim objFileDialog As Object 'FileDialog Dim stTitle As String 'タイトル Dim stPath As String 'ファイルパス Dim stInitialFileName As String '初期ファイルパス If Me.chk.Value = -1 Then stTitle = "ファイル参照" '★ stInitialFileName = "C:\Test\" '★ Set objFileDialog = _ Application.FileDialog(msoFileDialogFilePicker) Else Const msoFileDialogFolderPicker = 4 'フォルダの参照 stTitle = "フォルダ参照" '★ stInitialFileName = "C:\Test\" '★ Set objFileDialog = _ Application.FileDialog(msoFileDialogFolderPicker) End If With objFileDialog 'ダイアログボックスのタイトル .Title = stTitle '初期フォルダパス .InitialFileName = stInitialFileName If .Show = False Then 'キャンセル時 GoTo Exit_SUB Else '★選択時フォルダパス表示 stPath = .SelectedItems(1) Me.テキスト45.Value = stPath End If End With Exit_SUB: Set objFileDialog = Nothing End Sub とゆう感じでテキストボックス45に入ったpathを利用してインポートしたいのです、 文章が読みにくくて申し訳ないです、 よろしくおねがいします。

  • accessで、フォームの検索をしたいのです。

    今ACCESSで、データ管理をしているのですが、どうしてもうまくいかなくて、困っています。 毎日の出来事を記述するテーブル用のフォームを作って、記述していて、そのデータがたまってきています。 他のフォームに、検索用のテキストボックスとコマンドボックスを作って検索したいのです。 コントロールウィザードを使うと、完全一致のデータしかでてこないのですが、部分一致のレコードを表示させるにはどうすればいいのですか? 教えていただけるとうれしいです。 コントロールウィザードを使うと以下のようになります。多分少しどこかを変えるといいのではないかと思うのです。どうか、よろしくお願いします。 Private Sub コマンド144_Click() On Error GoTo Err_コマンド144_Click Dim stDocName As String Dim stLinkCriteria As String stDocName = ChrW(21839) & ChrW(12356) & ChrW(21512) & ChrW(12431) & ChrW(12379) & ChrW(12513) & ChrW(12514) stLinkCriteria = "[内容]=" & "'" & Me![テキスト105] & "'" DoCmd.OpenForm stDocName, , , stLinkCriteria Exit_コマンド144_Click: Exit Sub Err_コマンド144_Click: MsgBox Err.Description Resume Exit_コマンド144_Click End Sub もしかして。。と思い、以下の部分、 stLinkCriteria = "[内容]=" & "'" & Me![テキスト105] & "'" を次のように変えてみたけれど、やっぱりうまくいきませんでした。 stLinkCriteria = "[内容]=" & "'" & "*" & Me![テキスト105] & "*" & "'" よろしくお願いします。

  • Access2007で、鍵のDBを作っています。レポートに鍵の画像を挿

    Access2007で、鍵のDBを作っています。レポートに鍵の画像を挿入したいと思い、http://www.accessclub.jp/samplefile/samplefile_77.htmを参考にしたのですが、このHPで紹介しているイメージコントロールの貼り付けの部分で指定したように代表?として貼り付けた画像のレコードしか出てきません。(現在、レコードは3つあります。) テーブルは「鍵 台帳」 鍵 記号(テキスト型) 鍵 名称  ・  ・  ・ 鍵画像パス(テキスト型) があり、 レポートの詳細セクション、イベントタブのファーマット時に、[イベントプロシージャ]にし、 Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer) On Error GoTo エラー発生 Me.ラベル0.Visible = False Me.イメージ34.Visible = True If Not IsNull(Me.鍵画像パス) Then Me.イメージ34.Picture = Me.鍵画像パス Else Me.ラベル0.Visible = True Me.イメージ34.Visible = False End If Exit Sub エラー発生: Me.イメージ34.Visible = False Me.ラベル0.Visible = True Resume Next End Sub と、してみました。ラベル0は「鍵 記号」フィールドに対応、イメージ34はイメージコントロールで貼り付け、書式タブのピクチャでC:¥Documents and Settings¥〇〇¥My Documents¥△△¥鍵管理DB\KM 611.jpgとしました。鍵 画像パスフィールドにも同じようにパスが入っています。(鍵 記号と鍵の画像ファイルは、同じ名前にしています。) このようにし、印刷プレビューにしようとすると、「パラメータの入力 鍵 画像.鍵 画像」と出てきます。何も入力せず、「OK」を押すと、プレビューでKM 611のレコードのみ出てきます。 レポートには、鍵 画像パスフィールドと、「鍵 履歴」テーブルもサブレポートで入れています。 ちなみに、鍵 履歴テーブルは ID 鍵 記号 履歴 日付  ・  ・ のようになっており、鍵 記号を「鍵 台帳」テーブルの鍵 記号フィールドとリレーションさせています。 アクセス超初心者でやっとここまでこぎつけたので、後は、なぜ出来ないのかさっぱりわかりません。 どうか、お助けいただければ、幸いです。 厚かましいですが、教えて頂けるようであれば、プロシージャを入れる場合なども、どこをクリックしてから等細かくご教授願えますでしょうか。 よろしくお願い致します。

  • フォーム内のテキストボックスの値を参照するには?

    モジュールからフォーム上のテキストボックスに入力された値を参照する方法で質問です。 内容としては、テキストボックスに入力された日付(yyyymmdd)をファイル名にもつCSVファイルをインポートするといったものです。 フォーム名:Form1 テキストボックス名:TBox1 インポート元:C:\yyyymmdd.csv インポート先:インポートテーブル モジュール記述先:標準モジュール Function Import() On Error GoTo Import_Err Dim FilePath As String FilePath = "C:\" & Format(Form1. TBox1. Value, "yyyymmdd") & ".csv" DoCmd.TransferText acImportDelim, "インポート定義", "インポートテーブル", FilePath Import_Exit: Exit Function Import_Err: Resume Import_Exit End Function 以上の様なモジュールを組んでみましたがインポート出来ませんでした。 エラーは出ませんでしたが何も起こらないといった状態です。 モジュールの部分についてはなんとなくわかるのですが、フォーム側の設定?がよくわかりません。 あと何をどのようにすればテキストボックス内の値を参照可能になりますでしょうか? 何卒よろしくお願いいたします。

  • アクセス2000のレポートでイメージを表示させたいのですが

    アクセス2000でデータベースを作成しています。レポートについて分からないことがあるので教えてください。 ・ImageFileというフィールドにイメージファイルのフルパスを入力しておき、フォーム上のPictureを配置し、下記のようなコードを記述して、Pictureに、イメージファイルを読み込んで表示させています。 Private Sub Form_Current() If IsNull(Me.ImageFile) Then   Me.イメージ.Picture = "d:\nonimage.jpg" Else: Me.イメージ.Picture = Me![ImageFile] End If End Sub ・同じような方法でレポートでイメージを印刷させることは出来ないでしょうか?  尚、ImageFileはレコード毎に異なるものを使用しています。

  • ACCESS

    現在以下のシステムを検討しています。 (1)ログインフォームと(2)トップフォーム(3)注文フォームが別々に存在しており、 (1)ログインフォームは  ・ログインID入力用のテキストボックスが一個  ・パスワード入力用のテキストボックスが一個  ・ログインボタンが1個  設置されています。 以下はログインボタンクリック時に動作するプログラムです。 Private Sub cmdLogIn_Click() Dim Res If IsNull(Me.txtID) Then MsgBox "IDを入力してください" Me.txtID.SetFocus Exit Sub End If If IsNull(Me.txtPass) Then MsgBox "パスワードを入力してください" Me.txtPass.SetFocus Exit Sub End If Res = DLookup("パスワード", "T顧客", _ "顧客ID='" & Replace(Me.txtID, "'", "''") & "'") If IsNull(Res) Then MsgBox "該当するIDはありません。正しいIDを入力してください。" Me.txtID.SetFocus Exit Sub End If If Res = Me.txtPass Then DoCmd.OpenForm "注文フォーム" '----ID,pass合致でフォームを開く。 Me.txtID = Me.txtID2 Me.txtPass = Me.txtPass2 DoCmd.Close acForm, "Fログイン" Else MsgBox "パスワードが異なります。", vbOKOnly + vbCritical Me.txtPass.SetFocus End If End Sub (2)トップフォームは  商品のリストが画像付き(商品一個につき画像一個)  で示され、画像を押すと商品別に作成してある注文フォームに進むのですが、  ログイン完了していないとログインを促すメッセージが出て注文フォームが開かないよう  にしています。  トップフォームにはテキストボックスを2個不可視の状態で配置しております。  以下は商品画像に埋め込んであるコマンドです。 Private Sub 商品画像 1_Click() Dim Res If IsNull(Me.txtID) Then MsgBox "ログインしてください" Exit Sub End If If IsNull(Me.txtPass) Then MsgBox "ログインしてください" Exit Sub End If If Res = Me.txtPass Then DoCmd.OpenForm "商品名" '----ID,pass合致で注文フォームを開く。 End If End Sub   (3)注文フォームは  ・数量選択のコントロールボックス  ・注文ボタン  ・キャンセルボタン  を設置しています。 【以下が質問内容になります】 「ロフインフォーム」内の入力値(テキストボックスに入力されていたIDやパスワード値)を注文フォーム内のテキストボックスに取得させる(あるいは設定させる)にはどのようにすればよいのでしょうか? 注文フォームにはテキストボックス2個( ID入力用と Password入力用)を不可視で配置しています。こちらのテキストボックス2個については手動入力は行わず、注文フォームが開いた際にログイン時の ID, Paswordがテキストボックスの中に自動的に入力あるいは設定されるようにしたいのですが、どのようにすればよいかがわかりません。 因みにログイン ID,Passwordは複数セットあり、ユーザーがログイン完了後、注文フォームを閉じるまでの間は 同一のID, Paswordの内容を保持したいと考えています。 上記の中にID,Paswordを保持させるようなコードを入れることは可能でしょうか? 注文フォームを開く際のコードに何か入れることができるのではないかと考えていたの ですが、よい案が浮かびません。 他によいやり方などがあれば教えていただけますでしょうか? よろしくお願いします。

  • access vbaのコンパイルエラーについて

    お世話になります。 vbaは超初心者なので、説明が良くないかもしれませんがご容赦ください。 フォーム上のレコード数を一件に制限する必要があり、下記サイトを参考に作成中のデータベースに構文をあてはめてみました。 http://hatenachips.blog34.fc2.com/blog-entry-189.html サブフォーム移動時のプロシージャは、 Public Sub Form_Current() Me.AllowAdditions = Me.Recordset.RecordCount < 1 End Sub メインフォーム移動時の動作として、対象のサブフォーム名を入れて下記のような構文を 作りました。 Private Sub Form_Current() Me.新規入力 サブフォーム.Form.Form_Current End Sub ところが、「コンパイルエラー 変数が定義されていません」となってしまいました。 サブフォームコントロール名はデザインビューのプロパティで、タブの「すべて」の名前の欄にあるものだと思っているのですが、もしかしてこれが違っているのでしょうか? エラーの意味がよくわからず、困り果てています。 どなたかお力をお貸しください。 よろしくお願いします。

専門家に質問してみよう