Ms access MS Access文本框更新/附加

Ms access MS Access文本框更新/附加,ms-access,vba,Ms Access,Vba,我有一些代码填充一个名为text5表单的文本框!表格3!text5。但是每次我点击更新这个文本框的按钮,它就会刷新它 我想这样的文本保持固定,并添加新的数据,每次点击按钮。我已经附上了代码,到目前为止我已经完成了 Option Compare Database Private Sub Command0_Click() Set db = CurrentDb Dim I As Integer Dim varNumber As Integer ' this takes the nu

我有一些代码填充一个名为
text5表单的文本框!表格3!text5
。但是每次我点击更新这个文本框的按钮,它就会刷新它

我想这样的文本保持固定,并添加新的数据,每次点击按钮。我已经附上了代码,到目前为止我已经完成了

Option Compare Database

Private Sub Command0_Click()

  Set db = CurrentDb

  Dim I As Integer
  Dim varNumber As Integer  ' this takes the number for how many times to loop
  Dim strQueryName As String  ' this is for the sql to find lowest rack number
  Dim P  As Integer  'this value is the prod number
  Dim x As Integer   'value from lowestrackSQL



  varNumber = Me.Quantity 'box from form me means this form
  prodnumber = Me.ProdNo  'box from form

  strQueryName = "SQLToFindLowestRackNumber"   'this will be used to execute the query


  strSQL = CurrentDb.QueryDefs(strQueryName).sql   ' this stores the sql but does not run it

  Forms!form3!txtPrint = strResult
  'Stop

  For I = 1 To varNumber  ' uses the quntity value to count how many times to loop

    x = DLookup("locationrack", strQueryName)  'puts value of query into value x
    prod# = prodnumber

    'below puts into imediate view box
    Debug.Print "Line number = " & I; ";  Rack Location = " & x; ";   Product Number = " & prod#; ";"
    'below puts it into form3 text box
    strResult = strResult & " Line Number = " & I & " Rack Location = " & x & "   Product Numner = " & prod# & vbCrLf & ""
    Forms!form3!Text5 = strResult


    'below executes the SQL
    DoCmd.SetWarnings False
    DoCmd.RunSQL "UPDATE [Location] SET [Location].ID = 0 WHERE [Location].RackID =" & x
    DoCmd.SetWarnings True

 Next I



End Sub   

正如您所见,
strResult
的值被传递到文本框中,我只想在再次重新启动循环后继续向文本框中添加该值。

尝试使用其他变量在循环外部声明strResult:

Dim I As Integer
Dim varNumber As Integer  ' this takes the number for how many times to loop
Dim strQueryName As String  ' this is for the sql to find lowest rack number
Dim P  As Integer  'this value is the prod number
Dim x As Integer   'value from lowestrackSQL
Dim strResult as String
我认为它每次都会清除它,因为它的范围限制在for循环内

还有,你说呢

Forms!form3!txtPrint = strResult
加在下面

strResult = Forms!form3!text5
…用变量的值覆盖文本框的内容

要附加值而不是覆盖值,需要执行以下操作:

Forms!Form3!Text5 = Forms!Form3!Text5 & strResult

strResult没有在循环中声明(我猜它是在模块/类级别声明的)。即使是vba范围规则也是。。。不一样。声明变量后,即使它是一个循环,也不会重新初始化它。另一个奇怪的事实是,如果它是在循环中声明的,那么它可以在同一个方法中的循环之后使用。这可能就是vba程序员倾向于在顶部声明所有内容的原因。我猜它根本没有声明,如
选项Compare Database
所示,该选项通常指示文件的顶部,更重要的是缺少
选项Explicit
Dim P声明为整数,该值是产品编号
,以后使用
prodnumber
时不进行声明。不管怎样,我建议的改变应该可以让它工作,如果不是最理想的话
Forms!Form3!Text5 = Forms!Form3!Text5 & strResult