5

Я создаю автоматический шаблон отчета, который помещается на одной странице. Этот отчет включает в себя маркеры и диаграмму. Из-за запроса на презентацию мне нужно убедиться, что график всегда находится на одном и том же расстоянии под последней точкой маркера. К сожалению, может быть 7 пунктов пули или 2. Так что автоматизировать это стало хлопотно.

Смотрите изображение ниже, но я думаю:

  1. Укажите диапазон (B11:B17)
  2. Перейти к нижней части этого диапазона и работать
  3. Найдите пустые ячейки в этом диапазоне и удалите всю строку (выпуск 1)
  4. Обновите переменную диапазона, чтобы приспособить изменение (неспособный сделать)
  5. Выполните предыдущие шаги
  6. Получите исходный размер диапазона и вставьте те строки, где он должен быть
  7. Вернитесь к моей первоначальной процедуре, чтобы заполнить маркеры, а затем снова начните с шага 1.

С VBA я борюсь, но использую все больше и больше. Я искал и пробовал разные способы создания диапазона и удаления пустых ячеек / строк. Некоторые из них были опасно плохими. Я начинаю с этого простого кода ниже, но он не работает:

Set MyFullRange = Range("B11:B17")
MyFullRange.Select
For CellRange = 1 To MyFullRange.Rows.Count
    If MyFullRange(CellRange).End(xlUp).Row = "" Then
        MyFullRange(CellRange).EntireRow.Delete xlShiftUp
    End If
Next CellRange

Мои проблемы

  1. Строки маркера заполняются ссылкой на другой лист (= ProjectBullet_1, = ProjectBullet_2 и т.д.). Поэтому у меня возникают проблемы с распознаванием пустой ячейки и соответствующим образом удалением строки.
  2. Повторная вставка строк, чтобы вернуться к моей исходной структуре шаблона. (см. возможную альтернативную идею ниже)
  3. Маркированные строки появляются в определенной части шаблона $ B $ 20:$ B:$ 26. (ниже и выше других заполненных строк) и предыдущие попытки удалить строки привели к удалению других пустых строк.

Было бы проще (особенно для шага 6), если бы я просто скопировал лист шаблона, назвал его как-то еще и перенес шаги с 1 по 5 на копию, удалив копию после ее экспорта?

Я знаю, что мне нужно разбить эту проблему на части, но я борюсь с первой частью.

1 ответ1

7

Вы можете скрыть строки вместо их удаления.

Я изменил ваш код, чтобы скрыть строки:

Public Sub hiderows()
    Dim thisrange As Range
    Set thisrange = ActiveSheet.Range("B11:B17")
    For CellRange = thisrange.Rows.Count + 10 To 11 Step -1
        If ActiveSheet.Cells(CellRange, 2).Value = "" Then
            Rows(CellRange).EntireRow.Hidden = True
        End If
    Next
End Sub

Ключевой точкой является строка If ActiveSheet.Cells(CellRange, 2).Value = "" Then я проверяю значение ячейки. Он читает значение, а не формулу.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .