Страницы: 1
RSS
Колонтитул листа (макрос отображения для нескольких, выбранных листов книги
 
Доброго времени суток. Подскажите решение след. задачи.
Необходимо сделать колонтитул на определенные (выбранные) листы книги.
То есть, что бы при сохранении выбранных листов в PDF отображался колонтитул. На просторах интернета нашел код для написания макроса. Но не могу решить проблему отображения колонтитула на НЕСКОЛЬКИХ (определенных/ выбранных листах). Листы, на данный момент выбираются вруную, впоследствии, листы будут выбираться автоматически с помощью макроса. Подскажите, что добавить в код, что бы отображение происходило на всех необходимых листах.
Код изначально был вот такой:
Код
Sub Signature()                             'Для колонтитула
   With ActiveSheet.PageSetup
       .LeftFooter = "               Шифр: " & ['Ввод общих данных'!H19] 
       .CenterFooter = ""
       .RightFooter = "Лист  &P" & "     Листов &N  "
   End With
End Sub
"Поковырявшись", нашел вот такой вариант.....но он выкидывает ошибку...
Код
Sub Signature()                           
Dim xSh As Worksheet
    Application.ScreenUpdating = False
    For Each xSh In Worksheets
        xSh.Select
        Call CodSignature
    Next
    Application.ScreenUpdating = True
End Sub
Sub CodSignature()                             
       .LeftFooter = "               Шифр: " & ['Ввод общих данных'!H19] 
       .CenterFooter = ""
       .RightFooter = "Лист  &P" & "     Листов &N  "
   End With
End Sub
 
И тут же, возник еще один вопрос касаемо колонтитула, объясните пожалуйста, где дописать код (условия) для текста (жирный, курсив и т.д.)
Изменено: rumpelshtitchen - 13.07.2022 09:19:21
 
Код
Sub Signature()                           
Dim xSh As Worksheet
    For Each xSh In Worksheets
        CodSignature xSh
    Next
End Sub

Sub CodSignature(ws as worksheet)        
  with ws                     
    .LeftFooter = "               Шифр: " & ['Ввод общих данных'!H19] 
    .CenterFooter = ""
    .RightFooter = "Лист  &P" & "     Листов &N  "
  End With
End Sub

задайте нужный формат вручную, запишите действия макрорекордером, используйте полученный макрос
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ігор Гончаренко, Благодарю за ответ. Но вопрос про форматирование текста остается интересным исключительно для собственного понимания, то есть, не просто скопировать макрос что бы он работал, а понять, как правильно написать код, куда вставить необходимые строки, что бы можно было изменить форматирование.
 
Цитата
написал:
Sub CodSignature(ws as worksheet)  
Выдает ошибку, в данном месте...что при выборе одного листа, что при выборе нескольких.
Изменено: rumpelshtitchen - 13.07.2022 09:57:42
 
Цитата
rumpelshtitchen написал:
задайте нужный формат вручную, запишите действия макрорекордером, используйте полученный макрос
я предлагал не использовать макрос полностью, а посмотреть как там были пременены нужные вам форматы и использовать это в своем коде
это как раз очень полезно "для собственного понимания" не использовать макрос целиком, а использовать нужные фрагменты кода из него
собственное понимание возникнет, когда сможете самостоятельно получить нужный результат
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ігор Гончаренко, Благодарю, буду пробовать.
 
Цитата
написал:
Sub Signature()                           Dim xSh As Worksheet    For Each xSh In Worksheets        CodSignature xSh    NextEnd Sub Sub CodSignature(ws as worksheet)          with ws                         .LeftFooter = "               Шифр: " & ['Ввод общих данных'!H19]     .CenterFooter = ""    .RightFooter = "Лист  &P" & "     Листов &N  "  End WithEnd Sub
Вот, я совсем запутался...вопрос, для понимания:
что такое xSh?
если я правильно понял, та даннаое выражение "ws as worksheet" это сокращение, то есть мы присваиваем значению "ws" условие "worksheet"?
куда, а главное почему мы избавились от "PageSetup"?
 
Ігор Гончаренко, задал необходимый формат вручную, как Вы и советовали, получил необходимую строчку .Font.Italic = True....данную строку переставлял и до и после...
Код
with ws                         .LeftFooter = "               Шифр: " & ['Ввод общих данных'!H19] 
    .CenterFooter = ""
    .RightFooter = "Лист  &P" & "     Листов &N  "
ни чего не получается. Где я ошибаюсь, подскажите, направьте пожалуйста.
 
Цитата
rumpelshtitchen написал:
ws as worksheet
обьявлена переменная названного типа
Цитата
rumpelshtitchen написал:
почему мы избавились от "PageSetup"?
не мы а вы, почему я не знаю
файла нет пишу что попало, не проверяя и не особо вникая
видимо это
with ws
следовало написать так:
with ws.PageSetup
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
А вот еще вопрос назрел. А как будет выглядеть строчка для конкретно выбранных листов. Select ?  я втак понял что "worksheet" это рабочие листы, если я правильно понял это все листы в книге.
 
забудьте о Селектах, не нужны они практически НИКОГДА
а с worksheet ничего вы не поняли
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ігор Гончаренко, проблема заключается в следующем. В книге около 150 листов. и я так понимаю при условии "worksheet", макрос применяет их, ко всем 150 листам, книжка повисает....и.....все. А по условию, необходимо отобразить колонтитул на 15,,,20 листах, которые выбираются вручную (впоследствии через макрос). Именно по этому и задаю вопрос про СЕЛЕКТ да и про ВОРКШИТ, что бы понять как это все работает.
 
Цитата
rumpelshtitchen написал:
что бы понять как это все работает
чтобы понять как работает, надо с самого начала начать изучать. Есть понятие лист, есть книга, есть коллекции листов рабочих и листов других. Есть коллекция выделенных листов активной книги. Много чего есть.
Цитата
rumpelshtitchen написал:
еобходимо отобразить колонтитул на 15,,,20 листах, которые выбираются вручную (впоследствии через макрос).
чтобы сказать как это сделать - надо понимать по какому критерию определять те листы, на которых колонтитул надо менять. Можно просто пройтись по всем выделенным листам:
Код
For Each ws In ActiveWindow.SelectedSheets
CodSignature xSh
next
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
rumpelshtitchen написал:
я так понимаю при условии "worksheet",
вы второй раз называете это условием, а это никакое не условие, это тип одного из обьектов обьектной модели Excel
Select вам все равно не нужен
в теме как отметить несколько заданных листов имена нужных листов уже были затолканы в массив, от туда их и нужно брать (из этого массива) и не нужно их отмечать (особенно все вместе)
читайте "VBA для чайников" постепенно информация начнет укладываться в голове начнете понимать что это такое и как этим пользоваться
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Дмитрий(The_Prist) Щербаков, Вы верно объяснили задачу, которую я не смог в должной степени донести, необходимо пройтись по всем выделенным листам и на них проставить колонтитул. Выбор листов произвольный, то есть сам оператор, ручками, выбирает необходимые ему листы, на которых и должен отображаться колонтитул.
Взяв за основу Ваш кусоче кода написал вот такой код
Код
Sub Signature()Dim xSh As Worksheet
    For Each ws In ActiveWindow.SelectedSheets
    CodSignature xSh
    Next
End Sub
 Sub CodSignature(ws As Worksheet)
    With ws.PageSetup
    .LeftFooter = "               Øèôð: " & ['Ââîä îáùèõ äàííûõ'!H19] & " ¹ " & ['Ââîä îáùèõ äàííûõ'!M7] & " " & ['Ââîä îáùèõ äàííûõ'!H9] & " - " & ['Ââîä îáùèõ äàííûõ'!H15]
    .CenterFooter = ""
    .RightFooter = "Ëèñò  &P" & "     Ëèñòîâ &N  "
  End With
End Sub
при выполнении выдает ошибку, понимаю, что где то не верно указан параметр "листов" и предположу что в данном месте:
Код
 Sub CodSignature(ws As Worksheet)

но в чем ошибка....не могу понять, хоть убей..

Изменено: rumpelshtitchen - 13.07.2022 12:23:07
 
Цитата
rumpelshtitchen написал:
выдает ошибку
возможно
Цитата
rumpelshtitchen написал:
но в чем ошибка
основная - в том, что не пишите ни на какой строке, ни какая ошибка.
Предположу, что опять же - от незнания полного - Вы просто скопировали мой код и так же просто вставили его, даже не пытаясь понять что и зачем. И поэтому у Вас везде в Ваших кодах ранее используется переменная xSh, а мой код скопировали как есть, в котором используется не xSh, а ws. В итоге передаете в функцию не перебираемый лист, а Nothing.
Код
Sub Signature()
    Dim xSh As Worksheet
    For Each xSh In ActiveWindow.SelectedSheets
    CodSignature xSh
    Next
End Sub
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Дмитрий(The_Prist) Щербаков, к большому сожалению, должен признать, что не ясны мне переменные...и листы. Скопировать и просто вставить было бы просто, в оправдание могу сказать, я бы не раздувал такую большую тему. А пошел в неправильном направлении и искал зависимость в листах....а не в переменной. Трудно понять, как это все работает, по этому и нет понимания, к сожалению. Огромное спасибо за помощь и объяснение.
 
Цитата
rumpelshtitchen написал:
Трудно понять, как это все работает
трудно понять что вы пишете
Цитата
rumpelshtitchen написал:
и искал зависимость в листах....а не в переменной.
с вашего на человеческий это как переводится? и что значит?
и вообще, файл у вас есть, на котором вы все это выполняете
выкладываете его сюда, обьясняете что хотите получить в итоге и на каком шаге возникла проблема
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ігор Гончаренко, Имеется книга. На листе7 вводятся данные, номер и дата.
На листе "Тит_лист" имеется кнопка 1, которая запускает выполнение макроса, применяемое к 5ти оставшимся листам, в том числе и созданию колонтитула.
Вопрос, как сделать так, что бы колонтитул, отображался на выбранных листах (выбор осуществляется оператором, то есть их может быть 2, а могут быть и все 5) так же как на листе "Тит_лист".
В дополнение ко всему: это только часть файла. В оригинальном файле около 150 листов (какие то скрыты, какие то нет.) На печать в ПДФ идут 15,,,,20 листов выбранные оператором. При нажатии конпки1 в основном фале, на выполнение макроса уходит около 1...1,5 минут, и это при условии, что макрос на автоматический выбор листов и создание ПДФ еще не написан.
Изменено: rumpelshtitchen - 13.07.2022 17:17:50
 
Цитата
rumpelshtitchen написал:
Имеется книга. На листе7 вводятся данные, номер и дата
в ячейку А1 и ниже вводятся имена листов
...
дальше все тоже самое что делали вы
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Друзья, доброго времени суток, в продолжении данной темы, подскажите, как деактивировать данный макрос. То есть сделать так, что бы уже созданный колонтитул исчез при печати.
Сам код:
Код
Sub Signature2()            ' Макрос для проставления колонтитула (меняет колонтитул на всех листа)
Dim xSh As Worksheet
    For Each xSh In Worksheets
        CodSignature2 xSh
    Next
End Sub
 Sub CodSignature2(ws As Worksheet)
  With ws.PageSetup
    .LeftFooter = "               Шифр: " & ['Ввод общих данных'!H19] & " № " & ['Ввод общих данных'!M7] & " " & ['Ввод общих данных'!H9] & " - " & ['Ввод общих данных'!H15]
    .CenterFooter = ""
    .RightFooter = "Лист  &P" & "     Листов &N  "
  End With
End Sub
 
Код
.LeftFooter = ""
.CenterFooter = ""
.RightFooter =""
 
RAN, спасибо...я так и сделал, просто подумал что это не совсем верно...еще раз огромное спасибо за ответ.
Страницы: 1
Наверх