#excel #vba
#excel #vba
Вопрос:
Есть форма, которую я пытаюсь изменить в зависимости от количества входных данных на другом листе. Не удается заставить приведенный ниже код работать. Я новичок в VBA, так что, вероятно, это что-то простое. Не уверен, что мои команды «Dim» и «Set» верны, поскольку я получаю ошибку «Требуется объект» для ‘startrow1’.
Код должен добавлять переменное количество строк (что он и делает). Но проблема в начальной точке. Начальной точкой по умолчанию будет «A20», но ее необходимо изменить в зависимости от количества строк, ранее добавленных над ней с помощью другого макроса. (ws1.Диапазон.(«D45»).значение). Итак, если «D45» равно 2, начальная точка должна измениться на «A22».
Sub Addquotedrows()
Application.ScreenUpdating = False
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim addquoted As Range
Dim startrow As Range
Dim startrow1 As Range
Set ws1 = Sheets("Input")
Set ws2 = Sheets("PakEmail")
Set addquoted = ws1.Range("D46")
Set startrow = ws2.Range("a20")
Set startrow1 = startrow ws1.Range("D45").Value
Let X = 0
Do While X < addquoted
With ws2
startrow1.EntireRow.Insert Shift:=xlUp
End With
X = X 1
Loop
Application.ScreenUpdating = True
End Sub
Ответ №1:
Просто сместите startrow на количество строк в D45.
Set startrow = ws2.Range("a20").offset(ws1.Range("D45").Value, 0)
Ответ №2:
С помощью имеющегося у вас кода вам нужно будет установить startrow в целое число, затем выполнить add и установить диапазон startrow1 = в эти значения следующим образом:
Dim startrow Integer
Set startrow = 20
Set startrow1 = Range("A" amp; startrow
ws1.Range("D45").Value
Ваша проблема заключалась в том, что вы добавляли целое число в диапазон, подобно тому, как вы находитесь в центре большого города и говорите, что ищете адрес 9.
В сообщении об ошибке говорилось: «Ок, 9 чего?»
Имеет ли это смысл?
Итак, теперь у вас есть 2 варианта. 1) используйте адреса, как указано выше, со смещением 2) используйте числа, как представлено здесь. Любой из них должен работать для того, что вы хотите, просто зависит от вашего стиля, того, что имеет для вас смысл, и есть ли другой код, который может привести к сбоям, если вы используете один способ поверх другого. (вероятность этого очень мала, но все же возможна).
Удачи!