Страницы: 1
RSS
Макрос печати листов по условию, с помощью цикла
 
Добрый день.

Стал выдавать макрос ошибку. Хотя раньше работал.В чём может быть причина?

Код
Sub MyPrint()
Dim sh As Worksheet, s
With ThisWorkbook
For Each sh In .Worksheets
If Not sh.[P5].Value = 0 Then s = s & sh.Name & ","
Next sh
s = Split(Left(s, Len(s) - 1), ",")
.Worksheets(s).PrintOut Copies:=1
End With
End Sub
 
С картинками  - к экстрасенсам.
Могу предположить, что нет данных. И проверки нет. Попробуй так
Код
If Len(s) > 1 Then s = Split(Left(s, Len(s) - 1), ",")
И на какой строку ошибка? может с принтером что?
Изменено: Александр Моторин - 07.02.2019 08:56:17
 
Такое может быть, если присутствуют 2 макроса с одинаковым именем.
(один - ваш макрос, другой - из какой-либо надстройки или файла)
 
Александр Моторин, возможно. Попробую название макроса поменять .

Принтер исправлен. Спасибо.
 
Александр Моторин,  на первой картинке выдаёт ошибку без вашей строки, а на второй с вашей строкой
 
Как может вполне корректная строка, написанная ниже, влиять на код выше?
 
Hugo, точно не знаю
 
Файл бы увидеть ошибочный, что там за имя листа такое , что даже переменная не хочет его себе брать.
Глянул быстренько код а в чем вообще фишка цикла? У Вас во второй строке цикла переменная s становится массивом, а затем в первой строке вы с ней работаете как со строковой вот в этом и ошибка скорее всего. Ошибка в коде после цикла скорее всего возникает потому, что в строковая переменная s не содержит  запятой.
Изменено: Nordheim - 07.02.2019 10:08:46
"Все гениальное просто, а все простое гениально!!!"
 
Вот и объяснение как строка ниже влияет на строку выше :)
А я слепой...:(
 
На сколько я понял логику программы. вот этот код повторяет ее без всяких заморочек с доп переменными.
Код
Sub MyPrint_2()
    Dim sh As Worksheet
    For Each sh In ThisWorkbook.Worksheets
        If sh.[p5].Value <> 0 Then sh.PrintOut Copies:=1
    Next sh
End Sub
Изменено: Nordheim - 07.02.2019 10:22:22
"Все гениальное просто, а все простое гениально!!!"
 
Nordheim, к сожалению сюда размер не позволяет загрузить. а так если в не напряг можно посмотреть тут https://yadi.sk/i/UgQdAm5XW4_Dzw.
Пробовал вариант от Nordheim, к сожалению не сработал. Макрос привязаен к кнопке Печать учётных листов.
Спасибо всем откликнувшимся.
 
Заплатка конечно сомнительная , но ничего лучше не придумал  :(
Код
Sub MyPrint_2()
Dim sh As Worksheet, s$
    Application.ScreenUpdating = False
    For Each sh In ThisWorkbook.Worksheets
    If  sh.[P5].Value <> 0 Then
        sh.Activate
        ActiveWindow.SelectedSheets.PrintOut copies:=1
    End If
    Next sh
    Application.ScreenUpdating = True
End Sub
Изменено: Nordheim - 07.02.2019 12:28:32
"Все гениальное просто, а все простое гениально!!!"
 
Nordheim, ошибку даёт. Буду ручками печатать каждый лист  :) . Всем спасибо.  
Страницы: 1
Наверх