Insert Rows - циклическая функция макроса - на основе числа в ячейке - PullRequest
0 голосов
/ 20 сентября 2019

Новичок с макросами / vba здесь.

У меня есть шаблон с двумя кнопками - одна копирует и вставляет лист в новую вкладку, вторая добавит строки на основе кнопки Command из ручного ввода

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

Private Sub CommandButton2_Click()
Dim numrow
numrow = Application.InputBox("Please enter number of rows to add. Note: please refer to total installments (Cell D16)", "Insert Row", , , , , , 1)

If IsNumeric(numrow) Then

For i = 1 To numrow

Call INRW

Next i
End If

End Sub

Код для INRW, как показано ниже

Sub INRW()

ActiveSheet.Unprotect "Password"

Range("B" & Rows.Count).End(xlUp).Select

ActiveCell.Offset(-2).EntireRow.Insert Shift:=xlDown

Range("B22").End(xlDown).Offset(-1).Copy
Range("B22").End(xlDown).PasteSpecial xlPasteFormulas
Range("B22").End(xlDown).Offset(1).PasteSpecial xlPasteFormulas

Range("H22").End(xlDown).Offset(-1).Select
Range(ActiveCell, ActiveCell.End(xlToRight)).Copy
Range("H22").End(xlDown).PasteSpecial xlPasteFormulas
ActiveCell.Offset(1).PasteSpecial xlPasteFormulas

ActiveSheet.Protect "Password"

End Sub

Или я мог бы напрямую запустить INRW после копирования листа?

Public Sub CopySheetAndRename()
    Dim newName As String

    On Error Resume Next
    newName = InputBox("Enter the name for the copied worksheet")

    If newName <> "" Then
        ActiveSheet.Copy After:=Worksheets(Sheets.Count)
        On Error Resume Next
        ActiveSheet.Name = newName
        Range("$D$3").Value = newName
    End If

    Dim n As Name
    For Each n In ActiveWorkbook.Names
    n.Visible = True
    Next n

End Sub

Файл былПервоначально работая, я пытался упростить процесс использования файла.

Назначение файла -

  1. Пользователь должен сделать копию вкладки шаблона с помощью кнопки -CopySheetAndRename
  2. Пользователь, который вводит имя вкладки (которая будет уникальным идентификатором), которая соответствует информации, связывающей базу данных с информацией в той же книге, но на другой вкладке
  3. Ячейки во вновь созданном шаблоне будут затем vlookup возвращаться в базу данных для извлечения битов данных, относящихся к этому уникальному идентификатору - один из которых будет числовым значением для количества столбцов для добавления
  4. В текущем файлезатем пользователю придется вручную вводить количество строк для добавления на основе этой информации
  5. Однако я пытался упростить процесс, добавив макросу добавление указанного количества строк после создания нового листа.
  6. Я бы хотел оставить поле ввода, поскольку пользователь может добавить строки, превышающие количество, указанное в D16

Надеюсь, это имеет смысл

1 Ответ

0 голосов
/ 20 сентября 2019

Попробуйте

Range("D16").Value

или

Cells(16, 4).Value

для ссылки на значение в ячейке D16

Если вы хотите избавиться от поля ввода, просто замените егос оператором InputBox

numrow = Range("D16").Value

Если вы собираетесь установить его как значение по умолчанию для поля ввода, поместите его в 3-й аргумент вызова метода InputBox ()

numrow = Application.InputBox("Please enter number of rows to add. Note: please refer to total installments (Cell D16)", "Insert Row", Range("D16").Value, , , , , 1)

В вашей последней отредактированной версии я не понимаю, почему копирование листа связано с исходным вопросом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...