Vb6 循环变量名并使用for循环设置值

Vb6 循环变量名并使用for循环设置值,vb6,Vb6,我继承了一些人的坏代码来尝试修复,在这段代码中,每天有15个条目,名称如下: 星期一、星期二、星期三、星期四等 然后,我有一个具有相同条目数的网格,我需要检查Mon01的值是否与网格中的第一个条目匹配,如果不匹配,则更新其值。但正如我所说,有7个网格,所以7*15,所以我宁愿有4行代码,而不是105行代码 我的问题是,有没有一种方法可以循环并更改这些变量的值。一个例子是: for (i = 0; i < 15; i++) variable = "Mon" + i If (v

我继承了一些人的坏代码来尝试修复,在这段代码中,每天有15个条目,名称如下:

星期一、星期二、星期三、星期四等

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

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

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
(i=0;i<15;i++)的

variable=“Mon”+i
如果(variable.value Grid.textary)(i),则
variable.value=Grid.TextArray(i)
如果结束
结束
我知道上面的代码不是有效的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
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
DB.Recordsource=“查询已删除”
调用DB.GetData(RS)
用RS
Dim ChangeArray()作为字符串
如果Trim(MonGrid.textary((1*MonGrid.Cols)+2))![Mon01]那么
![Mon01]=MonGrid.textary((1*MonGrid.Cols)+2)
ReDim将CHANGERARY(0到UBound(CHANGERARY)+1)保留为字符串
如果结束

我对您不得不维护如此糟糕的代码库表示哀悼


答案是,在Visual Basic中没有这样做的方法。但是,假设所有
MonXX
变量的类型相同,您可以将
Mon
声明为数组,然后使用
Mon(01)
Mon(02)搜索并替换
Mon01
Mon02
,等等
。您可能可以使用一个体面的编辑器,在
Mon(\d\d)
上匹配正则表达式,并将其替换为
Mon\1
——显然,这取决于regex工具的工作方式。

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

它看起来像这样:

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
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