3

アクセスフォームが開いたときにデータを変更しようとしています。その時点でデータは True と表示されているので、代わりに Yes と表示するように変更したいと思います。試してみましたが、vba は初めてで、自分が何をしているのかよくわかりません。これが役立つことを期待して、すべてのテキストボックスに「QtTxtBox」の同じタグを付けましたが、そうではありません。以下は私がこれまでに得たものです、誰かが私を助けることができますか?

      Dim ctlVar As Control
      For Each ctlVar In Me.Controls
        If ctlVar.ControlType = acTextBox Then
            If acTextBox.text = "True" Then
               acTextBox.text = "yes"
            End If
      End If
4

3 に答える 3

6

あなたの問題はテキストボックスの参照にあります。acTextBox はテキスト ボックスではありません。コントロールの種類がテキスト ボックスであることを示す単なる値です。したがって、' If ctlVar.ControlType = acTextBox Then
' と言うとき、それは正しいです。 しかし、「If acTextBox.text = "True" Then」と言うと、それは正しくありません。もうコントロールを参照していません。「 If ctlVar.text = "True" Then 」である必要があります。ctlVar は、コントロールへの参照です。

また、値を変更する前にテキストボックスにフォーカスを設定する必要があります。コードは次のようになります。

For Each ctlVar In Me.Controls
  If ctlVar.ControlType = acTextBox Then
      If ctlVar.Value = "True" Then
         ctlVar.Value = "yes"
      End If
End If
于 2013-05-01T14:45:02.063 に答える
0

この小さなコードの塊にはいくつかの要素が詰め込まれています - おそらくあなたの問題でさえも - このことを理解するのに2日後...

Function disorder()
  For c = 0 To 9
    s = Screen.ActiveForm.Controls("" & "[" & c & "]" & "").Caption
    r = Int(9 * Rnd)
    Screen.ActiveForm.Controls("" & "[" & c & "]" & "").Caption = Screen.ActiveForm.Controls("" & "[" & r & "]" & "").Caption
    Screen.ActiveForm.Controls("" & "[" & r & "]" & "").Caption = s
  Next
End Function

目的のフォームにフォーカスがあることを確認するために、フォームのデフォルト ボタンで選択される SendKeys "{ENTER}" を使用しました。この場合、ループしやすいように [1] や [2] などの名前のコントロールがいくつかありますが、名前は何でもかまいません。

フォーム上のすべてのコントロールをループするには...

For Each c In Screen.ActiveForm.Controls
  With c
    If Caption = "" Then Caption = "New"
  End With
Next
于 2013-10-18T02:36:08.307 に答える
-3

つまり、フォームを作成したときに、テキストボックスのキャプションを True に設定しました。正しいですか? フォームの読み込み時にそれを変更したい場合は、次のようにします。

Private Sub Form_Load()

      acTextBox.Caption = "Yes"

End Sub
于 2013-05-01T14:08:47.777 に答える