Не могу прочитать значение CheckBox - PullRequest
0 голосов
/ 22 августа 2011

У меня странная проблема. У меня есть форма, которая выглядит как на картинке enter image description here

Эти флажки генерируются с таким кодом, как этот (есть цикл, который увеличивает значения i и l ... все в порядке, потому что другие компоненты генерируются с помощью одного и того же куска кода, а у меня нет проблема получения их значений):

Public Sub AddCboxs(form, masina, nrmasini, replicare, nrcboxs)
Dim i, k, l As Integer
i = 0
l = 1
Do While i < nrmasini
        Do While l < nrcboxs + 1
Set cControl = form.Controls("iooly" & i).Add("Forms.CheckBox.1", "sc" & l & "oly" & i, True)
            With cControl
                .Width = 15
                .Height = 16
                .Top = 200 + k
                .Left = 205

            End With
        k = k + 35
        l = l + 1
    Loop
l = 1
k = 0
i = i + 1
Loop
End Sub

Теперь ... я хочу сделать следующее. Если флажок SC установлен, я хочу сделать кое-что, что вы увидите в следующем фрагменте кода ... без проверки значения флажка код работает нормально и делает то, что я хочу, чтобы ... но проблема в том, что мне нужно сделать это только когда флажок установлен.

Public Sub CalcOly()
Dim i, j, k As Integer
Dim Rand, ContorVal, ContorTotal As Long
Dim ws As Worksheet
Set ws = Worksheets("Config")
Dim cControl As Control
i = 0
j = 1
ContorVal = 0
Do While i < 5
    Do While j < 3
    Rand = 30
    If raport.Controls("sc" & j & "oly" & i).Value = True Then
            Do While ws.Cells(Rand, 1).Value <> "" And Rand < 65536
                If ws.Cells(Rand, 1).Value = raport.Controls("combo" & j & "oly" & i).Value Then
                    Set cControl = raport.Controls("iooly" & i).Add("Forms.Label.1", "valoare" & j & "oly" & i, True)
                    With cControl
                        .Caption = Int(ws.Cells(Rand, 2).Value * raport.Controls("q" & j & "oly" & i).Value) & " RON"
                        .Width = 55
                        .Height = 14
                        .Top = 42 + k
                        .Left = 225
                    End With
                    ContorVal = ContorVal + Int(ws.Cells(Rand, 2).Value * raport.Controls("q" & j & "oly" & i).Value)
                End If
            Rand = Rand + 1
            Loop
    End If
    j = j + 1
    k = k + 35
    Loop
Set cControl = raport.Controls("iooly" & i).Add("Forms.Label.1", "totalval" & "oly" & i, True)
                    With cControl
                        .Caption = ContorVal & " RON"
                        .Width = 55
                        .Height = 14
                        .Top = 350
                        .Left = 225
                    End With
k = 0
j = 1
i = i + 1
ContorVal = 0
Loop
End Sub

Теперь вот странная вещь ... если я нажимаю на CALCUL VALOARE (которая вызывает процедуру CalcOly), он выполняет код, но независимо от того, установлен флажок SC или нет, он не показывает никакого значения. Если я перехожу на страницу Olympia 4 или Olympia 5, она делает то, что ей нужно, но снова ... игнорируя, если флажки SC установлены или нет. Я пытался получить значение флажка в отдельной подписи, и я заметил, что он не понимает ... Я действительно не знаю почему! Большое спасибо за вашу помощь!

Позже: http://www.youtube.com/watch?v=mPb617JxgtI Я загрузил видео, чтобы увидеть, как странно действует приложение. Я не понимаю ... если я удаляю If, который проверяет, установлен ли флажок True или False, он работает нормально

Ответы [ 3 ]

0 голосов
/ 23 августа 2011

Это кажется немного неясным, но из справки по методу Add свойства Controls:

Если вы добавляете элемент управления во время выполнения, вы должны использовать восклицательный синтаксис ссылаться на свойства этого элемента управления. Например, чтобы вернуть Текстовое свойство элемента управления, добавленного во время выполнения, используйте следующее Синтаксис:

UserForm1! Thebox.text

Вы можете попробовать изменить:

If raport.Controls("sc" & j & "oly" & i).Value = True Then

до:

If raport!("sc" & j & "oly" & i).Value = True Then

edit: Первоначально я использовал отдельную переменную для создания строки, но это не сработало бы, так как программа искала бы элемент управления с тем же именем, что и у переменной, а не со значением переменной

edit2: если это не сработает, вы можете попробовать:

If raport!"sc" & j & "oly" & i.Value = True Then

но это будет зависеть от приоритета ! и . относительно &

0 голосов
/ 21 октября 2011

Просто используйте их для нажатия кнопки

if checkboxname.value = true then 
  invoke your function 
end if
0 голосов
/ 22 августа 2011

Вы должны показать нам фрагмент кода, который генерирует первые флажки, особенно если ваши другие флажки работают должным образом.

Тем не менее, несколько вещей:

В VBA выВы не можете объявить переменные следующим образом:

Dim i, j, k As Integer
Dim Rand, ContorVal, ContorTotal As Long

Вы должны сделать:

Dim i As Integer, j As Integer, k As Integer
Dim Rand As Long, ContorVal As Long, ContorTotal As Long

См. здесь

Отладка

Что вы увидели при отладке вашей пользовательской формы.raport.Controls("sc" & j & "oly" & i) существует?
Точно так же вы должны взглянуть на коллекцию raport.Controls(), чтобы увидеть, каковы элементы и их свойства.Это скажет вам, если ваши элементы управления действительно были созданы так, как вы хотели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...