Как использовать массив, чтобы найти и сравнить объекты с одинаковыми именами, а затем обновить объекты? - PullRequest
0 голосов
/ 29 сентября 2019

Я пытаюсь упростить мой VBA-код для использования массивов, а не набора операторов if / then. У меня есть набор меток в форме VBA, которые имеют аналогичные названия, такие как mortgageTotalLbl и mortgageRunningLbl. Я хочу сравнить два значения и выделить RunningLbls, когда они больше или равны соответствующему TotalLb.

Я пытался использовать приведенный ниже код, но цвет не обновляется на объектах, когдаусловие верно. Это также не дает мне никаких ошибок при запуске.

Sub Update_Colors()

Dim account As Variant
Dim allaccounts As Variant
Dim var1 As String
Dim var2 As String
Dim currentaccount As Variant

allaccounts = Array("mortgage", "electricity", "phones", "internet", "garbage", "water")

For Each account In allaccounts
    var1 = account & "RunningLbl"
    var2 = account & "TotalLbl"
    currentaccount = var1
    If var1 >= var2 Then
        currentaccount.ForeColor = RGB(0, 200, 0)
    End If
Next account

End Sub

1 Ответ

0 голосов
/ 29 сентября 2019

var1 - строка, поэтому, когда вы назначаете currenttaccount = var1, currenttaccount - это вариант / строка, а не метка в вашей форме. Вы просто получили название метки для раскрашивания.

Вам нужно получить метки и сравнить их подписи, а не их названия. Я предположил, что заголовки двойные и поэтому заставляем заголовки удваиваться. Вы получите сообщение об ошибке, если заголовки не могут быть приведены к Double (или к какому-либо типу в вашей ситуации).

Вы также получите ошибки, если нет меток с используемыми именами.

Dim myForm As frmTheFormWithTheLabels
Set myForm = New frmTheFormWithTheLabels
Dim myLabel1 As Control
Set myLabel = myForm.Controls(currentaccount)
Dim myLabel2 As Control
Set myLabel2 = myForm.Controls(var2)
If CDBL(myLabel1.Caption) >= CDBL(myLabel2.Caption)
    myLabel.ForeColor = RGB(0,200,0)
Else
    'Make the color something to represent the less than condition
End If
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...