Как прокрутить окно, когда диалоговое окно InputBox отображается в VBA? - PullRequest
1 голос
/ 06 октября 2011

Я хочу, чтобы пользователь вводил последний заполненный номер ячейки через диалоговое окно InputBox.

numRows = InputBox("Enter number of rows in the BOM: ", "Number of Rows")

Проблема в том, что когда на экране отображается диалоговое окно, пользователь не может прокрутить вниз, чтобы увидеть последнюю строку.Будет трудно определить количество заполненных строк динамически, так как некоторые ячейки заполнены, а некоторые нет.

Спасибо.

РЕДАКТИРОВАТЬ: я использую Excel 2007

Ответы [ 2 ]

2 голосов
/ 06 октября 2011

Я предлагаю вам найти последнюю заполненную строку программно, не спрашивая пользователя. Здесь

http://www.mrexcel.com/td0058.html

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

1 голос
/ 07 октября 2011

Несмотря на то, что это было закрыто, я добавлю эти комментарии как ответ, а не как комментарий, учитывая длину этого ответа и необходимость форматирования. Ссылка правильно отмечает, что выбранный вами подход SpecialCells может быть проблематичным, я добавил исправление ниже. Кроме того, я добавил код, который будет проверять фактическое количество строк в xl2007, ссылка (написанная еще в 2002 году) в настоящее время фиксируется на 65536 строках, поскольку это был единственный номер строки в Excel, существовавший на данный момент

  • SpecialCells

LastRow = Cells.SpecialCells (xlCellTypeLastCell) .Row

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

 ActiveSheet.UsedRange
 LastRow = Cells.SpecialCells(xlCellTypeLastCell).Row
  • Использование количества строк снизу

    LastRowColA = Range("A65536").End(xlUp).Row
    

для обслуживания строк во всех версиях Excel (xl07 и xl10 имеют 1,048 миллионов строк)

    LastRowColA = Cells(Rows.Count,"A").End(xlUp).Row
  • Использование Find

    LastRow = Cells.Find("*",SearchOrder:=xlByRows,SearchDirection:=xlPrevious).Row
    

это приведет к ошибке, если лист пустой (т. Е. Не имеет значений для определения)

    Dim rng1 As Range
    Set rng1 = Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious)
    If Not rng1 Is Nothing Then
        LastRow = rng1.Row
    Else
        'sheet is blank
    End I
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...