2013-05-01 29 views
1

我試圖在訪問表單打開時更改數據。當時數據顯示爲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 

回答

3

您的問題是在您的文本框的參考。 acTextBox不是一個文本框。這只是一個顯示控件類型是文本框的值。
所以,當你說'如果ctlVar.ControlType = acTextBox Then',那是正確的。
但是當你說'如果acTextBox.text =「True」Then',那是不正確的。你不再引用控件。它應該是'如果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 
+0

感謝您的幫助,但是.text拋出了一條錯誤消息,因此我使用了.Value,而且看起來工作得很好。 – user1643333 2013-05-07 09:13:31

+0

使用.value而不是.text允許您跳過.setfocus方法。真高興你做到了。 – 2013-05-07 22:16:26

-2

因此 - 當您構建表單時,您將文本框標題設置爲True - 正確?那麼如果你想改變,當表單加載然後執行以下操作:

Private Sub Form_Load() 

     acTextBox.Caption = "Yes" 

End Sub 
+0

文本框沒有Caption屬性。標籤使用Caption屬性。另外,您對acTextBox進行了相同的引用,而不是ctlVar。 – 2013-05-01 14:48:31

+0

@TomCollins標籤部分確實是 - 但我不確定OP在討論哪個部分。 – Katana24 2013-05-01 14:51:14

0

有擠進這個代碼塊的小几件事情 - 甚至你的問題 - 畢竟弄清這東西了兩天......

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