2016-11-21 2 views
1

Я работаю над формой в VBA для моего документа. Я учусь, когда я иду. У меня есть поле со списком, в котором вы можете выбрать элемент из списка. В принципе, я хочу, чтобы документ распечатывал 4 копии, если выбран пункт «Homestretch» ​​и 3 копии для всего, что выбрано или введено в поле со списком.If и ElseIf Statement в VBA

У меня есть 4 копии, которые отлично печатаются, когда я выбираю Homestretch, но если я выберу что-нибудь еще, оно не будет напечатано. Также обратите внимание, что это находится под кнопкой «кнопка», и я хочу, чтобы это выполнялось, только если установлен флажок ckbPrint. Вот код ниже. Благодарю.

If Me.ckbPrint.Value = True Then 
If cbxCarrier.Value = "Homestretch" Then 
    ActiveDocument.PrintOut copies:=4 
ElseIf cbxCarrier.Value <> "Homestretch" Then 
ElseIf Me.ckbPrint.Value = True Then 
    ActiveDocument.PrintOut copies:=3 
End If 
End If 

ответ

2

Ваш код приложения слишком много тестов , Вы можете упростить это к следующему:

Dim copies As Long 

If Me.ckbPrint Then 
    If cbxCarrier.Value = "Homestretch" Then 
     copies = 4 
    Else 
     copies = 3 
    End If 
    ActiveDocument.PrintOut copies:=copies 
End If 
+0

Престижность для исключения явного теста '{bool-expression} = True', но тогда ... вы полагаетесь на значение члена по умолчанию для' ckbPrint', но явно проверяете 'cbxCarrier.Value'. Я бы также выручил раньше с 'If Not Me.ckbPrint.Value Then Exit Sub' и удалит уровень отступов. Перспектива направлена ​​на удаление дублирования «ActiveDocument.PrintOut». Хорошая работа! –

+0

Спасибо! Это отлично работало, и очень легко понять, что здесь происходит. Полагаю, я просто переусердствовал. Еще раз спасибо! – Christopher

0

Он должен выглядеть как этот

If Me.ckbPrint.Value = True Then 
    If cbxCarrier.Value = "Homestretch" Then 
     ActiveDocument.PrintOut copies:=4 
    ElseIf cbxCarrier.Value <> "Homestretch" Then 
     'put your inner else statement here. If none, then remove it 
    End If 
ElseIf Me.ckbPrint.Value = False Then 'this else is connected with first if 
ActiveDocument.PrintOut copies:=3 
End If 

просто изменить заявления, если это не то, что вы хотите, но это, как если и ElseIf работает

+0

Труднее сказать из-за [отсутствия] отступов, но код OP ничего не печатает, когда 'Not Me.ckbPrint.Value'. –

0

Для простых If ... Then случаев, когда вам просто нужно решить между присвоением одной из двух значений, то IIF() функция может сделать ваш код проще:

If Me.ckbPrint Then ActiveDocument.PrintOut _ 
    copies:=IIf(cbxCarrier.Value="Homestretch", 4, 3) 

Синтаксис: IIf(test, if_test_true, if_test_false)

+0

По словам автора, он новичок. Можете ли вы добавить еще несколько объяснений, почему ваши строки кода помогут? – reporter