2014-12-12 2 views
0

Я пытаюсь добавить к макросу, который у меня есть, который скроет каждую строку, которая не имеет текста в столбце с именем «Авторизация». Пожалуйста, см. Код, который у меня ниже, я думал, что это может быть на правильном пути, но не скрывает никаких строк.VBA Hide Row в таблице, если указанный столбец пуст

Cells.EntireRow.Hidden = False 
For Each cell In Range("Authorization").End(xlUp) 
If cell = "" And cell.Offset(1, 0) = "" Then cell.EntireRow.Hidden = True 
Next cell 

ответ

0

Edited добавить как определить динамический именованный диапазон Это тот факт, что вы установили весь столбец с именем «Authorization», что я думаю, что делает ваш код заморозить, потому что весь столбец 1 млн строки (если у вас есть 2007 или выше), и код по-прежнему будет проверять даже пустые строки, поэтому он делает это 1 миллион раз. 1, а не для всего столбца, вы можете использовать «Динамический именованный диапазон», который будет расширяться и расширяться по мере добавления данных. Для этого существует несколько разных формул, но на основании того, что ваши данные могут содержать пробелы, эта версия формулы будет расширяться до последней заполненной строки в столбце. В моем примере используется colum A, поскольку вы указали, какой столбец вы используете, поэтому измените A в соответствии с вашими потребностями.

  1. Вам нужно открыть диспетчер Имена, на вкладке Формулы
  2. Из диалогового окна, найти свое имя «Авторизация».
  3. Выберите его, и вы увидите его текущую формулу в нижней части диалогового окна, замените его следующей формулой: = OFFSET (Sheet1! $ A $ 3,0,0, MATCH ("*", Sheet1! $ а: $ а, -1) -2,1)

В приведенной выше формуле:

Лист1 является моим листом, заменить его с вашим необходимой $ A $ 3 является начальной строкой названия , поэтому на основе ваших комментариев установите это как столбец A row 3 0,0, по умолчанию вам не нужно менять $ A $ A $ - это столбец, который он подсчитывает значения, поэтому при необходимости измените -1 по умолчанию, оставить как есть -2 вычитает 2 из подсчета, потому что мы начинаем с строки 3, поэтому, если вы измените стартовую строку, измените этот на последнюю 1, определите, сколько столбцов охватывает ваш именованный диапазон , в вашем примере это всего лишь 1, поэтому это не должно меняться.

Как только вы определили имя таким образом, приведенный ниже код должен работать намного быстрее, поскольку он будет проходить только до последней строки введенных данных. Есть одна возможная проблема, которую я вижу с этим, и это, если последняя ячейка в столбце A пуста, а остальная часть строки - нет, это пропустит последнюю строку. Я мог бы исправить это, используя другой столбец, чтобы считать, что составляет последнюю строку, но нужно знать, что столбец whicj всегда будет иметь значение в нем.

< Оригинальный ответ и код> не уверены, что код соответствует описанию того, что вы хотите, а именно, вы, похоже, пытаетесь проверить строку под текущей ячейкой, это то, что вы действительно хотели? Во всяком случае, ваш синтаксис немного ошибочен. Я написал и протестировал это, и он работает, я поменял ваше смещение, поэтому мой код проверяет ячейку в названном диапазоне «Авторизация», а затем также проверяет ячейку справа. Изменить в соответствии с вашими потребностями

Sub test() 
Dim c As Range 
For Each c In Range("Authorisation").Cells 
    If c.Value = "" And c.Offset(0, 1).Value = "" Then c.EntireRow.Hidden = True 
Next c 
End Sub 
+0

Согласен, мой ответ был очень недостаточным. Однако, когда я пытаюсь выполнить вышеуказанный код, файл всегда застывает. У меня просто есть столбец с именем «Авторизация», и я хочу скрыть все строки в таблице, которые пусты в этом столбце. Я хочу добавить этот код под строками, где я скрываю столбцы, которые мне не нужны при печати. – user2965077

+0

Когда вы говорите, что это «зависает», просто из интереса, у вас есть целая колонка с именем «авторизация»? т.е. 1 миллион клеток?Может ли ypu дать мне дополнительную информацию о точной структуре вашего листа, то есть всегда ли она начинается в строке 1, но это неизвестные строки? Как ваш код, так и мой будут неэффективны, если вы назвали полную авторизацию столбца, и есть более эффективные способы циклирования строк, но вам нужна дополнительная информация о структуре вашего листа. –

+0

В строке 2 есть заголовок с именем auhtorization а затем данные до строки 600, список может увеличиваться или уменьшаться +/- 200 в любое время – user2965077

Смежные вопросы