循环遍历变量名称并使用for循环设置值

时间:2014-04-30 09:16:58

标签: vb6

我继承了某人的错误代码以尝试修复,在此代码中每天有15个条目,名称如下:

Mon01,Mon02,Mon03,Mon04等

然后我有一个具有相同数量条目的网格,我需要检查Mon01的值是否与网格中的第一个条目匹配,如果不匹配则更新其值。但正如我所说,有7个网格,所以7 * 15,所以不是有105行代码,而是有4个。

我的问题是,有没有办法循环并更改这些变量的值。一个例子是:

for (i = 0; i < 15; i++)
    variable = "Mon" + i
    If (variable.value <> Grid.TextArray(i) Then 
        variable.value = Grid.TextArray(i) 
    End If
End For

我知道上面的内容不是有效的VB6代码,但它试图以最佳方式获取消息。

我目前修改后的代码如下:

DB.Recordsource = "QUERY REMOVED"
Call DB.GetData(RS)

With RS
    Dim ChangeArray() As String

    If Trim(MonGrid.TextArray((1 * MonGrid.Cols) + 2)) <> ![Mon01] Then
        ![Mon01] = MonGrid.TextArray((1 * MonGrid.Cols) + 2)
        ReDim Preserve ChangeArray(0 To UBound(ChangeArray) + 1) As String
    End If

2 个答案:

答案 0 :(得分:1)

你对我不得不维持这样一个可怕的代码库表示哀悼。

答案是在Visual Basic中无法做到这一点。但是,假设所有MonXX变量属于同一类型,您可以将Mon声明为数组,然后搜索并替换Mon01Mon02等。Mon(01)Mon(02)。您可以使用具有正则表达式的合适编辑器来匹配Mon(\d\d)并将其替换为Mon\1 - 显然,这取决于正则表达式工具的工作方式。

答案 1 :(得分:0)

您可以将变量公开为属性并使用CallByName函数,这可能会对您有所帮助。 msdn信息在CallByName

它看起来像这样:

Option Explicit
Dim m_Mon01 As String
Dim m_Mon02 As String
Dim m_Mon03 As String

Public Property Let Mon01(ByVal strID As String)
    m_Mon01 = strID
End Property

Public Property Let Mon02(ByVal strID As String)
    m_Mon02 = strID
End Property

Public Property Let Mon03(ByVal strID As String)
    m_Mon03 = strID
End Property

Private Sub Command_Click()
    Dim lngIndex  As Long
    Dim strName   As String

    For lngIndex = 1 To 3
        strName = "Mon" + Format$(lngIndex, "00")
        CallByName Me, strName, VbLet, "The value form the grid"
    Next lngIndex
End Sub