Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


69 / 500 ページ ←次へ | 前へ→

【11931】Re:帳票フォームと単票フォームの連携
発言  よろずや  - 11/1/23(日) 23:03 -

引用なし
パスワード
   ▼さつき さん:
>そもそもOpenArgs:=Me.連番のところでは、簡単に値を渡せるのに、

この渡した値はどこで使っているのですか?
見た限りでは使われていないようですが...
・ツリー全体表示

【11930】Re:帳票フォームと単票フォームの連携
質問  さつき  - 11/1/23(日) 20:57 -

引用なし
パスワード
   ▼よろずや さん:
ご回答ありがとうございました。

>他のフォームからは参照のみで書き込みはしないような場合には、
>Private 変数にして、Get Property を使うこともあります。
Get Property について調べてみましたが、ちょっと難しそうだったので、

>変数ではなくフォーム上のテキストボックスにしてしまいます。
>(デバッグ時以外は不可視にします)
こちらの方法でやってみました。
帳票フォームでの検索時に、テキストボックスtxtfilterに
検索条件を保存しておき、↓

Private Sub setfilter()

Dim strfilter As String
Dim ctl As Access.Control

For Each ctl In Me.Section(acHeader).Controls
if ctl.ControlType = Access.acCheckBox
 If ctl.Value Then
  strfilter = strfilter & " and 資料名 like '*" & ctl.Controls.tag & "*'"
 End If
End if
Next

Me.Filter = mid(strfilter,6)
Me.FilterOn = true
Me.txtfilter.value = mid(strfilter,6)

単票フォームを表示するボタンのクリックイベントに下記のようにしたら
DoCmd.OpenForm FormName:="単票フォーム", OpenArgs:=Me.連番
  With Forms("単票フォーム").RecordsetClone
    .Filter = Me.txtfilter.value
    .FilterOn = True
    .FindFirst "連番 = '" & Me.連番 & "'"
    If Not .EOF Then
      DoCmd.GoToRecord Record:=acGoTo _
              , Offset:=.AbsolutePosition + 1
    End If
  End With

「オブジェクトは、このプロパティまたはメソッドをサポートしていません」
というエラーがでます。
どのように直したらいいでしょうか?

そもそもOpenArgs:=Me.連番のところでは、簡単に値を渡せるのに、
filter設定は難しいですね。
引き続き、ご指導お願いいたします。
・ツリー全体表示

【11929】Re:帳票フォームと単票フォームの連携
回答  よろずや  - 11/1/23(日) 7:47 -

引用なし
パスワード
   各モジュールの先頭に
Option Explicit
を追記しましょう。
そうすれば、その変数が使えないものであればエラーになります。
これは、バグを作り込まない為の基本中の基本です。
フォームで使っている変数を他のフォームからも使いたい場合は、
モジュールの先頭(Sub や Function よりも上という意味)に
Public 変数として宣言します。
他のフォームからは参照のみで書き込みはしないような場合には、
Private 変数にして、Get Property を使うこともあります。
これらを他のフォームから使用する場合は、
フォームを指定して参照することになります。
標準モジュールの Public 変数にした場合は、フォームの指定も不要です。
ただ、Public 変数の多用はバグの温床になります。
使用は最小限に留め、ソースには必ずコメントを付記しましょう。
(なぜバグの温床になるのか?それはプログラムを作るのが人だから)

私的には、デバッグ時の可視化の為に、
変数ではなくフォーム上のテキストボックスにしてしまいます。
(デバッグ時以外は不可視にします)
・ツリー全体表示

【11928】Re:帳票フォームと単票フォームの連携
質問  さつき  - 11/1/23(日) 1:20 -

引用なし
パスワード
   ▼よろずや さん:
ご回答ありがとうございます。

>意味不明です。
>変数strfilter なんて初登場ですから、どう使っているのか、
>使っているのに中身がから?
>なんで mid(strfilter,6) ?
失礼いたしました。説明不足でした。

帳票フォームのヘッダーにチェックボックスが複数個あり、
それぞれの更新後イベントに下記の
フィルター設定プロシージャーを呼び出すようにしてあります。

Private Sub setfilter()

Dim strfilter As String
Dim ctl As Access.Control

For Each ctl In Me.Section(acHeader).Controls
if ctl.ControlType = Access.acCheckBox
 If ctl.Value Then
  strfilter = strfilter & " and 資料名 like '*" & ctl.Controls.tag & "*'"
 End If
End if
Next

Me.Filter = mid(strfilter,6)
Me.FilterOn = true

この条件で検索した結果の1レコードを選んでボタンを押すと、
単票フォームを表示させるようにすることが、
おかげさまでできるようになりました。
プロシージャが違うので、strfilterの値を引き継ぐようにしないといけないのかどうかよくわからなかったので、意味不明なご質問になってしまいました。
申し訳ありません。
どうか引き続きご教授お願いいたします。
・ツリー全体表示

【11927】Re:帳票フォームと単票フォームの連携
発言  よろずや  - 11/1/23(日) 0:10 -

引用なし
パスワード
   ▼さつき さん:
>帳票フォームで使用したフィルター用の変数strfilterをそのまま使って、
>単票フォームでも絞り込んだ結果だけを表示させるため、下記のように
>しましたが、strfilterの中身はからで、上手く検索できません。

意味不明です。
変数strfilter なんて初登場ですから、どう使っているのか、
使っているのに中身がから?
なんで mid(strfilter,6) ?
・ツリー全体表示

【11926】Re:帳票フォームと単票フォームの連携
質問  さつき  - 11/1/22(土) 22:13 -

引用なし
パスワード
   ▼よろずや さん:
ご回答ありがとうございます。

> .FindFirst "連番 = '" & Me.連番 & "'"
上記のように記述したらできました。
ありがとうございました。
リンクも、フォームのプロパティでパイパーリンク設定をしたら、
リンクできるようになりました。

もうひとつだけ教えてください。
帳票フォームで使用したフィルター用の変数strfilterをそのまま使って、
単票フォームでも絞り込んだ結果だけを表示させるため、下記のように
しましたが、strfilterの中身はからで、上手く検索できません。
どのように直したらよいでしょうか?
strfilterをグローバル変数にはしないでおきたいのですが。

With Forms("単票フォーム").RecordsetClone
    .Filter = mid(strfilter,6)
    .FilterOn = True
    .FindFirst "連番 = '" & Me.連番 & "'"
    If Not .EOF Then
      DoCmd.GoToRecord Record:=acGoTo _
              , Offset:=.AbsolutePosition + 1
    End If
  End With
・ツリー全体表示

【11925】Re:帳票フォームと単票フォームの連携
回答  よろずや  - 11/1/21(金) 23:49 -

引用なし
パスワード
   ▼さつき さん:
>本日早速教えて頂いた通りにやってみましたが、
>クエリとしては、きれいに表示されますが、コードの方はやはり、
>.FindFirst "連番 = " & Me.連番
>のところで、「a0003を有効なフィールド名または式として認識できません」
>というエラーがでます。

あっ、そっちの話ね。
元の idフィールド は、数値型だったけど
今度は文字列型になったのでエラーになる。

.FindFirst "連番 = '" & Me.連番 & "'"
・ツリー全体表示

【11924】Re:帳票フォームと単票フォームの連携
質問  さつき  - 11/1/21(金) 19:35 -

引用なし
パスワード
   ▼よろずや さん:
ご回答ありがとうございます。

>ユニオンクエリ じゃなくすればよろしいかと。
>SELECT A.連番, A.質問, A.回答, A.リンク FROM (
>  SELECT "a"& format((SELECT COUNT(*) FROM [aa] AS [aaaa] WHERE [aaaa]![ID] <= [aa]![ID]),"0000") AS 連番, aa.質問, aa.回答, aa.リンク
>  FROM aa
>  UNION ALL
>  SELECT "b" & format((SELECT COUNT(*) FROM [bb] AS [bbbb] WHERE [bbbb]![ID] <= [bb]![ID]),"0000") AS 連番, bb.質問, bb.回答, bb.リンク
>  FROM bb
>) AS A
>ORDER BY A.連番;
本日早速教えて頂いた通りにやってみましたが、
クエリとしては、きれいに表示されますが、コードの方はやはり、
.FindFirst "連番 = " & Me.連番
のところで、「a0003を有効なフィールド名または式として認識できません」
というエラーがでます。
バージョンなどの問題でしょうか?ACCESS2003を使っています。
ファイル形式は、ACCESS2000になっています。

ハイパーリンクも選択クエリなら有効なはずが、リンク状態になっていません。
どこを直したらよいでしょうか?
・ツリー全体表示

【11923】Re:帳票フォームと単票フォームの連携
回答  よろずや  - 11/1/20(木) 22:00 -

引用なし
パスワード
   ▼さつき さん:
>ユニオンクエリ↓
>SELECT "a"& format((SELECT COUNT(*) FROM [aa] AS [aaaa] WHERE [aaaa]![ID] <= [aa]![ID]),"0000") AS 連番, aa.質問, aa.回答, aa.リンク
>FROM aa;
>
>UNION SELECT "b" & format((SELECT COUNT(*) FROM [bb] AS [bbbb] WHERE [bbbb]![ID] <= [bb]![ID]),"0000") AS 連番, bb.質問, bb.回答, bb.リンク
>FROM bb;

ユニオンクエリ じゃなくすればよろしいかと。
SELECT A.連番, A.質問, A.回答, A.リンク FROM (
  SELECT "a"& format((SELECT COUNT(*) FROM [aa] AS [aaaa] WHERE [aaaa]![ID] <= [aa]![ID]),"0000") AS 連番, aa.質問, aa.回答, aa.リンク
  FROM aa
  UNION ALL
  SELECT "b" & format((SELECT COUNT(*) FROM [bb] AS [bbbb] WHERE [bbbb]![ID] <= [bb]![ID]),"0000") AS 連番, bb.質問, bb.回答, bb.リンク
  FROM bb
) AS A
ORDER BY A.連番;

UNION は、重複削除処理が無駄に走りますので、
UNION ALL にしましょう。
・ツリー全体表示

【11922】帳票フォームと単票フォームの連携
質問  さつき  - 11/1/20(木) 1:26 -

引用なし
パスワード
   こんにちは、さつきと申します。
いつも大変お世話になり、ありがとうございます。

テーブル2つをユニオンクエリーで結合し、連番をつけました。
帳票フォーム上でフォーカスのあるレコードをクリックしたら、同じユニオンクエリーをデータソースとする単票フォームで、そのレコードの詳細が見られるようにしたいのです。
ユニオンクエリ↓
SELECT "a"& format((SELECT COUNT(*) FROM [aa] AS [aaaa] WHERE [aaaa]![ID] <= [aa]![ID]),"0000") AS 連番, aa.質問, aa.回答, aa.リンク
FROM aa;

UNION SELECT "b" & format((SELECT COUNT(*) FROM [bb] AS [bbbb] WHERE [bbbb]![ID] <= [bb]![ID]),"0000") AS 連番, bb.質問, bb.回答, bb.リンク
FROM bb;

帳票フォームのフィールドクリック時イベントに↓
DoCmd.OpenForm FormName:="単票フォーム", OpenArgs:=Me.連番

  With Forms("単票フォーム").RecordsetClone
    .FindFirst "連番 = " & Me.連番
    If Not .EOF Then
      DoCmd.GoToRecord Record:=acGoTo _
              , Offset:=.AbsolutePosition + 1
    End If
  End With

のように書きましたが、
.FindFirst "連番 = " & Me.連番
のところで、「Me.連番を有効なフィールド名または式として認識できません」というエラーがでます。ひとつのテーブルだけをデータソースにしてみたら、元からあるidフィールドを使えばエラーは出ません。
また、リンクフィールドに入っているハイパーリンクデータは、普通の文字列となり、リンクを開くことはできません。選択クエリならリンクは開けるのですが。
どのように直したらいいでしょうか?
どなたかご教示お願いいたします。
・ツリー全体表示

【11921】Re:エディットコントロールを使った検索...
お礼  さつき  - 11/1/18(火) 23:16 -

引用なし
パスワード
   ▼よろずや さん、レスありがとうございます。

>.Text は、そのコントロールがフォーカスを持っているときしか使えません。
>ではどうするかというと、代わりに .Value を使います。
kensaku = テキスト5.Value
としたらできました。
ありがとうございました。
・ツリー全体表示

【11920】Re:エディットコントロールを使った検索...
回答  よろずや  - 11/1/18(火) 6:47 -

引用なし
パスワード
   Access は、VB とは色々な所で異なります。
その一つが .Textプロパティです。
.Text は、そのコントロールがフォーカスを持っているときしか使えません。
ではどうするかというと、代わりに .Value を使います。
・ツリー全体表示

【11919】エディットコントロールを使った検索方法
質問  さつき  - 11/1/18(火) 0:18 -

引用なし
パスワード
   再びこんにちは、さつきと申します。
下記ページに「テキスト 又は リッチテキストでの複数選択方法」という投稿がありましたので、VBではありますが、コードを貼り付けて、DHTMLエディットコントロールを追加し、動かしてみたら、上手くいきました。
h tp://www.gizcollabo.jp/vbtomo/log/archive/vbqanda_33322_0.html#Num33333-0
でも、検索用のフォームですので、
kensaku = "プログラム" を kensaku = テキスト5.Text
などというふうに変えたところ、
コントロールがフォーカスを取得していないときに、コントロールのプロパティまたはメソッドを参照することはできません。
というエラーが kensaku = テキスト5.Text のところで出ます。
どのように直したらよいでしょうか?
どなたかご教示お願いいたします。

Private Sub コマンド7_Click()
  Dim Doc As Object    'MSHTML.HTMLDocument
  Dim Body As Object   'MSHTML.HTMLBody
  Dim objRange As Object 'MSHTML.IHTMLTxtRange
  Dim BMK As String
  Dim kensaku As String
  
  kensaku = "プログラム"
  If LenB(kensaku) = 0 Then Exit Sub
  Set Doc = DHTMLEdit8.DOM
  Set Body = Doc.Body
  Set objRange = Body.createTextRange
  
  Do While objRange.findText(kensaku)
    If Len(BMK) = 0 Then BMK = objRange.getBookmark
    objRange.ExecCommand "BackColor", False, "YELLOW"
    objRange.collapse False
  Loop

  If Len(BMK) Then
    objRange.moveToBookmark BMK
    objRange.scrollIntoView
  End If

  Set objRange = Nothing
  Set Body = Nothing
  Set Doc = Nothing
 
End Sub
・ツリー全体表示

【11918】Re:Excelファイルのオートシェイプ上のテ...
お礼  さつき  - 11/1/17(月) 22:55 -

引用なし
パスワード
   小僧 さん、こちらにもレスをつけて頂き、ありがとうございます。

>こちらのエラーが出ると同時に
>問題のある箇所が反転されると思われますが、
>11904 でご提示されたコードのどちらが反転しておりますでしょうか。
エラーが出るときは、
イベントプロパティに指定した式クリック時でエラーが発生しました。
ユーザー定義型は定義されていません。
というエラー表示の下に
マクロ名、ユーザー定義関数名、[イベントプロシージャ]以外の式が
指定されています。関数、イベント、マクロの評価でエラーが発生しました。
と書かれており、ヘルプの表示というボタンがでます。
コードの画面には、戻らないので、反転表示もしていない(フォーム表示のまま)
状態です。
・ツリー全体表示

【11917】Re:Rich TextBox コントロール
お礼  さつき  - 11/1/17(月) 20:45 -

引用なし
パスワード
   小僧 さん
ご回答ありがとうございます。

>ちゃんとページの半ば過ぎに リッチテキストの参照がない場合の
>対応方法も記載されていますね。
ほんとですね。
”<参照> をクリックして対象ライブラリを直接指定してください”
と書いてありました。下の方なので見逃してしまいました。

>別方法を考えた方が良さそうな気がします。
Web Browserコントロールの方が難しそうだったので、
敬遠していましたが、この際、仕方ないですね。
ご教授ありがとうございました。
・ツリー全体表示

【11916】Re:検索結果を一覧に表示する方法
回答  小僧  - 11/1/17(月) 10:02 -

引用なし
パスワード
   ▼なりん さん:
こんにちは。

メインフォームからすると
FormSerchIchiranView という名前は
Formオブジェクト - コントロールオブジェクト - ソースオブジェクト
の名前という扱いになります。

Debug.Print Me.Controls("SUB").Form.Name

で確かめてみて下さい。


今回のコードですと

>  With FormSerchIchiranView

  With Me.Controls("SUB").Form

に変更するとうまく行くかと思われます。


  With Me![SUB].Form
  With Me.SUB.Form

の様な書き方でも大丈夫ですね。
・ツリー全体表示

【11915】Re:Rich TextBox コントロール
回答  小僧  - 11/1/17(月) 9:41 -

引用なし
パスワード
   ▼さつき さん:
こんにちは。

>YU-TANGさんという方が書かれた「検索語句を強調表示する方法」

YU-TANG's MS-Access Discoveryさんより
h tp://www.f3.dion.ne.jp/~element/msaccess/AcTipsFrmImpressiveSearchWord.html

ちゃんとページの半ば過ぎに リッチテキストの参照がない場合の
対応方法も記載されていますね。

ですが、

マイクロソフトサポートオンライン
[ACC2003] Access 2003 でリッチ テキスト ボックス コントロールを使用できない
h tp://support.microsoft.com/kb/840194/JA/

となってしまっているので
(YU-TANGさんの記事の公開が2003/8/18、
 マイクロソフトの記事更新が2004/12/28)
別方法を考えた方が良さそうな気がします。
・ツリー全体表示

【11914】Re:Excelファイルのオートシェイプ上のテ...
発言  小僧  - 11/1/17(月) 9:21 -

引用なし
パスワード
   ▼さつき さん、雅さん:
こんにちは。

> イベントプロパティに指定した式クリック時でエラーが発生しました。
> ユーザー定義型は定義されていません。

こちらのエラーが出ると同時に
問題のある箇所が反転されると思われますが、
11904 でご提示されたコードのどちらが反転しておりますでしょうか。

もしご提示されていない箇所が反転しておりましたら
ご提示して頂けると解決するかもしれませんね。
・ツリー全体表示

【11913】検索結果を一覧に表示する方法
質問  なりん  - 11/1/16(日) 0:43 -

引用なし
パスワード
   OS:windows xp
Access Version:2003

検索して一覧を表示するものを作成しています。

フォームを2個作成しました。
・FormSerch・・・検索ボタン配置
・FormSerchIchiranView・・・検索結果を表示用

メインとなるフォーム「FormSerch」の中にサブフォームを「SUB」を配置し、
このサブフォームのプロパティのソースオブジェクトで「FormSerchIchiranView」を
指定しています。


「FormSerch」の検索ボタン押下時のロジックを記載しているのですが、
「FormSerchIchiranView」を認識してくれません。
エラー内容:実行時エラー'2465'指定した式で参照されている'FormSerchIchiranView'フィールドが見つかりません。となります。

フォームやサブフォームのプロパティは特に変更していません。
何か設定漏れなどあるでしょうか?
「FormSerch」のフォームデザインを開くとちゃんと「FormSerchIchiranView」が
配置された状態で表示されるので認識をされているとは思っているのですが・

以下ロジックの抜粋 *SQLを発行してデータは取得できています。

'DB接続
rs.Open strSelectSql & strFromSql & strWhereSql, Application.CurrentProject.Connection, _
                          adOpenKeyset, adLockOptimistic

If Not rs.EOF Then
  'データが存在する場合
  With FormSerchIchiranView ●●ここです●●
    'データを一覧に設定
    Set .Recordset = rs
      .txt0.ControlSource = "ININAME"
      .txt1.ControlSource = "iNN"
      .txt2.ControlSource = "COMPANYNM"
      .txt3.ControlSource = "COMPANYAFFI"
      .txtCount = rs.RecordCount
    Me.SUB.Requery
    Me.SUB.SetFocus
  End With
Else
  'データが存在しない場合
  'メッセージボックスを表示し、一覧クリア
  MsgBox "データがありません", vbInformation, "データ無し"
  With FormSerchIchiranView
    .txt0.ControlSource = ""
    .txt1.ControlSource = ""
    .txt2.ControlSource = ""
    .txt3.ControlSource = ""
    .RecordSource = ""
    .txtCount = "0"
    Me.SUB.Requery
  End With
End If
・ツリー全体表示

【11912】Rich TextBox コントロール
質問  さつき  - 11/1/15(土) 15:06 -

引用なし
パスワード
   こんにちは、さつきと申します。

検索結果の文章中の検索語に色をつけて、判りやすくしたいと思い、
YU-TANGさんという方が書かれた「検索語句を強調表示する方法」
を使ってみようと、
Rich TextBox コントロールを挿入しようとしましたら、
リストの中に「Microsoft Rich TextBox Control」が見つかりません。
会社のパソコンでも同じく見つかりません。

あちこち調べてみて、ファイル形式の変換なども
行なってみましたが、どうしても表示されません。
ACCESSのバージョンは2003です。
どなたかご教示お願いいたします。
・ツリー全体表示

69 / 500 ページ ←次へ | 前へ→
ページ:  ┃  記事番号:
1078342
(SS)C-BOARD v3.8 is Free