Как скрыть неиспользуемые столбцы и строки таблицы Excel рядом с ячейками с комментариями? - PullRequest
0 голосов
/ 12 марта 2020

У меня есть некоторый код VBA, который запрашивает и создает таблицу данных на листе с комментариями в некоторых ячейках.

Он занимает диапазон около A1:N200, а затем я хочу скрыть неиспользуемые пробел, как в приведенном ниже коде.

Worksheet.Columns(Number_of_columns + 1).Resize(, Worksheet.Columns.Count - Number_of_columns).EntireColumn.Hidden = True
Worksheet.Rows(Number_of_rows & ":" & Worksheet.Rows.Count).EntireRow.Hidden = True

При этом выдается ошибка времени выполнения 1004:

Невозможно установить скрытое свойство класса диапазона

Я зарегистрировался в новом файле Excel, добавил комментарий к ячейке A1, а затем попытался скрыть другие столбцы и строки, но мне пришлось оставить 4 столбца (от A до D, но это могли быть, например, A и C до E) и 5 ​​строк видны. Если я пытаюсь скрыть больше, я получаю сообщение Cannot shift objects off sheet.

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

Private Sub Procedure()

  Dim Worksheet As Excel.Worksheet
  Dim Range As Excel.Range

  Set Worksheet = Excel.Application.ThisWorkbook.ActiveSheet
  Set Range = Worksheet.Cells(1, 1)

  If Range.Comment Is Nothing Then
    Range.AddComment
  End If

  Set Range = Worksheet.Columns(2).Resize(, Worksheet.Columns.Count - 1).EntireColumn
  Range.Select ' Just to test the range, it works. Columns B to XFD
  Range.Hidden = True ' Throws error

  Set Range = Worksheet.Rows(2 & ":" & Worksheet.Rows.Count).EntireRow
  Range.Select ' Just to test the range, it works. Rows 2 to 1048576
  Range.Hidden = True ' Throws error

End Sub

Есть ли способ скрыть их, чтобы были видны только данные? Единственный обходной путь (не решение), о котором я могу подумать, - это удаление комментариев, скрытие столбцов и строк, а затем добавление комментариев обратно, что нежелательно.

1 Ответ

0 голосов
/ 12 марта 2020


Я не уверен, правильно ли я понимаю, было бы легче увидеть Excel, ниже приведен пример кода, только что протестированный в Excel 2016:

Sub StackOverflow()

Dim lngLastRow As Long
Dim lngLastColumn As Long
Dim lngLastColLetter As String
Dim shtWorking As Object

Set shtWorking = ActiveSheet
'find last row
lngLastRow = shtWorking.Cells(shtWorking.Rows.Count, 1).End(-4162).Row + 1

'find last column
lngLastColumn = shtWorking.Cells(1, shtWorking.Columns.Count).End(-4159).Column + 1

'convert last column index to last column letter
lngLastColLetter = Split(shtWorking.Cells(1, lngLastColumn).Address, "$")(1)

'hide columns
shtWorking.Columns(lngLastColLetter & ":XFD").EntireColumn.Hidden = True

'hide rows
shtWorking.Rows(lngLastRow & ":" & shtWorking.Rows.Count).EntireRow.Hidden = True

set shtWorking=nothing

End Sub
...