Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Печать материалов с проверкой через target - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по Excel » Печать материалов с проверкой через target (Формулы/Formulas)
Печать материалов с проверкой через target
Jelvis Дата: Вторник, 26.02.2019, 11:32 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 17
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Всем привет! Помогите решить проблему с печатью материалов.
Задача следующая:
Есть макрос ПечатьИндивидуальных материалов.
При выполнении макроса он переходит на лист "Ядро" куда ставит таргет на ячейку 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 и не ставит таргет на проверку далее в другую ячейку.
К сообщению приложен файл: 8117251.png (15.3 Kb)


Сообщение отредактировал Jelvis - Вторник, 26.02.2019, 11:33
 
Ответить
СообщениеВсем привет! Помогите решить проблему с печатью материалов.
Задача следующая:
Есть макрос ПечатьИндивидуальных материалов.
При выполнении макроса он переходит на лист "Ядро" куда ставит таргет на ячейку 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
Дата добавления - 26.02.2019 в 11:32
_Boroda_ Дата: Вторник, 26.02.2019, 11:48 | Сообщение № 2
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Начнем с того, что назвать переменную "target" - не очень хорошая идея. Это слово зарезервировано для изменяемой переменной макросов модулей листа и книги. В принципе ничего страшного не случилось, но все-таки лучше не стоит

По макросу - где, по-Вашему, макрос должен "ставить" этот самый таргет? В какой строке кода?
На каком листе находится ячейка J15? На "Ядро"? А на каком тогда ячейка АВ15? На листе "1", мы ж туда перешли после первого Set (если нашли в J15 0 или 1).
Вы уверены, что в J15 и в АВ15 у Вас именно текстовые 0 и 1? Вы в коде макроса их в кавычки заключили - получили текстовое значение
Ну и для лучшего понимания очень неплохо было бы посмотреть на файлик. Картинки здесь ничем не помогут


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеНачнем с того, что назвать переменную "target" - не очень хорошая идея. Это слово зарезервировано для изменяемой переменной макросов модулей листа и книги. В принципе ничего страшного не случилось, но все-таки лучше не стоит

По макросу - где, по-Вашему, макрос должен "ставить" этот самый таргет? В какой строке кода?
На каком листе находится ячейка J15? На "Ядро"? А на каком тогда ячейка АВ15? На листе "1", мы ж туда перешли после первого Set (если нашли в J15 0 или 1).
Вы уверены, что в J15 и в АВ15 у Вас именно текстовые 0 и 1? Вы в коде макроса их в кавычки заключили - получили текстовое значение
Ну и для лучшего понимания очень неплохо было бы посмотреть на файлик. Картинки здесь ничем не помогут

Автор - _Boroda_
Дата добавления - 26.02.2019 в 11:48
Jelvis Дата: Вторник, 26.02.2019, 11:55 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 17
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Файл к сожалению предоставить не могу, лишь код выборочно, так вот:
Ячейки и J15 и AB15 лежат на одном листе "Ядро"
J15 - содержит формулу [vba]
Код
=ЕСЛИ(K13=ИСТИНА;"1";"0")
[/vba]
AB15 - содержит формулу [vba]
Код
=ЕСЛИ(AC13=ИСТИНА;"1";"0")
[/vba]
Получается ячейке будет текстовой или уже числовой?
 
Ответить
СообщениеФайл к сожалению предоставить не могу, лишь код выборочно, так вот:
Ячейки и J15 и AB15 лежат на одном листе "Ядро"
J15 - содержит формулу [vba]
Код
=ЕСЛИ(K13=ИСТИНА;"1";"0")
[/vba]
AB15 - содержит формулу [vba]
Код
=ЕСЛИ(AC13=ИСТИНА;"1";"0")
[/vba]
Получается ячейке будет текстовой или уже числовой?

Автор - Jelvis
Дата добавления - 26.02.2019 в 11:55
Jelvis Дата: Вторник, 26.02.2019, 12:02 | Сообщение № 4
Группа: Пользователи
Ранг: Новичок
Сообщений: 17
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Вообщем, что-то получилось. Проверку я так понимаю нужно добавить на каждое условие, типо этого...

[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
[/vba]

Автор - Jelvis
Дата добавления - 26.02.2019 в 12:02
Nic70y Дата: Вторник, 26.02.2019, 12:15 | Сообщение № 5
Группа: Друзья
Ранг: Экселист
Сообщений: 8759
Репутация: 2273 ±
Замечаний: 0% ±

Excel 2010
прикольные формулы :)
число
Код
=--K13
текст
Код
=--K13&""


ЮMoney 41001841029809
 
Ответить
Сообщениеприкольные формулы :)
число
Код
=--K13
текст
Код
=--K13&""

Автор - Nic70y
Дата добавления - 26.02.2019 в 12:15
_Boroda_ Дата: Вторник, 26.02.2019, 12:27 | Сообщение № 6
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Текстовой
А файл не обязательно родной нужен. Можно нарисовать что-то похожее, но буз ненужных для решения конкретно этого вопроса данных. Или в своем родном удалить все.
А так непонятно - что значит "Макрос прекращает свое выполнение при первом условии IF"?
По поводу листов - я Вам написал, что если в J15 находится 0 или 1, то мы переходим на лист "1" и ячейка АВ15 проверяется уже там. А в той ячейке нет ни 0, ни 1, поэтому второй Set и не выполняется
И по-прежнему непонятно, что означает "ставит таргет"


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеТекстовой
А файл не обязательно родной нужен. Можно нарисовать что-то похожее, но буз ненужных для решения конкретно этого вопроса данных. Или в своем родном удалить все.
А так непонятно - что значит "Макрос прекращает свое выполнение при первом условии IF"?
По поводу листов - я Вам написал, что если в J15 находится 0 или 1, то мы переходим на лист "1" и ячейка АВ15 проверяется уже там. А в той ячейке нет ни 0, ни 1, поэтому второй Set и не выполняется
И по-прежнему непонятно, что означает "ставит таргет"

Автор - _Boroda_
Дата добавления - 26.02.2019 в 12:27
_Boroda_ Дата: Вторник, 26.02.2019, 12:35 | Сообщение № 7
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Вот так попробуйте
[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]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеВот так попробуйте
[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]

Автор - _Boroda_
Дата добавления - 26.02.2019 в 12:35
vikttur Дата: Вторник, 26.02.2019, 13:19 | Сообщение № 8
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2941
Репутация: 526 ±
Замечаний: 0% ±

Глубоко не вникал, смотрел только последний макрос. Если условия взаимоисключающиеся, можно упростить условия:
[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 - Вторник, 26.02.2019, 13:42
 
Ответить
СообщениеГлубоко не вникал, смотрел только последний макрос. Если условия взаимоисключающиеся, можно упростить условия:
[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
Дата добавления - 26.02.2019 в 13:19
Мир MS Excel » Вопросы и решения » Вопросы по Excel » Печать материалов с проверкой через target (Формулы/Formulas)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!