- 締切済み
Access2010のフォーム作成画面にて
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- DexMachina
- ベストアンサー率73% (1287/1744)
> 1pxの枠にすることは可能でしょうか? あるとすれば、 a)OSの『画面のプロパティ』の『デザイン』タブの『詳細設定』内の項目 b)Accessの「ツール(T)→オプション(O)」(Access2003以前)か、 『Officeボタン→Access のオプション(I)』(Access2007以降)の、 いずれかの項目 c)レジストリの、Access関連項目(たとえば以下) HKEY_CURRENT_USER\Software\Microsoft\Office\(バージョン)\Access ではないかと思うのですが、残念ながらこれらの中には、該当するような ものは見当たりませんでした。 ですので、割り切ってしまうしかないのではないか、と思います。 (もっとも、その設定を行うことで初めてレジストリにキーが作成される 場合もあるので、「該当キーが見当たらない = 設定ができない」とは 断言できませんが・・・(汗)) ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ どうしても、この「オレンジ色の憎いやつ」(笑)を表示させずに、キーボードの カーソルキーで微調整をしたい、という場合は、いっそツールを作成する しかないかもしれません(汗) たとえば、以下のようなコントロールを持つポップアップタイプのフォームを 作成し、このフォームから微調整したいコントロールを選択して(→デザイン ビュー上で選択するわけではないので、枠線を非表示にできる)、 カーソルキーで微調整を行う、といった感じです。 ※下記プロパティは、デフォルトの値から変更が必要なもののうち、 必要最低限の項目に絞って紹介しています。 ・・・ラベルつきコントロールだと、ラベルと本体を個別に操作するか、 独自のクラスを定義するなどして、ラベルを従属させる形にプログラムを 組むことになる・・・など、実際に使えるものにするには、かなり手間が 掛かりそうですが(汗) ※対象フォームがデザインビューかそれ以外かの判定もしていません。 そのため、下記サンプルでは、ビューに関係なく、微調整ができて しまいます(汗) 【フォーム】 ※名前は任意でOk。 <その他>タブ 『ポップアップ』 = はい (『作業固定』は「いいえ」) <イベント>タブ 『開くとき』イベント = 「[イベント プロシージャ]」 『キークリック時』イベント = 「[イベント プロシージャ]」 『キーボードイベント取得』 = 「はい」 【コントロール】 ・『フォーム』コンボボックス: 対象フォームを指定 <データ>タブ 『値集合タイプ』 = 「値リスト」 <イベント>タブ 『更新後処理』イベント = 「[イベント プロシージャ]」 『ダブルクリック時』イベント = 「[イベント プロシージャ]」 ・『コントロール』コンボボックス: 対象コントロールを指定 <データ>タブ 『値集合タイプ』 = 「値リスト」 <イベント>タブ 『更新後処理』イベント = 「[イベント プロシージャ]」 『ダブルクリック時』イベント = 「[イベント プロシージャ]」 ◆コード◆ Option Compare Database Option Explicit '対象フォーム・対象コントロールを保持するための変数 '(モジュールレベル(=つまり’ここ’)での宣言が必要) Private myFrm As Form, myCntl As Control Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) Dim nLeft As Long, nTop As Long, nAddL As Long, nAddT As Long If Shift Then 'Ctrl/Shift/Altキーの同時押し時は対象外 Exit Sub ElseIf myCntl Is Nothing Then '対象コントロール未設定時も対象外 Exit Sub Else '対象コントロールの位置を取得 nLeft = myCntl.Left nTop = myCntl.Top End If 'カーソルキー毎に移動量を設定 '(それ以外のキーは対象外) '※「±10」は適当に調節してください。 ' (pixel/twipの換算を正直にやると更に厄介になるので(汗)) Select Case KeyCode Case vbKeyDown nAddL = 0 nAddT = 10 Case vbKeyUp nAddL = 0 nAddT = -10 Case vbKeyLeft nAddL = -10 nAddT = 0 Case vbKeyRight nAddL = 10 nAddT = 0 Case Else Exit Sub End Select '上記で設定した値に基づいてコントロールを移動 Call myCntl.Move(nLeft + nAddL, nTop + nAddT) 'キー入力を取り消し KeyCode = 0 End Sub Private Sub Form_Open(Cancel As Integer) On Error Resume Next Dim Mem As Variant, sRS As String '展開中の全フォームを、『フォーム』コンボボックスの 'リストに設定 sRS = "''" For Each Mem In Forms If Mem.Name <> Me.Name Then sRS = sRS & ";" & Mem.Name End If Next フォーム.RowSource = sRS フォーム = Screen.ActiveForm.Name Call フォーム_AfterUpdate End Sub Private Sub コントロール_AfterUpdate() Dim Cntl As Control '対象コントロールを設定/解除 If IsNull(コントロール) Then Set myCntl = Nothing Else Set myCntl = myFrm.Controls(コントロール) End If End Sub Private Sub コントロール_DblClick(Cancel As Integer) Dim Mem As Variant, sRS As String '対象フォームのコントロール群を、『コントロール』コンボ 'ボックスのリストに設定(フォーム未設定時は解除) If myFrm Is Nothing Then sRS = "" Else sRS = "''" For Each Mem In myFrm.Controls sRS = sRS & ";" & Mem.Name Next End If Set myCntl = Nothing コントロール.RowSource = sRS コントロール = Null End Sub Private Sub フォーム_AfterUpdate() Dim Mem As Variant, sRS As String '対象フォームを設定/解除 If IsNull(フォーム) Then Set myFrm = Nothing Else Set myFrm = Forms(フォーム) End If Call コントロール_DblClick(False) End Sub Private Sub フォーム_DblClick(Cancel As Integer) '『フォーム』コンボボックスのリストを更新 '(フォームの『開くとき』イベントのコードを呼び出し) Me.Visible = False Call Form_Open(False) Me.Visible = True End Sub