我继承了某人的错误代码以尝试修复,在此代码中每天有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
答案 0 :(得分:1)
你对我不得不维持这样一个可怕的代码库表示哀悼。
答案是在Visual Basic中无法做到这一点。但是,假设所有MonXX
变量属于同一类型,您可以将Mon
声明为数组,然后搜索并替换Mon01
,Mon02
等。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