• ベストアンサー

サブフォームの左からの値を取得するには?

アクセス2007です。 MsgBox Form_Fサブフォーム.InsideHeight で、高さは取得できるのですが、 MsgBox Form_Fサブフォーム.InsideLeft にすると、.InsideLeftがコンパイルエラーとなってしまうようです。 デザインビューでサブフォームのプロパティシートで左位置にカーソルをあててF1を押しても ヘルプは出てきませんでした。 VBAでのサブフォームの左位置の取得方法を教えてください。

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

  • ベストアンサー
  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.1

VBA上では   Form_Fサブフォーム.WindowLeft で取得が可能です。 但し、これはフォームとしての取得方法で、サブフォームの場合は、通常は   Me!サブフォーム名.Left (親フォームから参照する場合)   Forms!フォーム名!サブフォーム名.Left (親フォーム以外からの場合) というように、「フォーム」としてではなく、「サブフォームコントロール」としての プロパティを使用するのが一般的です。 『高さ』についても同様に、   Me!サブフォーム名.Height   Forms!フォーム名!サブフォーム名.Height とします。 なお、フォームビューで表示した場合は、サブフォームとして使用している フォームを、同時に別途で開くことも可能になっています。 この場合、「Form_Fサブフォーム」で参照されるのは、先に開いていた方の 値になるようですので、注意が必要です。 (先にサブフォームとして開いてから、ナビゲートウィンドウでダブルクリックして  Fサブフォームを直接開いた場合は、サブフォーム側の値が、  先にFサブフォームを直接開いてから、同フォームをサブフォームとして使用  しているフォームを開いた場合は、直接開いた方の値が、それぞれ取得  されます) これを避けるためにも、サブフォームとしての場合は上記の形で、 直接開いている場合は   Me.WindowLeft (自身から参照する場合)   Forms!フォーム名.WindowLeft (上記以外の場合) の形で、それぞれ参照した方がよいと思います。 なお、もしも「DoCmd.OpenForm」ではなく「New Form_Fサブフォーム」や 「Form_Fサブフォーム.Visible」の形で当該フォームを開いている場合は、 「Forms!フォーム名」の形では参照できないため、   Set Frm = New Form_Fサブフォーム というように、フォームを変数に格納しておいて、   MsgBox Frm.WindowLeft という形で参照する必要があります。 http://okwave.jp/qa/q7778972.html なお、F1キーでヘルプが表示されなかった場合は、その画面の左上の方に 検索条件の入力欄がありますので、そこにプロパティ名(今回のご質問では 「左位置」)を入力してやれば、当該ヘルプを表示することができます。 (ヘルプの関連付けが不完全なようで、当該ヘルプが存在していても、  F1キーでは表示されないものがあるようです)

BBFSBOQZU34
質問者

お礼

WindowLeftで思い通りに取れました。いろいろと補足ありがとうございました。

関連するQ&A

  • サブフォームに変数を代入し、RecordSourceの値を取得したい

    サブフォームに変数を代入し、RecordSourceの値を取得したいのですがうまくいきません。 Sub test1() Dim サブフォーム As String Dim フォーム As String フォーム= "土台" サブフォーム = "フォーム1" MsgBox Form_フォーム1.RecordSource End Sub ******************************************************************* Sub test2() Dim サブフォーム As String Dim フォーム As String フォーム= "土台" サブフォーム = "フォーム1" MsgBox Form_フォーム1.RecordSource MsgBox Forms(フォーム).Controls(サブフォーム).RecordSource End Sub オブジェクトは、このプロパティまたはメソッドをサポートしていません。(Error 438) ******************************************************************* Sub test3() Dim サブフォーム As String Dim フォーム As String フォーム = "土台" サブフォーム = "フォーム1" MsgBox Forms(サブフォーム).RecordSource End Sub 実行時エラー'2450' マクロの式またはVisual Basic コート゛で参照されている 'フォーム名'フォームが見つかりません。 ******************************************************************* test1~3のうち test1のみはうまくいくのですが 変数を代入したいです。 ヘルフ゜のには Forms![受注]![受注サブフォーム].Formとなってますが これじゃ変数を代入できないですよね。 どうすればサブフォームに変数を代入しつつ、RecordSourceの値を取得できるのでしょうか? よろしくお願いします。

  • 「サブフォーム」の名前を取得したい

    アクセスのフォームの中にサブフォームが2つあります。 このうちの一つのサブフォームをクリックした時に 自身のフォーム名をVBAで取得したいのですが、 サブフォームのモジュールで Debug.Print Screen.ActiveForm.Name をすると、 親フォームが取得されます。 Forms("親フォーム").Controls("サブフォーム").Form.Controls("担当者").Value の部分の、「親フォーム」が取得されます。 「サブフォーム」の部分を取得するコードはありますか?

  • サブフォームの文字のサイズを変更したいのですが

    アクセスです。 サブフォームをフォームの中に入れています。 データシートビューで表示しています。 この場合のサブフォームの文字のサイズを変更したいのですが どうやって変更すればいいでしょうか? デザインビューにして、 サブフォームの詳細を見ても、フォントサイズのプロパティはないし サブフォームにもフォントサイズのプロパティはないです。 添付画像はサブフォームのプロパティ画像です。 フォントサイズを変更することがない事を表しています。

  • AccessVBAでサブフォームの値チェック

    こんにちは。前々回http://okwave.jp/qa/q6556906.htmlにて 質問させて頂いたサブフォームの値チェックをする際のVBAの記述で 教えて頂きたい事ができましたので、質問させて頂きます。 Accessのバージョンは2003です。 以下のようなVBAを記述しているのですが、一度VBAでの処理を実行すると フォームを一度閉じてから再度フォームを開くと該当フィールドの色が 元に戻らず黄色又はマゼンダのままとなってしまっています… 別のAccessにて動作確認した際は、再度フォームを開いてもフィールドの 色は元のままだったのですが… どこが原因なのか教えていただければ幸いです。 長文で見辛いですが宜しくお願いします。 Dim stDocName As String Dim stLinkCriteria As String 'フォーム上のコントロールを格納する変数 Dim ctrl As Control Dim msg As String 'フォーム上のすべてのコントロールに対しての繰り返し処理 For Each ctrl In Me.Controls '取得したコントロールがテキストボックスかどうか If ctrl.ControlType = acTextBox Then 'Aの値が15.5未満の場合 If Forms![F_親フォーム].[F_サブフォーム].Form.[A] <= 15.5 Then '背景をピンクに Forms![F_親フォーム].[F_サブフォーム].Form.[A].BackColor = vbMagenta Else '背景を黄色に Forms![F_親フォーム].[F_サブフォーム].Form.[A].BackColor = vbYellow End If 'Bの値が45未満の場合 If Forms![F_親フォーム].[F_サブフォーム].Form.[B] <= 45 Then '背景をピンクに Forms![F_親フォーム].[F_サブフォーム].Form.[B].BackColor = vbMagenta Else '背景を黄色に Forms![F_親フォーム].[F_サブフォーム].Form.[B].BackColor = vbYellow End If End If Next ctrl Me.Undo 'フォーム上のすべてのコントロールに対しての繰り返し処理 For Each ctrl In Forms![F_親フォーム].[F_サブフォーム].Form.Controls 'テキストボックスのコントロールを取得 If TypeOf ctrl Is TextBox Then '取得したコントロールが黄色だった場合 If ctrl.BackColor = vbYellow Then 'msgにテキストボックスの名前を追加 msg = msg & ctrl.Name & vbCrLf 'メッセージボックスに名前を表示 End If End If Next ctrl 'msgが空白じゃない場合 If msg <> "" Then 'メッセージボックスを表示 MsgBox msg Else 'ctrl.BackColor = vbWhite stDocName = "F_フォーム1" DoCmd.Close acForm, Me.Name DoCmd.OpenForm stDocName End If Exit_閉じる_Click: Exit Sub Err_閉じる_Click: MsgBox Err.Description Resume Exit_閉じる_Click End Sub

  • サブフォームのコントロールの値を取得したい(VBA)

    連続投稿失礼します。 ファーム1のなかにサブフォーム(フォーム2)を設置しました。 フォーム2の中にはテキスト1があります。 VBAでテキスト1の値を取得したいのですがうまくいきません。 フォーム2を開いた状態で、 Sub test1() MsgBox Forms("フォーム2").Controls("テキスト1") End Sub を行なうと、 「あああ」 が返ってくるのですが、 フォーム2を閉じて、 フォーム1を開き、上のコードを実行すると、 「マクロの式、またはVisual Basicのコードで参照されている 'フォーム2'フォームが見つかりません。」 となってしまいます。 普段はフォーム2は閉じ、フォーム1を開いて使うため、 この状態でのVBAコードが知りたいです。 ちなみに変数を代入したいので 「Form_フォーム2.テキスト1」の書き方よりカッコでくくる書き方でご回答いただければ助かります。 よろしくお願いします。

  • アクセスでサブフォームのレコードを取得したい。

    教えてください!!MS accessにてサブフォームのレコードの数やレコードの内容をVBAにて取得したいと考えてます。その結果によって、条件分岐がしたいので・・・。現在は、サブフォームのフッターに=count(*)のテキストボックスを作り、この値を取得しています。もう少しスマートに(直接)取得できないのでしょうか?ちなみに(サブフォームの)コントロール名.form.countでやってみると、違う数字が出てきます。この数字はいったいなんでしょうか? お願いします。

  • サブフォームのビューを切り替えたい

    親フォーム(フォーム1)にサブフォームとして、 テーブルをソースとするサブフォーム(テーブル1のサブフォーム)を配置しました。 親フォームからサブフォームのビューを変更したいのですが どうすればいいか教えてください。 親フォームのコマンドボタンにはそれぞれ Private Sub 単票フォームへ切り替え_Click() Me.Controls("テーブル1のサブフォーム").Form.DefaultView = 1 '帳票フォーム End Sub Private Sub 帳票フォームへ切り替え_Click() Me.Controls("テーブル1のサブフォーム").Form.DefaultView = 0 '単票フォーム End Sub としたのですが、 実行すると 実行時エラー 2136 "このプロパティを設定するには、フォームまたはレポートをデザインビューで開きます"。 となってしまいます。 Private Sub 帳票フォームへ切り替え_Click() DoCmd.SelectObject acForm, "テーブル1のサブフォーム" DoCmd.RunCommand acCmdFormView End Sub にしたところ、 実行時エラー 2489 “オブジェクト テーブル1が開いていません、” になります。 サブフォームに埋め込んでいて親フォームを開いていても 開いてない事になるのですね。 フォームビューの時に、切り替える事は不可能なのでしょうか? 帳票ビュー表示用フォーム、 単票ビュー表示用フォーム を作るしかないのでしょうか?

  • Access サブフォームの埋め込みについて

    サブフォームは「月を入力」というパラメーターを設定したクエリを使って作成した レポートです。下記2点について、よろしくお願いします。 ●サブフォームのラベルが表示されない サブフォームを埋め込んだレポートを作成したのですが、 レポートビューに切り替えたとき、各コントロールのラベルが表示されません。 (デザインビューではページヘッダーに各ラベルが表示されているのですが・・・) プロパティーシートの「可視」は「はい」になっています。 ●レポートビューに切り替えたとき、[月を入力]というパラメーターが何度も表示される 画面をスクロールする度に表示されてしまいます・・・ Access初心者で、質問内容もわかりにくいかと思いますが、 どうぞよろしくお願いします。

  • ACCESS VBAサブフォーム(DATA SHEET)の値の取得方法

    いつもお世話になっております。 ACCESS VBAでメインフォームに貼りついているサブフォームの値をとりたいのですが、うまくいっていません。 現状は module1でaをPublicで宣言 サブフォーム中のFORM_CURRENT()中で me.field1.setfocus a = me.field1.value として取得しています。 (実装ではメインのほうのボタンAを押したときに サブフォーム、FORM_CURRENT()で取得しておいた値を 別の変数に入れようとしています。) サブフォームのみで実行するとうまくいくようですが、 メインフォームに貼り付けるとうまくいかないようです。 (メインフォームに貼り付けて、サブフォームのFORM_CURRENTにブレイクを 貼って止めようとするが止まらない) そこでメインフォームボタンAクリックイベントで dim a1 as integer Forms![mainform]![subform].form.[field1].setfocus a1 = Forms![mainform]![subform].form.[field1].value として値をとろうと思ったのですが メインフォームからサブフォームにフォーカスをうつせない? らしく、サポートされていませんの旨のメッセージがでてしまいます。 やりたいこととしては、メインフォームに貼りついたサブフォームの 選択レコードのフィールド値を、メインフォームのボタンを押したときに 取得する。ということなのですが、うまくいっていません。 別の方法でもいいので、実現方法をご存知の方、よろしくお願いします。 ちなみにACCESSは2000を使用、ADOはサポートされていますがDAOは 非サポートのようです。

  • サブフォームの表示の種類をVBAで操作したい

    こんばんは。 アクセスのフォームの中にサブフォームを入れていて コマンドボタンを押すたびに そのサブフォームを フォームビューか、 データシートビューか、 ピボットテーブルビューかに切り替えたいのですが VBAで可能でしょうか? 宜しくお願い致します。

専門家に質問してみよう