Приведенный выше код копирует только скрытые ячейки из-за этой одной строки:
mySel.SpecialCells(xlCellTypeVisible).Copy
Если бы это был просто "mySel.Copy", он скопировал бы весь диапазон.
IЯ не собираюсь делать экспертизу по незакомментированному коду, не имея представления о том, для каких данных он был предназначен, но этот код, кажется, делает гораздо больше, чем вы упоминаете - он ищет символ звездочки (*), чтобы найти целистола.Если вы просто хотите сделать то, что вы сказали - скопируйте строку внизу «CurrentRegion» вокруг выбранной ячейки - код может быть намного проще.
Предполагая, что вы видите таблицу, которую хотите добавитьдо, выбранный, когда вы нажимаете CTRL- * вручную после щелчка внутри нужной строки, это очень легко.CTRL- * выбирает «текущий регион», в основном все ячейки, в которые вы могли бы «пройти» из своей ячейки, не наступая на пустую ячейку.В простой таблице, окруженной пустыми строками и столбцами, это таблица.Если ваша таблица представляет собой более сложную вещь, такую как «ListObject», упомянутую в коде, который вы предоставили, то она менее проста, вам нужно «изменить размер» этой вещи ListObject.Или даже если в вашей таблице есть строка итогов внизу, и вы хотите добавить свою строку выше этих итогов, то это тоже более сложно.
Объект Range, который воплощает таблицу, просто: selection.currentregion
Тогда выражение для первой строки этой таблицы будет иметь вид:
selection.currentregion.rows(1)
Выбранная вами строка будет иметь следующий вид:
selection.currentregion.rows(selection.row-selection.currentregion.rows(1).row+1)
Я знаю, что последний был уродливым, но "row (N)" возвращает диапазон, который является N-й строкой таблицы, тогда как "row" возвращает целое число: абсолютное число строк во всей электронной таблице,Таким образом, вы получаете номер строки таблицы, в которой вы находитесь, вычитая абсолютный номер строки строки № 1 таблицы из номера строки, по которой вы только что щелкнули.И добавьте один.
Последней строкой в этой таблице будет аналогично:
selection.currentregion.rows(selection.currentregion.rows.count)
... где метод "count" возвращает количество строкв этом текущем регионе.
Если все, что работает для вашей проблемы, то ваш код на самом деле представляет собой одну, по общему признанию длинную строку:
selection.currentregion.rows(selection.row-selection.currentregion.rows(1).row+1).copy selection.currentregion.rows(selection.currentregion.rows.count).offset(1,0)
... и вы можете упростить его длячитать, разбивая его и используя некоторые хорошо названные переменные, такие как:
Dim WholeTable as Range, MyRow as Range, LastRow as Range
Dim FirstRowNumber as Integer
Set WholeTable=selection.currentregion
FirstRowNumber=WholeTable.Rows(1).Row
Set MyRow=WholeTable.Rows( Selection.Row - FirstRowNumber +1)
Есть ли шанс, что остальное может быть упражнением для студента?