プロが教える店舗&オフィスのセキュリティ対策術

Access2010でのフォーム作成画面ですが、
添付画像のように選択オブジェクトの枠が
太くなってしまいましたが、これを2003のように1pxの枠にすることは可能でしょうか?

オブジェクトの配置で「グリッドに合わせる」を使っておらず
キーボードで1pxづつ移動させてレイアウトを調整しているため
この太い枠が非常に邪魔(笑)で、何とかならないかと思っています。

所詮無理な話でしたらきっぱり諦めるのですが、
もし変更する方法をご存じの方がいれば是非教えて下さい。

「Access2010のフォーム作成画面に」の質問画像

A 回答 (1件)

> 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
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!