Chapter4-3 コントロールのプロパティとメソッド

コントロールのプロパティやメソッドを扱った、いくつかのコーディング例です。

コントロールの入力/選択値を取得する [Valueプロパティ]

Private Sub cmd01_Click()
'コントロールの値を取得

  Dim iintLoop As Integer
  Dim strMsg As String
  
  On Error Resume Next
  'Valueプロパティのないラベル・イメージ・サブフォームを無視
  
  strMsg = ""
  For iintLoop = 1 To 9
    strMsg = strMsg & Me("Cntrol" & iintLoop).Value & vbCrLf
  Next iintLoop
  
  strMsg = strMsg & Me!Cntrol9!都道府県.Value & vbCrLf
  
  MsgBox strMsg, vbOKOnly + vbInformation

End Sub



「Value」プロパティとサブフォームの扱い

一般的なコントロールの「Value」プロパティは”デフォルトプロパティ”と呼ばれ、そのコントロールを代表するプロパティです。デフォルトプロパティは、VBAのコード上は省略することができます。ただし、ラベルコントロールやイメージコントロール、サブフォームコントロールにはそのようなプロパティはありません。

また、サブフォーム内の特定のコントロールの値やプロパティを取得したい場合には、次のようにしてそれを指し示します。

サブフォームコントロール名!サブフォーム内のコントロール名.プロパティ名


サブフォームの”フォームオブジェクト”のプロパティを扱う場合には、「Form」というキーワードを付けてフォームオブジェクトであることを示します。

サブフォームコントロール名.Form.プロパティ名

例:MsgBox Me!frm顧客マスタ_sub.Form.RecordSource



テキストボックスにフォーカスを移動する [SetFocusメソッド]

Private Sub cmd02_Click()
'テキストボックスにフォーカスを移動

  Me!Cntrol2.SetFocus

End Sub




テキストボックスの最後にカーソルを移動する [SelStartプロパティ]

Private Sub cmd03_Click()
'テキストボックスの最後にカーソル移動

  With Me!Cntrol2
    .SetFocus
    .SelStart = Len(.Value)
  End With

End Sub



「Value」プロパティと「Text」プロパティ

テキストボックスへの入力内容を扱う場合には、「Value」プロパティと「Text」プロパティの違いに注意しなければなりません。前者はそのコントロールからフォーカスが離れたときなどに確定した値です。一方、後者は現在編集中のデータ内容(画面に表示されている内容)です。編集中の場合にValueプロパティを取得しても、それは前回最後に確定したデータであって、現在画面に表示されているものではありません。



テキストボックスの内容をクリアする [Valueプロパティ]

Private Sub cmd04_Click()
'テキストボックスの内容をクリア

  Me!Cntrol2 = ""

End Sub




テキストボックスの内容をラベルに表示する [Captionプロパティ]

Private Sub cmd05_Click()
'テキストボックスの内容をラベルに表示

  Me!Cntrol1.Caption = Me!Cntrol2

End Sub




テキストボックスの内容をクリップボードに送る

Private Sub cmd06_Click()
'テキストボックスをクリップボードに送る

  Me!Cntrol2.SetFocus
  DoCmd.RunCommand acCmdCopy

End Sub




テキストボックスのフォントを変える [FontSize/FontName/FontBoldプロパティ]

Private Sub cmd07_Click()
'テキストボックスのフォントを変更

  With Me!Cntrol2
    .FontSize = 13
    .FontName = "Times New Roman"
    .FontBold = True
  End With

End Sub




テキストボックスのIME入力モードを切り替える [IMEModeプロパティ]

Private Sub cmd08_Click()
'IME入力モードを切り替え

  Me!Cntrol2.IMEMode = Choose(Me!Cntrol5, _
                              acImeModeNoControl, _
                              acImeModeDisable, _
                              acImeModeHiragana, _
                              acImeModeKatakana, _
                              acImeModeAlpha, _
                              acImeModeAlphaFull)
  Me!Cntrol2.SetFocus
  
End Sub


※このプログラムでは、オプショングループコントロール「Cntrol5」内のオプションボタンの選択肢に応じてIME入力モードを切り替えています。


真偽の記述例

オプショングループコントロール(上記例のCntrol5)のValueプロパティの値は、その中で現在選択されているオプションボタンやトグルボタンの「オプション値」プロパティの値です。オプショングループコントロールのValueプロパティへ値を代入して、選択されているオプションボタンをVBAから変更することもできます。



コンボボックスをドロップダウンさせる [Dropdownメソッド]

Private Sub cmd09_Click()
'コンボボックスをドロップダウン

  With Me!Cntrol3
    .SetFocus
    .Dropdown
  End With
  
End Sub



フォーカス取得時イベントを使ったドロップダウン

フォーカス取得時イベントなどでこのメソッドを使えば、EnterキーやTabキーなどでコンボボックスにフォーカスが移動したとき、自動的にドロップダウン表示させることができます。

Private Sub Cntrol3_Enter()

  Me!Cntrol3.Dropdown

End Sub



コンボボックスの2列目の値を取得する [Columnプロパティ]

Private Sub cmd10_Click()
'コンボボックスの2列目の値を取得
  
  Me!Cntrol2 = Me!Cntrol3.Column(0) & vbCrLf & _
                      Me!Cntrol3.Column(1)

End Sub



Columnプロパティ

Columnプロパティでは、(0)が1列目を、(1)が2列目を表します。3列目や4列目も同様に取得可能です。
またこのプロパティは、リストボックスでも同様に使えます。



コンボボックスに項目を追加する [AddItemメソッド]

Private Sub cmd11_Click()
'コンボボックスに項目を追加

  Me!cboDummy.AddItem Me!Cntrol2

End Sub


※このメソッドを使うには、コンボボックスの「値集合タイプ」プロパティをプロパティシートで”値リスト”に設定しておく必要があります。



リストボックスの任意の項目を選択された状態にする [Selectedプロパティ]

Private Sub cmd12_Click()
'リストボックスの任意項目を選択

  With Me!Cntrol4
    .Selected(0) = True
    .Selected(1) = True
    .Selected(4) = True
    .Selected(6) = True
    .Selected(8) = True
    .Selected(9) = True
    .Selected(11) = True
  End With
  
End Sub


※複数項目を選択できるよう、リストボックスの「複数選択」プロパティを”標準”または”拡張”に設定しておきます。


Selectedプロパティ

Selectedプロパティは、その項目が選択されているかどうかを表すプロパティです。Trueの場合は選択、Falseの場合は非選択です。
複数選択の場合、次のカッコ内の数字が項目の番号を表します。(0)が1項目めを、(1)が2項目めを表します。



リストボックスの複数選択項目を列挙する [Selectedプロパティ、ItemDataプロパティ]

Private Sub cmd13_Click()
'リストボックスの複数選択項目を列挙

  Dim iintLoop As Integer
  Dim strMsg As String
    
  strMsg = ""
  With Me!Cntrol4
    For iintLoop = 0 To .ListCount - 1
      If .Selected(iintLoop) Then
        strMsg = strMsg & .ItemData(iintLoop) & " : " & _
                          .Column(1, iintLoop) & vbCrLf
      End If
    Next iintLoop
  End With
  Me!Cntrol2 = strMsg
  
End Sub



リストボックスのプロパティ

リストボックスの全行数は「ListCount」プロパティで取得できます。行のインデックスはゼロから始まるので、「ListCount - 1」でループを形成します。
それぞれの行のデータ内容は、「ItemData(インデックス)」という式で取得できます。
その行の2列目の内容は「Column(1, インデックス)」という式で取得できます。

また、別の方法として、選択されている項目のコレクション「ItemsSelected」を使って、それに属する項目をすべて取り出すという方法もあります。

Dim varItm As Variant

For Each varItm In Me!Cntrol4.ItemsSelected
  Debug.Print Me!Cntrol4.ItemData(varItm)
Next varItm


※複数選択しないふつうのリストボックスの場合は、通常のValueプロパティでその内容を取得できます。



リストボックスの見出し表示の有無を切り替える [ColumnHeadsプロパティ]

Private Sub cmd14_Click()
'リストボックスの見出し表示切り替え

  Me!Cntrol4.ColumnHeads = Not Me!Cntrol4.ColumnHeads

  MsgBox Me!Cntrol4.Column(0, 1)

End Sub


列見出しが表示されているときは、その見出しが項目の1番目(インデックス=0)として扱われることに注意します。



イメージを動かす [Topプロパティ、Leftプロパティ]

Private Sub cmd15_Click()
'イメージを動かす
  
  Dim iintLoop As Integer
  Dim ilngLoop As Long

  DoCmd.Hourglass True
  
  With Me!Cntrol8
    For iintLoop = 1 To 50
      .Top = .Top - 100
      .Left = .Left + 100
      Me.Repaint
      For ilngLoop = 1 To 1000000: Next ilngLoop
    Next iintLoop
    For iintLoop = 50 To 1 Step -1
      .Top = .Top + 100
      .Left = .Left - 100
      Me.Repaint
      For ilngLoop = 1 To 1000000: Next ilngLoop
    Next iintLoop
  End With
    
  DoCmd.Hourglass False
    
End Sub


※「Repaint」メソッドは、再描画を行ないます。
※ilngLoopのループは適当な時間を待機するだけの処理です。


単位「twip」

TopやLeftプロパティなどの座標系は、「twip」という単位で表します。1論理cm(印刷したときに1cmとなる長さ)は、567twipです。



イメージコントロールの画像を変える [Pictureプロパティ]

Private Sub cmd16_Click()
'イメージコントロールの画像を変える

  Me!Cntrol8.Picture = "c:\Windows\しゃくなげ.bmp"
  
End Sub




イメージの表示サイズを変える [SizeModeプロパティ]

Private Sub cmd17_Click()
'イメージの表示サイズを変える
  
  With Me!Cntrol8
    Select Case .SizeMode
      Case acOLESizeClip
        'クリップならストレッチに変更
        .SizeMode = acOLESizeStretch
      Case acOLESizeStretch
        'ストレッチならズームに変更
        .SizeMode = acOLESizeZoom
      Case acOLESizeZoom
        'ズームならクリップに変更
        .SizeMode = acOLESizeClip
    End Select
  End With

End Sub


※上記コードはサイクル的にサイズを変更する例ですが、あるコマンドボタンで、特定の1つに変更することももちろん可能です。



ラベルの立体表示を切り替える [SpecialEffectプロパティ]

Private Sub cmd18_Click()
'ラベルの立体表示を切り替え

  Static intEffect As Integer

  intEffect = intEffect + 1
  If intEffect > 5 Then intEffect = 0

  Me!Cntrol1.SpecialEffect = intEffect

End Sub


※上記コードは、Static変数を使って0〜5の範囲をサイクリックに変更しています。



トグルボタンの表示を切り替える [Captionプロパティ、ForeColorプロパティ]

Private Sub Cntrol6_AfterUpdate()
'トグルボタンの表示を切り替える

  With Me!Cntrol6
    If .Value Then
      'トグルボタンがONのとき
      .Caption = "ONになっています"
      .ForeColor = vbRed
    Else
      'トグルボタンがOFFのとき
      .Caption = "トグルボタン"
      .ForeColor = vbBlack
    End If
  End With
  
End Sub




サブフォームをまるごと切り替える [SourceObjectプロパティ]

Private Sub cmd19_Click()
'サブフォームをまるごと切り替え

  With Me!Cntrol9
    If .SourceObject = "frm都道府県" Then
      .SourceObject = "frm社員マスタ"
    Else
      .SourceObject = "frm都道府県"
    End If
  End With

 End Sub


| Index | Prev | Next |

 

Copyright © T'sWare All rights reserved