ОП говорит:
Когда я выбираю «Вернуться из отпуска» под выпадающим списком «Тип изменения», мой макрос печати печатается как тип изменения «зарплата», а не «возврат из отпуска»«
Предполагая, что
тип изменения« зарплата »
соответствует « печать по умолчанию » т.е.:
ws.PageSetup.PrintArea = ActiveWorkbook.Worksheets("Form Lists").Range("i2")
Кажется, что причина, по которой предоставленный код всегда печатает диапазон по умолчанию, заключается в том, что строки, определяющие вывод на печать, проверяют ActiveSheet.Name
вместо значения в «Тип поля изменения и печать»
Предлагаемое решение:
Измените эти строки, чтобы отразить ячейку, где поле Тип изменения и выведите « расположен:
Замените ActiveSheet.Name
на соответствующий cell.address
т.е.: F10
и обновите при необходимости сравнения с« v1.20 »и« v1.21"
If Right(ActiveSheet.Name, 5) = "v1.20" _
Or Right(ActiveSheet.Name, 5) = "v1.21" _
Or str = "Corporate" Then
ws.PageSetup.PrintArea = ActiveWorkbook.Worksheets("Form Lists").Range("H2")
Else
ws.PageSetup.PrintArea = ActiveWorkbook.Worksheets("Form Lists").Range("i2")
End If
Должно стать (сравнительные значения показаны в качестве справочных, они должны быть обновлены встрока с вариантами в раскрывающемся списке) :
If ActiveSheet.Range("F10").Value2 = "Return from leave" _
Or str = "Corporate" Then
ws.PageSetup.PrintArea = ActiveWorkbook.Worksheets("Form Lists").Range("H2")
Else
ws.PageSetup.PrintArea = ActiveWorkbook.Worksheets("Form Lists").Range("i2")
End If
Примечание :
1. Избегайте использования ActiveWorkbook
и ActiveSheet
, предложите заменитьвсе их экземпляры: ThisWorkbook
и datasheet
соответственно.
2. Кроме того, я бы предложил рассмотреть и включить использование С оператором и Выбор оператора Case на протяжении всей вашей процедуры.