Доброй ночи всем. Требуется помощь специалистов. Имеем колонтитул, в правом верхнем блоке которого размещен текст в две строки - первая строка жирным текстом, вторая - обычным. В зависимости от значения, выбираемого пользователем в ячейке листа (например, в S4) из двух вариантов, текст в колонтитуле должен меняться со стандартного (черного) на белый для того, чтобы при печати его не было видно. В настоящий момент смог решить эту задачку только способом подстановки значения в колонтитул из ячеек скрытого листа:
Private Sub Worksheet_Change(ByVal Target As Range) If Range("S4").Value = "А" Then Worksheets("В").PageSetup.RightHeader = "&""Times New Roman""&8" & Worksheets("С").Range("O50") & Chr(10) & Worksheets("С").Range("O51") Else: Worksheets("В").PageSetup.RightHeader = Worksheets("С").Range("O52") End If End Sub
Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Range("S4").Value = "А" Then
Worksheets("В").PageSetup.RightHeader = "&""Times New Roman""&8" & Worksheets("С").Range("O50") & Chr(10) & Worksheets("С").Range("O51")
Else: Worksheets("В").PageSetup.RightHeader = Worksheets("С").Range("O52")
End If
End Sub
где О52 - пустая ячейка.
Однако выделение жирным смог сделать только на весь текст, подставляемый в колонтитул. Очень хотелось бы сделать это как-то по-красивее, ведь должно же быть решение, которое при выборе в ячейке S4 значения "А" просто изменяло бы цвет текста со стандартного на белый.
Sanja написал: А нам-бы эту красоту, да в файле-примере увидеть...
В файле не вариант - прошу прощения. Если что-то не понятно - готов попытаться объяснить. Если по простому: 1. Открываем чистую книгу 2. В колонтитуле первого листа пишем любой текст 3. Если в ячейку А1 листа введен текст "А", то цвет текста колонтитула должен со стандартного измениться на белый, т.е. слиться с цветом бумаги, в остальных случаях - остаться стандартным (черным)
А по-моему это какой-то колхозный вариант. Мне кажется, что должно это решаться как-то с помощью свойств типа .ThemeColor = xlThemeColorDark1 .TintAndShade = 0 .Bold = True и пр.
Может быть еще сможете объяснить мне следующее: можно ли используя мой вариант сделать первую строчку полужирной, а вторую - обычной. На сколько я понял для этого используется вот эта часть выражения: "&""Times New Roman""&8" однако при попытке копирования и вставки этой части до или после & Chr(10) (разрыва строки) редактор выдает ошибку Expected: end of statement
Андрей, спасибо Вам. как я поняд сложность была в одном знаке & после оператора vbLf - раньше его не добавлял, т.к. не силен в синтаксисе написания таких выражений. Не подскажете где поподробнее почитать про это - знак конкатенации, двойные кавычки и пр. В итоге получилось вот так
Код
Worksheets("А").PageSetup.RightHeader = "&""Times New Roman""&8&B" & Worksheets("В").Range("O50") & vbLf
& "&""Times New Roman, обычный""&8" & Worksheets("В").Range("O51")
В итоге так и не понял почему когда я пишу "Times New Roman, полужирный" - текст первой строки полужирным не становится, а когда пишу "Times New Roman""&8&B" - становится? А во второй строке наоборот - если не написано "обычный" (словом по-русски), то строка, как и первая, воспроизводится жирным шрифтом. Т.е. в первом случае слово "полужирный" ни на что не влияет, а во втором слово "обычный" влияет
SerjVorotilov написал: Т.е. в первом случае слово "полужирный" ни на что не влияет, а во втором слово "обычный" влияет
Можно тогда с ними не заморачиваться. Коды форматирования колонтитулов Formatting and VBA Codes for Headers and Footers. Единственное, формат цвета задаётся в виде &KHHHHHH, где H - цифра шестнадцатеричной системы счисления, у меня отработало под Excel 2010 и 2016.
Код
Public Sub SetupRightFooter()
Dim topRow As String, bottomRow As String
topRow = "&""Times New Roman""&14&B&K0000FF" & ActiveSheet.Range("A1").Value
bottomRow = "&""Times New Roman""&16&B&KFF00FF" & ActiveSheet.Range("A2").Value
ActiveSheet.PageSetup.CenterHeader = topRow & vbLf & bottomRow
End Sub
Спасибо, Андрей. Попробовал Ваш вариант, в 2013 тоже все работает. За ссылку на коды - отдельное спасибо, хоть пока и не во все разобрался, но если бы она была у меня вчера, несколько вопросов здесь бы не задавал.
И все же так и не смог понять - можно ли программно изменять цвет текста, который введен в колонтитул вручную, а не подставлять в колонтитул текст из ячеек листа. Неужели в принципе нет такой возможности?
P.S. В примере постарался более ясно изложить суть необходимого.
Прошу прощения за оффтоп, но уже несколько лет мучаюсь с одной проблемой. Не понятно почему периодически (обычно при одновременной работе с двумя файлами - всегда одни и те же) эксель вылетает с ошибкой "Прекращена работа ..." На форум эти файлы для тестирования выложить не могу. Может есть кто-то из спецов, кто проживает в СПб и сможет уделить мне какую-то часть своего времени лично. Готов рассмотреть любые варианты и пожелания.
SerjVorotilov написал: И все же так и не смог понять - можно ли программно изменять цвет текста,
В принципе, это возможно. Если вы обратитесь к
Код
sText = ActiveSheet.PageSetup.CenterHeader
, то получите строку колонтитула с кодами форматирования. Останется только разобрать её на коды оформления и собственно текст в колонтитуле и изменить как необходимо. Следует учитывать и то, что может использоваться и тема книги для оформления колонтитула, тогда части кодов оформления не будет (будут применяться ко всей строке колонтитула по-умолчанию). Тогда нужно будет в нужное место текста вставить код требуемого цвета.