24 すべてのフォームの同名コントロールの位置を同じにする

すべてのフォームの同名コントロールの位置を同じにするには、次のような手順でプログラムを実行します。
  1. まずここでは位置の基準としてアクティブフォームのアクティブコントロールを使うものとします。そのため、アクティブコントロールの名前/上位置/左位置の各プロパティ値を取得し、変数に保存しておきます。

  2. 次に、FormsコンテナのDocumentsコレクションからループでDocumentオブジェクトを取り出し、その「Name」プロパティで取得される名前のフォームのデザインビューを開きます。

  3. さらにそのフォームのControlsコレクションからControlオブジェクトをループで取り出し、コントロールの名前が変数に保存されている名前(例ではstrCtlName変数)と同じかどうか調べます。

  4. 同じであれば、そのコントロールの「Top/上位置」プロパティ「Left/左位置」プロパティの値を変数に保存されている値(例ではintTopとintLeft変数)に書き換えます。
プログラム

Sub SampleCode_24()
'すべてのフォームの同名コントロールの位置を同じにする

  Dim dbs As Database
  Dim ctn As Container
  Dim doc As Document
  Dim ctl As Control
  Dim strFormName As String
  Dim strCtlName As String
  Dim intTop As Integer
  Dim intLeft As Integer

  'アクティブコントロールの名前/上位置/左位置を取得
  With Screen.ActiveForm.ActiveControl
    strCtlName = .Name
    intTop = .Top
    intLeft = .Left
  End With

  Set dbs = CurrentDb
  Set ctn = dbs.Containers!Forms

  'すべてのフォームのループ
  For Each doc In ctn.Documents
    '1つ分のフォームのデザインビューを開く
    strFormName = doc.Name
    DoCmd.OpenForm strFormName, acDesign

    'フォームのすべてのコントロールのループ
    For Each ctl In Forms(strFormName).Controls
      With ctl
        If .Name = strCtlName Then
          'コントロール名がアクティブコントロールと同じとき
          '上位置/左位置を設定
          .Top = intTop
          .Left = intLeft
        End If
      End With
    Next ctl

  Next doc

End Sub

実行例
■実行前
    左上のイメージコントロールの位置が2つのフォームで異なっていますが、これを上のフォームと同じにします。


■実行後
    左上のイメージコントロールが移動しています。
| Index | Prev | Next |



Copyright © T'sWare All rights reserved