Форум программистов, компьютерный форум, киберфорум
Наши страницы
VBA
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
Victor_Tyumen
0 / 0 / 0
Регистрация: 06.08.2015
Сообщений: 9
1

Выводить на печать данные, не содержащие определенную фразу

06.08.2015, 11:03. Просмотров 641. Ответов 12
Метки нет (Все метки)

Добрый день,

Нужна помощь в написании макроса для кнопки. Суть. Есть документ. На одном листе. В таблице есть Ячейки в которых написано "no data" (без кавычек соответственно).

При печати на бумагу надо, чтобы эти ячейки не печатались с этим текстом, а выводились просто пустыми.
Нужна кнопка которая будет искать в таблице эти ячейки (с этим текстом) и менять цвет шрифта с красного на белый.
После этого я смогу спокойно распечатать документ.
После печати, при повторном нажатии, цвет шрифта должен поменяться обратно (с белого на красный).
Удалять текст с ячеек не вариант. Их очень много, и этот текст нужен только для работы на компьютере.

Буду признателен если кто-то поможет с этим.

Заранее благодарю.
Виктор.
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.08.2015, 11:03
Ответы с готовыми решениями:

Нажать на определенную фразу на указанном сайте
привет всем. есть задача. несколько раз в день нам необходимо НА АВТОМАТЕ по макросу скачивать один...

Исходя из введенных чисел вывести определенную фразу
Задачка для Экспертов) Написать программу, которая принимает числа на вход, содержит функцию и...

Как вывести определенную фразу, если не выполняется условие?
Здравствуйте! Есть выражение в рамках создания запроса: IIf(Year(Date())-Year() Between 10 And...

Набираем определенную фразу, она нигде не отображается, после этого открывается определенная страница.
Набираем определенную фразу, она нигде не отображается, после этого открывается определенная...

Вывести на печать заданную фразу
Помогите пожалуйста написать программу. Целочисленные переменные i,j,k содержат информацию о...

12
Hugo121
6478 / 2531 / 455
Регистрация: 19.10.2012
Сообщений: 7,607
06.08.2015, 11:16 2
1 вариант - печатать чёрно-белый документ.
2 вариант - с помощью УФ менять цвет шрифта по какой-то одной ячейке-критерию - там значение можно менять вручную или макросом перед печатью.
3 вариант - макросом сделать копию листа, убрать все красные "no data", распечатать, убить лист (так не нужно думать как вернуть цвет назад)
4 вариант - делать всё как написано в заказе, тоже возможно.

Что выбрать - зависит от документа/задачи.
0
Victor_Tyumen
0 / 0 / 0
Регистрация: 06.08.2015
Сообщений: 9
06.08.2015, 11:21  [ТС] 3
Hugo121,

Из Ваших вариантов, вариант 3 выглядит хорошим решением. Не могли бы помочь с макросом? Я в макросах, к сожалению, не знаток. Учить их уйдет слишком много времени.
0
Hugo121
6478 / 2531 / 455
Регистрация: 19.10.2012
Сообщений: 7,607
06.08.2015, 11:27 4
Покажете пример файла - может кто и с макросом поможет. Я файл делать не буду, а если и сделаю - Вам не покажу, поэтому нет смысла вообще что-то делать.
0
06.08.2015, 11:27
Казанский
14911 / 6312 / 1721
Регистрация: 24.09.2011
Сообщений: 9,977
06.08.2015, 11:42 5
Цитата Сообщение от Victor_Tyumen Посмотреть сообщение
вариант 3 выглядит хорошим решением. Не могли бы помочь с макросом?
Вы сами можете составить макрос, записав действия макрорекордером:
1. правый клик на ярлычке листа - Переместить/скопировать - в новую книгу, создать копию;
2. Ctrl+H, найти: no data, заменить на: пусто, заменить все;
3. нажать кнопку печать;
4. закрыть книгу, сохранить: нет.
Есть пара проблем: макрос привязывается к определенному имени листа и при закрытии книги спрашивает, сохранять или нет. Это исправляется изменением первой и последней строки кода:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Sub Макрос2()
'
' Макрос2 Макрос
'
 
'
    ActiveSheet.Copy
    Cells.Replace What:="no data", Replacement:="", LookAt:=xlWhole, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    ExecuteExcel4Macro "PRINT(1,,,1,,,,,,,,2,,,TRUE,,FALSE)"
    ActiveWorkbook.Close False
End Sub
1
Hugo121
6478 / 2531 / 455
Регистрация: 19.10.2012
Сообщений: 7,607
06.08.2015, 12:03 6
Может там ещё есть и не красные nodata?
Есть (был) при копировании листа один косяк - обрубались длинные строки. Если там есть что-то такое - тогда копирование не годится.
Т.к. файла не видим - эти вопросы актуальны.
0
Victor_Tyumen
0 / 0 / 0
Регистрация: 06.08.2015
Сообщений: 9
07.08.2015, 05:34  [ТС] 7
Уважаемые форумчане,

Образец таблицы в прикреплении. Можно ли как-то сделать кнопку которая будет переключать цвет надписи "no data" с красного на белый и обратно?

Спасибо!
0
Вложения
Тип файла: xlsx example.xlsx (11.5 Кб, 7 просмотров)
k61
73 / 72 / 29
Регистрация: 13.10.2014
Сообщений: 155
07.08.2015, 06:20 8
какой тип данных в ячейках не содержащих текст "no data"?
Предположим, что там даты:
Visual Basic
1
2
3
4
5
6
7
8
9
10
Sub Повесить_на_существующую_кнопку()
'альтернатива: Private Sub Workbook_BeforePrint(Cancel As Boolean)
With Range(Cells(3, 3), Cells(25, 10)).SpecialCells(2, 2)
If .Cells(1).Font.ColorIndex = -4105 Then
.Font.ColorIndex = 2
Else
.Font.ColorIndex = 0
End If
End With
End Sub
0
Victor_Tyumen
0 / 0 / 0
Регистрация: 06.08.2015
Сообщений: 9
07.08.2015, 09:13  [ТС] 9
k61

Спасибо за помощь. К сожалению, не совсем сработало.
Я прикрепил файл с Вашим макросом.
При нажатии кнопки исчезает весь текст (не только ячейки no data) и происходит замена цвета на черный.
Мне надо чтобы исчезали только no data (цвет фона становился бы белым) и при повторном нажатии цвет шрифта ячеек с надписью no data становился бы опять красным.
0
Вложения
Тип файла: zip example macro.zip (13.0 Кб, 6 просмотров)
k61
73 / 72 / 29
Регистрация: 13.10.2014
Сообщений: 155
08.08.2015, 03:06 10
У меня Excel'2003. В понедельник ...
0
pashulka
3398 / 1836 / 767
Регистрация: 01.12.2010
Сообщений: 3,648
08.08.2015, 11:39 11
Можно также попробовать что-то вроде :

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Private Sub Test()
    Dim iSource As Worksheet: Set iSource = ActiveSheet
 
    ChangeFontColor iSource, vbWhite
    iSource.PrintOut
    ChangeFontColor iSource, vbRed
End Sub
 
Private Sub ChangeFontColor(iSource As Worksheet, Color&)
    Application.ReplaceFormat.Font.Color = Color
    iSource.UsedRange.Replace "no data", "no data", , , , , , True
End Sub
Если же, при работе с листом, действительно нужен "триггер", то можно замутить следующий вариант :

Visual Basic
1
2
3
4
5
6
7
Private iFlag As Boolean
 
Private Sub Test()
    Application.ReplaceFormat.Font.Color = IIf(iFlag, vbRed, vbWhite)
    Sheet1.UsedRange.Replace "no data", "no data", ReplaceFormat:=True
    iFlag = Not iFlag
End Sub
0
k61
73 / 72 / 29
Регистрация: 13.10.2014
Сообщений: 155
10.08.2015, 08:11 12
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Sub Повесить_на_существующую_кнопку_2()
With Range(Cells(3, 3), Cells(25, 10)) '.SpecialCells(2, 2)
.Replace What:="no data", Replacement:="=""no data"""
  With .SpecialCells(-4123)
  If .Cells(1).Font.ColorIndex = 2 Then
  .Font.ColorIndex = 3
  Else
  .Font.ColorIndex = 2
  End If
End With
.Replace What:="=""no data""", Replacement:="no data"
End With
End Sub
Проверено на версиях 2003-2007-2013. Мин нет.

Добавлено через 4 часа 50 минут
...и сократим:
Visual Basic
1
2
3
4
5
6
7
8
9
Sub Повесить_на_существующую_кнопку_3()
With Range(Cells(3, 3), Cells(25, 10))
.Replace What:="no data", Replacement:="=""no data"""
  With .SpecialCells(-4123)
  .Font.ColorIndex = 5 - .Cells(1).Font.ColorIndex
  End With
.Replace What:="=""no data""", Replacement:="no data"
End With
End Sub
1
Victor_Tyumen
0 / 0 / 0
Регистрация: 06.08.2015
Сообщений: 9
31.08.2015, 14:20  [ТС] 13
k61

Спасибо! Заработало
0
31.08.2015, 14:20
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.08.2015, 14:20

Выводить слова начинающихся на определенную букву
С# Создайте массив из пяти фамилий и выведите их на экран те из них, которые начинаются с...

DataGridView - как удалить ряды, содержащие определенную строку
У меня есть dataGridView с 3 столбцами и 1000 рядов. Как удалить все ряды, у которых во втором...

При нажатии на определенную вкладку в TabControl Выводить сообщение
Привет,Допустим у нас есть TabCntrol и там Tabpage1,2,3.Кто знает как сделать так,чтоб когда я жму...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.