Всем привет! Помогите решить проблему с печатью материалов. Задача следующая: Есть макрос ПечатьИндивидуальных материалов. При выполнении макроса он переходит на лист "Ядро" куда ставит таргет на ячейку J15 (флажок №1 и AB15 (флажок №2). Соответственно если выбран один из флажков, вызываем макрос печати материала который выбран. Сам код: [vba]
Код
Sub ПечатьИндивидуальных() Application.ScreenUpdating = False Sheets("Ядро").Select Set target = Range("J15") If target.Value = "0" Then MsgBox ("Индивидуальные материалы: пропуск материалов №1!") Sheets("1").Select End If If target.Value = "1" Then Call макросПечатьИндив1 Sheets("1").Select End If Set target = Range("AB15") If target.Value = "0" Then MsgBox ("Индивидуальные материалы: пропуск материалов №2!") Sheets("1").Select End If If target.Value = "1" Then Call макросПечатьИндив2 Sheets("1").Select End If Application.ScreenUpdating = True End Sub
[/vba] + Фрагмент документа в виде изображения.
В чём ошибка: Макрос прекращает свое выполнение при первом условии IF и не ставит таргет на проверку далее в другую ячейку.
Всем привет! Помогите решить проблему с печатью материалов. Задача следующая: Есть макрос ПечатьИндивидуальных материалов. При выполнении макроса он переходит на лист "Ядро" куда ставит таргет на ячейку J15 (флажок №1 и AB15 (флажок №2). Соответственно если выбран один из флажков, вызываем макрос печати материала который выбран. Сам код: [vba]
Код
Sub ПечатьИндивидуальных() Application.ScreenUpdating = False Sheets("Ядро").Select Set target = Range("J15") If target.Value = "0" Then MsgBox ("Индивидуальные материалы: пропуск материалов №1!") Sheets("1").Select End If If target.Value = "1" Then Call макросПечатьИндив1 Sheets("1").Select End If Set target = Range("AB15") If target.Value = "0" Then MsgBox ("Индивидуальные материалы: пропуск материалов №2!") Sheets("1").Select End If If target.Value = "1" Then Call макросПечатьИндив2 Sheets("1").Select End If Application.ScreenUpdating = True End Sub
[/vba] + Фрагмент документа в виде изображения.
В чём ошибка: Макрос прекращает свое выполнение при первом условии IF и не ставит таргет на проверку далее в другую ячейку.Jelvis
Начнем с того, что назвать переменную "target" - не очень хорошая идея. Это слово зарезервировано для изменяемой переменной макросов модулей листа и книги. В принципе ничего страшного не случилось, но все-таки лучше не стоит
По макросу - где, по-Вашему, макрос должен "ставить" этот самый таргет? В какой строке кода? На каком листе находится ячейка J15? На "Ядро"? А на каком тогда ячейка АВ15? На листе "1", мы ж туда перешли после первого Set (если нашли в J15 0 или 1). Вы уверены, что в J15 и в АВ15 у Вас именно текстовые 0 и 1? Вы в коде макроса их в кавычки заключили - получили текстовое значение Ну и для лучшего понимания очень неплохо было бы посмотреть на файлик. Картинки здесь ничем не помогут
Начнем с того, что назвать переменную "target" - не очень хорошая идея. Это слово зарезервировано для изменяемой переменной макросов модулей листа и книги. В принципе ничего страшного не случилось, но все-таки лучше не стоит
По макросу - где, по-Вашему, макрос должен "ставить" этот самый таргет? В какой строке кода? На каком листе находится ячейка J15? На "Ядро"? А на каком тогда ячейка АВ15? На листе "1", мы ж туда перешли после первого Set (если нашли в J15 0 или 1). Вы уверены, что в J15 и в АВ15 у Вас именно текстовые 0 и 1? Вы в коде макроса их в кавычки заключили - получили текстовое значение Ну и для лучшего понимания очень неплохо было бы посмотреть на файлик. Картинки здесь ничем не помогут_Boroda_
Вообщем, что-то получилось. Проверку я так понимаю нужно добавить на каждое условие, типо этого...
[vba]
Код
Set target = Range("J15") If target.Value = "0" Then Set target = Range("AB15") If target.Value = "0" Then MsgBox ("Индивидуальные материалы не выбраны, печать отменена!") Sheets("1").Select End If If target.Value = "1" Then Call макросПечатьИндив2 Sheets("1").Select End If End If
[/vba]
Вообщем, что-то получилось. Проверку я так понимаю нужно добавить на каждое условие, типо этого...
[vba]
Код
Set target = Range("J15") If target.Value = "0" Then Set target = Range("AB15") If target.Value = "0" Then MsgBox ("Индивидуальные материалы не выбраны, печать отменена!") Sheets("1").Select End If If target.Value = "1" Then Call макросПечатьИндив2 Sheets("1").Select End If End If
Текстовой А файл не обязательно родной нужен. Можно нарисовать что-то похожее, но буз ненужных для решения конкретно этого вопроса данных. Или в своем родном удалить все. А так непонятно - что значит "Макрос прекращает свое выполнение при первом условии IF"? По поводу листов - я Вам написал, что если в J15 находится 0 или 1, то мы переходим на лист "1" и ячейка АВ15 проверяется уже там. А в той ячейке нет ни 0, ни 1, поэтому второй Set и не выполняется И по-прежнему непонятно, что означает "ставит таргет"
Текстовой А файл не обязательно родной нужен. Можно нарисовать что-то похожее, но буз ненужных для решения конкретно этого вопроса данных. Или в своем родном удалить все. А так непонятно - что значит "Макрос прекращает свое выполнение при первом условии IF"? По поводу листов - я Вам написал, что если в J15 находится 0 или 1, то мы переходим на лист "1" и ячейка АВ15 проверяется уже там. А в той ячейке нет ни 0, ни 1, поэтому второй Set и не выполняется И по-прежнему непонятно, что означает "ставит таргет"_Boroda_
Sub ПечатьИндивидуальных() Application.ScreenUpdating = False With Sheets("Ядро") 'J15 и АВ15 вообще не нужны z1_ = .Range("K13") z2_ = .Range("AC13") End With If z1_ Then 'если z1_=ИСТИНА Call макросПечатьИндив1 Else 'иначе t_ = 1 'для текста End If If z2_ Then 'если z2_=ИСТИНА Call макросПечатьИндив2 Else 'иначе If z1_ Then 'если z1_=ИСТИНА t_ = 2 'для текста Else 'иначе t_ = "1 и 2" 'для текста End If End If If t_ <> "" Then 'если для текста не пустое MsgBox "Индивидуальные материалы: пропуск материалов № " & t_ & "!" End If Application.ScreenUpdating = True End Sub
[/vba]
Вот так попробуйте [vba]
Код
Sub ПечатьИндивидуальных() Application.ScreenUpdating = False With Sheets("Ядро") 'J15 и АВ15 вообще не нужны z1_ = .Range("K13") z2_ = .Range("AC13") End With If z1_ Then 'если z1_=ИСТИНА Call макросПечатьИндив1 Else 'иначе t_ = 1 'для текста End If If z2_ Then 'если z2_=ИСТИНА Call макросПечатьИндив2 Else 'иначе If z1_ Then 'если z1_=ИСТИНА t_ = 2 'для текста Else 'иначе t_ = "1 и 2" 'для текста End If End If If t_ <> "" Then 'если для текста не пустое MsgBox "Индивидуальные материалы: пропуск материалов № " & t_ & "!" End If Application.ScreenUpdating = True End Sub
Глубоко не вникал, смотрел только последний макрос. Если условия взаимоисключающиеся, можно упростить условия: [vba]
Код
Sub ПечатьИндивидуальных() Application.ScreenUpdating = False
With Sheets("Ядро") z1_ = .Range("K13").Value z2_ = .Range("AC13").Value End With ' ---------------------------------------------------- Select Case True Case z1_ t_ = 2 Call макросПечатьИндив1 Case z2_ t_ = 1 Call макросПечатьИндив2 Case Else t_ = "1 и 2" End Select ' ---------------------------------------------------- If t_ = "1 и 2" <> "" Then 'если для текста не пустое MsgBox "Индивидуальные материалы: пропуск материалов № " & t_ & "!" End If
Application.ScreenUpdating = True End Sub
[/vba] Или t_ вынести в отдельный Select Case?
Глубоко не вникал, смотрел только последний макрос. Если условия взаимоисключающиеся, можно упростить условия: [vba]
Код
Sub ПечатьИндивидуальных() Application.ScreenUpdating = False
With Sheets("Ядро") z1_ = .Range("K13").Value z2_ = .Range("AC13").Value End With ' ---------------------------------------------------- Select Case True Case z1_ t_ = 2 Call макросПечатьИндив1 Case z2_ t_ = 1 Call макросПечатьИндив2 Case Else t_ = "1 и 2" End Select ' ---------------------------------------------------- If t_ = "1 и 2" <> "" Then 'если для текста не пустое MsgBox "Индивидуальные материалы: пропуск материалов № " & t_ & "!" End If
Application.ScreenUpdating = True End Sub
[/vba] Или t_ вынести в отдельный Select Case?vikttur
Сообщение отредактировал vikttur - Вторник, 26.02.2019, 13:42