2016-09-07 6 views
0

Я хочу заполнить столбец UserForm. Пользователь имеет 4 варианта, как заполнять столбец. Моя проблема заключается в том, что работает только первый вариант (2). Также маска ввода не исчезнет после нажатия кнопки OK. Выбранный вариант следует скопировать в столбец H и заполнить автоматически. Где мои ошибки?Заполните столбец UserForm

Private Sub CommandButton1_Click() 

' OK Button 
Dim emptyRow As Range 
Dim lastrow As Long 
lastrow = Cells.SpecialCells(xlCellTypeLastCell).row 

Worksheets("Sheet1").Activate 
Set emptyRow = Worksheets("Sheet1").Range("H2:H" & lastrow) 

If OptionButton2.value = True Then 
    emptyRow.value = "2" 

    If OptionButton3.value = True Then 
     emptyRow.value = "3" 

     If OptionButton4.value = True Then 
      emptyRow.value = "4" 

      If OptionButton5.value = True Then 
       emptyRow.value = "5" 
      End If 
     End If 
    End If 
End If 

End Sub 
+0

найти свою последнюю строку, я рекомендую что-то вроде 'lastrow = Worksheets ("Лист1"). Cells (Worksheets ("Лист1"). Rows.Count, "H"). End (xlUp) .Row'. Кроме того, ваши IF-операторы должны быть похожи на 'If' this' Then', что 'ElseIf' этот' Then' '' Else' '' End If' – Tyeler

+0

Чтобы скрыть форму после нажатия кнопки, вы должны добавить 'Me.Hide 'в конце вашего кода – gizlmo

+0

После того, как я отступлю от вашего кода, возможно, это более понятно, почему. если первый 'If' является ложным, тогда вы не вводите все остальные' If's ... –

ответ

0

Дайте этому выстрел .. Самая большая разница здесь как If statement написано. Ваш исходный код имел If statements, вложенные друг в друга, что хорошо, но не будет работать над тем, чего вы пытаетесь достичь. Заявление, которое я написал, - If statement. Другой способ, которым вы можете это сделать, - это дать Select Case заявлениям. Я сохраняю код похожим на ваш оригинал для простоты обучения.

Private Sub CommandButton1_Click() 
' OK Button 
Dim emptyRow As Range, ws As Worksheet 
Dim lastrow As Long 

Set ws = ThisWorkbook.Sheets(1) 
lastrow = ws.Cells(ws.Rows.Count, "H").End(xlUp).Row 'A more flexible way to find last row 
Set emptyRow = ws.Range("H2:H" & lastrow) 

If OptionButton2.value = True Then 
    emptyRow.value = "2" 
ElseIf OptionButton3.value = True Then 
    emptyRow.value = "3" 
ElseIf OptionButton4.value = True Then 
    emptyRow.value = "4" 
ElseIf OptionButton5.value = True Then 
    emptyRow.value = "5" 
Else: MsgBox "No option was chosen.", vbOKOnly, "No Option Chosen" 'Catches no button selected 
End If 

Me.Hide 'This hides the userform. Another method is Unload Me which drops the cache as well 

End Sub 
+0

Большое вам спасибо! Это очень помогает! На самом деле я не знал о «ElseIf» -Option. Я скопировал ваш код в мой, и у меня все еще возникла проблема, что код перезаписывает мой H1 и автоматически автозапускает. Edit: Я изменил ws.Cells (ws.Rows.Count, «H»). End (xlUp) .Row' в 'ws.Cells (ws.Rows.Count,« H »). End (xl ** Down **). Row'. Теперь он не перезаписывает мой H1, но последний, который он выбирает, находится в камере 104mil. – Sven

+0

Я копировал-макаровый код и запускал его .. он отлично работает. Вы уверены, что нет никаких различий в вашем и этом? – Tyeler

+0

Я очень уверен! Но это все еще помогает мне в достижении моей работы. Большое спасибо! – Sven

Смежные вопросы