【问题标题】:VBA variable name that increases with each loop and can be used to populate a textboxVBA 变量名称随每个循环增加,可用于填充文本框
【发布时间】:2015-01-09 21:46:35
【问题描述】:

希望您能提供帮助。出于某种原因,我想不出我做错了什么。也许一双新鲜的眼睛会有所帮助。

  • 从查询中提取总帐及其货币价值。
  • 每个 GL 需要在报表中填充具有连续名称的文本框。例如:GL1、GL2、GL3 等。
  • 每个 GL 值(货币)都需要填充其他唯一命名的文本框。例如:GLV1、GLV2、GLV3、GLV4 等。

这是我的脚本 - 任何帮助将不胜感激。

Dim rs As DAO.Recordset
Set rs = CurrentDb.OpenRecordset("SELECT * FROM qry_GL_totals")
Dim GLField As Variant

If Not (rs.EOF And rs.BOF) Then
    rs.MoveFirst 'Unnecessary in this case, but still a good habit
    RecordCount = 0
    Do Until rs.EOF = True
        RecordCount = RecordCount + 1
        MsgBox (rs!GL & " " & rs!Expr1) 'MsgBox is just for testing
        "[" & GLField & "]" =rs!GL
        "[" & GLField & "T]" =rs!Expr1
        rs.MoveNext
    Loop
Else
End If
rs.Close
Set rs = Nothing
GLField = Null
End Sub

更新:这就是我现在所拥有的,但仍然失败。

Private Sub Report_Load() 

    Dim rs As DAO.Recordset 
    Set rs = CurrentDb.OpenRecordset("SELECT * FROM qry_GL_totals") 
    If Not (rs.EOF And rs.BOF) Then 
        rs.MoveFirst 
        i = 0 
        Do Until rs.EOF = True 
            i = i + 1 
            Me.Controls(GLField) = rs!GL 
            Me.Controls(GLField & "T") = rs!Expr1 
            rs.MoveNext 
        Loop 
    Else 

    End If 
    rs.Close 
    Set rs = Nothing 

End Sub 

运行时错误“438”对象不支持此属性或方法。

【问题讨论】:

    标签: vba loops variables report sequential


    【解决方案1】:

    不妨试试:

    Me.Controls(GLField) = rs!GL
    Me.Controls(GLField & "T") = rs!Expr1
    

    对于您更新的代码:

    Me.Controls("GL" & i) = rs!GL
    Me.Controls("GLV" & i) = rs!Expr1
    

    假设您的控件名为“GL1”、“GL2”、“GLV1”、“GLV2”等

    【讨论】:

    • 谢谢蒂姆,但不幸的是,那是错误的。 Me.Controls(RecordCount) = rs!Expr1 Me.Controls(RecordCount & "L") = rs!GL 运行时错误 "438" 对象不支持此属性或方法。
    • 那不是我写的。该变量需要保存您的控件的 name(至少我认为您正在尝试这样做)请参阅:stackoverflow.com/questions/8267453/…
    • 这就是我现在拥有的,但仍然失败。
    • 这就是我现在拥有的,但仍然失败。 Private Sub Report_Load() Dim rs As DAO.Recordset Set rs = CurrentDb.OpenRecordset("SELECT * FROM qry_GL_totals") If Not (rs.EOF And rs.BOF) Then rs.MoveFirst i = 0 Do until rs.EOF = True i = i + 1 Me.Controls(GLField) = rs!GL Me.Controls(GLField & "T") = rs!Expr1 rs.MoveNext Loop Else End If rs.Close Set rs = Nothing End Sub Run-time error " 438" 对象不支持此属性或方法。任何帮助将不胜感激。
    • 如果您要发布代码,最好将其添加到您的问题中:cmets 中的代码很难理解。
    猜你喜欢
    • 2013-05-30
    • 1970-01-01
    • 2016-04-14
    • 2019-01-21
    • 1970-01-01
    • 2016-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多