Пример ввождения линий, найдя значение, в образе выделяет пример, найдя.
Найдя келью со специфическим значением было введено число N линий наверху кельи, которая содержит значение, Вы это реализовывали следующего способа, но Вы не вводите меня
Sub CargaMigra()
Dim fila As Integer
fila = 1
Do While Cells(fila, 1) = ""
If Cells(fila, 5) = "4.000.000.0000" Then
Rows.EntireRow.Insert
End If
fila = fila + 1
Loop
End Sub
Ты cГіdigo с моими комментариями:
Sub CargaMigra()
Dim fila As Integer
'IMPORTANTE: Los integer (numeros enteros) en VBA solo almacenan numeros
'en el rango de –32,768 a 32,767, por tanto si tienes filas superiores a
'32,767 arrojará un error, por lo cual recomiendo usar LONG
fila = 1
Do While Cells(fila, 1) = ""
'La linea dice esto:
'Has un bucle (loop) mientras (while) la celda de la fila tal y la columna 1
'no tengan ningún valor dentro, ningún texto, nada!
'Por tanto, según dices que debe encontrar algún valor, pues no va a correr
'si encuentra algo.
If Cells(fila, 5) = "4.000.000.0000" Then
'Segun tu código no llegaría acá, pero el IF revisar si la fila tiene
'el siguiente texto "4.000.000.0000", no un numero, sino un texto
'si quieres el numero 4000000 debes quitar los puntos y las comillas
'así mismo debes hacer la prueba con el valor de la celda, no con la celda
'Cells(fila, 5).value = 4000000 o en su defecto Cells(fila, 5).Value = "4.000.000.0000"
Rows.EntireRow.Insert
'y aquí insertas solo una celda... nada mas!
End If
fila = fila + 1
Loop
End Sub
Сейчас я cГіdigo с моими комментариями:
Sub CargaMigra2()
Dim fila As Long: fila = 1 'Así defines e inicializas la variable en una sola linea,
'con el tipo de variable long que tiene un rango de datos
'de –2,147,483,648 a 2,147,486,647. Mucho mejor
'cuando quieres agregar filas, lo mejor es ir desde la última fila hacia la primera,
'por tanto, imaginando que tus datos están el la columna C (colo como ejemplo)
fila = Range(Cells(1048576, 3), Cells(1048576, 3)).End(xlUp).Row 'aquí se cual es la última linea
Dim i
Dim j
Dim valorBuscado 'as Strig | as integer | as long | as boolean lo que nececites, y si no pones nada,
'es tipo Variant, es decir se asigna el tipo de dato según el dato que se guarde
'en la variable
valorBuscado = 1
Dim cantidadDeFilas As Integer: cantidadDeFilas = 10 'no se de donde asignas este valor
'o si siempre será el mismo, pero debes
'de definirlo en algún momento de alguna manera,
'pero tu ejemplo no define eso, acá puse 10 solo
'para hacer el ejemplo claro
For i = fila To 1 Step -1 'imaginando que la hay que revisar hasta la fila uno, por eso ponemos el 1
'y Step -1 es para que el loop cuente hacia atras.
If Cells(i, 3).Value = valorBuscado Then
For j = 1 To cantidadDeFilas
Range(Cells(i, 3), Cells(i, 3)).EntireRow.Insert
Next j
'el loop anterior se repite de 1 a la cantidadDeFilas por tanto las filas se van a añadir
'esa cantidad de veces sobre la fila en cuestión.
End If
Next i
End Sub
Надеялся быть достаточно ясным.
Integer
-Long
отсеченная, никогда не используй integer, так как он может давать ошибки, преодолев nú морской окунь, превосходящий 32000 и немного. Относительно ввождения линий deberí схвати использовать без цикла ее j:Range(Cells(i, 1).Resize(CantidadDeFilas).EntireRow.Insert
ты уберегаешься ненужные циклы. Из-за ú ltimo, deberí схвати всегда ссылаться на книги и листы предварительно рангам. – Damian 11.11.2019, 17:24EntireRow.Insert
у тебя есть вся razó n, я думаю, что лучше, использовать число линий, но не, как ты это помещаешь allí а другой формы, потому что, если я нахожусь в линии 2 и хочу он добавляет еще 20 линий, тогда darí в ошибку линия có я говорю, что добавлять. Я не любитель loops, но если они работоспособные, когда могут acuñ ar. И относительноInteger
, ты имеешь razó n, эта точка, (в детали) habí в отмеченный в начало. – Elbert Villarreal 11.11.2019, 19:08