Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.06.2012, 17:39   #1
jain_39
 
Регистрация: 05.06.2012
Сообщений: 4
По умолчанию Скрытие столбцы где есть пустые ячейки в таблице.

Добрый день. Прошу помощи новичку. Нужно скрыть СТОЛБЦЫ где нет данных. Суть да дело. Есть две таблицы одна под другой, где разносятся продажи товара. Искал макрос так и не нашел чтобы скрывал столбцы где нет занесенных данных. Сложность в том что если в таблице есть формула но данные в ней равны нулю все равно не скрывают макросы что нашел на сайте.
Вложения
Тип файла: rar 1.rar (52.8 Кб, 28 просмотров)
jain_39 вне форума Ответить с цитированием
Старый 05.06.2012, 18:06   #2
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Код:
Sub скрыть()
    Dim cc
    Application.ScreenUpdating = False
    For Each cc In [bs9:cn50].Columns
        cc.EntireColumn.Hidden = cc.Text = ""
    Next
    Application.ScreenUpdating = True
End Sub

Sub отобразить()
    Dim cc
    Application.ScreenUpdating = False
    For Each cc In [bs9:cn50].Columns
        cc.EntireColumn.Hidden = Not cc.Text = ""
    Next
    Application.ScreenUpdating = True
End Sub
Можно написать один код на ToggleButton - добавить анализ статуса кнопки.
Или в зависимости от статуса выполнять один из этих.
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 06.06.2012 в 12:32.
Hugo121 вне форума Ответить с цитированием
Старый 06.06.2012, 11:19   #3
jain_39
 
Регистрация: 05.06.2012
Сообщений: 4
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Код:
Sub скрыть()
    Dim cc
    Application.ScreenUpdating = False
    For Each cc In [bs9:cn50].Columns
        cc.EntireColumn.Hidden = cc.Text = ""
    Next
    Application.ScreenUpdating = True
End Sub

Sub отобразить()
    Dim cc
    Application.ScreenUpdating = False
    For Each cc In [bs9:cn50].Columns
    Debug.Print cc.Text = ""
        cc.EntireColumn.Hidden = Not cc.Text = ""
    Next
    Application.ScreenUpdating = True
End Sub
Можно написать один код на ToggleButton - добавить анализ статуса кнопки.
Или в зависимости от статуса выполнять один из этих.
Спасибо за код. К сожалению я не разбираюсь в программировании макросов на эксель. Пока только записью макроса пользуюсь. Подскажи куда его поставить и как подвесить на кнопку. За ранее спасибо.
jain_39 вне форума Ответить с цитированием
Старый 06.06.2012, 11:35   #4
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Вот туда, куда пишет рекордер - и вставляйте.
Хотя в данном случае можно вставить коды и в модуль листа.
А на кнопки (их в этом варианте нужно 2 штуки) поставьте вызов этих макросов - т.е. типа такого:

Код:
Private Sub CommandButton1_Click()
скрыть
End Sub

Private Sub CommandButton2_Click()
отобразить
End Sub
Если делать на одной обычной кнопке, то нужно добавлять публичную переменную (лучше типа boolean, но не обязательно), состяние которой менять кнопкой на противоположное, потом его анализировать и вызывать соотв. макрос.
Если делать на ToggleButton, то там анализируется статус самой кнопки.

В общем, вариантов больше одного

P.S. Файл приложить не могу - не дома
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 06.06.2012, 12:00   #5
jain_39
 
Регистрация: 05.06.2012
Сообщений: 4
По умолчанию

Да разобрался. Еще один вопрос. А как можно сделать чтобы скрывал на не все пустые, например оставил два пустых для разноски новых данных.
jain_39 вне форума Ответить с цитированием
Старый 06.06.2012, 12:01   #6
jain_39
 
Регистрация: 05.06.2012
Сообщений: 4
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Вот туда, куда пишет рекордер - и вставляйте.
Хотя в данном случае можно вставить коды и в модуль листа.
А на кнопки (их в этом варианте нужно 2 штуки) поставьте вызов этих макросов - т.е. типа такого:

Код:
Private Sub CommandButton1_Click()
скрыть
End Sub

Private Sub CommandButton2_Click()
отобразить
End Sub
Если делать на одной обычной кнопке, то нужно добавлять публичную переменную (лучше типа boolean, но не обязательно), состяние которой менять кнопкой на противоположное, потом его анализировать и вызывать соотв. макрос.
Если делать на ToggleButton, то там анализируется статус самой кнопки.

В общем, вариантов больше одного

P.S. Файл приложить не могу - не дома
Да разобрался. Еще один вопрос. А как можно сделать чтобы скрывал на не все пустые, например оставил два пустых для разноски новых данных.
jain_39 вне форума Ответить с цитированием
Старый 06.06.2012, 12:28   #7
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Задаёте переменную-счётчик.
Перед каждым скрытием увеличиваете счётчик, затем анализируете его.
Как только счётчик больше 2х - можно скрывать.
Так останутся видимыми два первых пустых столбца, т.к for each перебирает с начала листа.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 06.06.2012, 12:50   #8
RAN.
Форумчанин
 
Аватар для RAN.
 
Регистрация: 05.07.2011
Сообщений: 208
По умолчанию

Небольшое уточнение.
При наличии формул, возвращающих 0, этот макрос будет корректно работать только при снятом флажке "Показывать нули...". Если 0 будет отображаться - столбец определиться как не пустой.

Обмануть можно так
Код:
Sub скрыть()
    Dim cc
    Application.ScreenUpdating = False
    ActiveWindow.DisplayZeros = False
    For Each cc In [bs9:cn50].Columns
        cc.EntireColumn.Hidden = cc.Text = ""
    Next
    ActiveWindow.DisplayZeros = True
    Application.ScreenUpdating = True
End Sub

Последний раз редактировалось RAN.; 06.06.2012 в 13:09.
RAN. вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как узнать номер ячейки в таблице Ворда, где находится курсор? Ципихович Эндрю Microsoft Office Word 22 07.04.2012 13:00
Пустые ячейки Nac_Nac Microsoft Office Excel 2 02.08.2011 17:16
функция мах в таблице где есть одинаковsе значения Ximera370 SQL, базы данных 3 26.07.2011 13:37
Заполнить пустые ячейки ниже значениями из непустой ячейки ing60 Microsoft Office Excel 7 01.04.2009 04:20
пустые ячейки StasSv Microsoft Office Excel 5 22.12.2008 17:43