Нераспознанная переменная в обработчике событий - PullRequest
2 голосов
/ 11 августа 2010

В обработчике событий (щелчок) я не могу заставить программу распознавать переменную j (она локальная). Когда он достигает строки check.Value = MyCheck & j.Value, он возвращает только «Mycheck1», даже если он находится в цикле.

Мне нужна программа, чтобы пройти через все кнопки проверки и проверить, выбраны ли они. Кто-нибудь знает правильный синтаксис?

Основная подпрограмма:

With TempForm.CodeModule
    ' ** Add/change next 5 lines' This code adds the commands/event handlers
    ' to the form
    X = .CountOfLines
    .InsertLines X + 1, "Sub CommandButton1_Click()"
    .InsertLines X + 2, "Dim rs As ADODB.Recordset"
    .InsertLines X + 3, "Dim rst As ADODB.Recordset"
    .InsertLines X + 4, "Dim i As Integer"
    .InsertLines X + 5, "Dim ran as string"
    .InsertLines X + 6, "j = 1 "
    .InsertLines X + 7, "set rs = Rsfun"
    .InsertLines X + 8, "Do While Not rs.EOF"
    '.InsertLines X + 8, "For j = " & i & " To rs.MaxRecords"
    '.InsertLines X + 9, "" & i & " = " & i & " +1"
    .InsertLines X + 9, "Dim check As MSForms.CheckBox "
    .InsertLines X + 10, "Set check = UserForm1.Controls.Add(""Forms.checkbox.1"")"
    .InsertLines X + 11, "check = MyCheck & j"
    .InsertLines X + 12, "If Check.value = true then"
    .InsertLines X + 13, "ran = ""A" & i & ""
    .InsertLines X + 14, "MsgBox (ran)"
    .InsertLines X + 15, "range(ran).value= rs.Fields(0)"
    .InsertLines X + 16, "End If"
    .InsertLines X + 17, "RS.MoveNext"
    .InsertLines X + 18, "j= j+1"
    .InsertLines X + 19, "Loop"
    .InsertLines X + 20, "Unload Me"
    .InsertLines X + 21, "End Sub"
    End With

Обработчик событий:

    Sub CommandButton1_Click()
    Dim rs As ADODB.Recordset
    Dim rst As ADODB.Recordset
    Dim j As Integer
    Dim ran As String
    j = 1
    Set rs = Rsfun
    Do While Not rs.EOF
    Dim check As MSForms.CheckBox
    Set check = UserForm1.Controls.Add("Forms.checkbox.1")
    check.Value = MyCheck & j.Value
    If check.Value = True Then
    ran = "A1"
    MsgBox (ran)
    range(ran).Value = rs.Fields(0)
    End If
    j = j + 1
    rs.MoveNext
    Loop
    Unload Me
    End Sub

1 Ответ

0 голосов
/ 13 августа 2010

Вместо check.Value = MyCheck & j.Value вам нужно

check.Value = UserForm1.Controls(MyCheck & j).Value

Еще одна вещь с помощью:

Set check = UserForm1.Controls.Add("Forms.checkbox.1")

добавит ваш cb в верхний левый угол, а следующий покроет предыдущий.Возможно, после добавления вы захотите переместить его чуть-чуть как check.top = j * 15

Удачи.

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