No me funciona condicional if más offset

Creo que el error esta en que no pongo "i" en el condicional If y no se me desplazan las filas. Un saludo y mil gracias.

'FORMULARIO

Private Sub cmd_aceptar_Click() 'BOTÓN ACEPTAR

'Inputs

Range("H24").Select
ActiveCell.Value = Texto_Activo 'Nombre activo

ActiveCell.Offset(0, 1).Activate
ActiveCell.Value = Texto_Valor.Value 'Valor el activo

ActiveCell.Offset(0, 1).Activate
ActiveCell.Value = ComboBox_Divisa 'Divisa

End Sub

Private Sub cmd_cancelar_Click() 'BOTÓN CANCELAR

Unload Formulario

End Sub

Private Sub ComboBox_Divisa_DropButtonClick() 'DESPLEGABLE

ComboBox_Divisa.RowSource = "Infor!P5:P10"

End Sub

Sub Alta_activo()

'Llamada_Formulario

Formulario.Show

i = 0

If Range("Infor!H24") <> Range("Datos!B2").Offset(i, 0) Then
Do While Range("Datos!B2").Offset(i, 0) <> ""
i = i + 1
Loop
Range("Datos!B2").Offset(i, 0) = Range("Infor!H24")

Range("Datos!B2").Offset(i, 1) = Range("Infor!I24")
Range("Datos!B2").Offset(i, 2) = Range("Infor!J24")
Else

Range("Datos!B2").Offset(i, 0) = Range("Infor!H24")
Range("Datos!B2").Offset(i, 1) = Range("Infor!I24")
Range("Datos!B2").Offset(i, 2) = Range("Infor!J24")

End If

End Sub

2 Respuestas

Respuesta
1

Tenés problemas de sintaxis que intentaré explicar.

Si una celda cualquiera tiene un nombre de rango, por ejemplo DatosB2 está bien que lo incluyas en el range entre comillas de este modo:

         Do While Range("DatosB2").Offset(i, 0) <> ""    

Pero viendo que lo colocás con el signo ! Está claro que no es un nombre de rango... que solo intentas hacer mención a la celda B2 de la hoja Datos.

Entonces la sintaxis correcta es:

       Do While Sheets("Datos"). Range("B2").Offset(i, 0) <> ""

Y así en todas las líneas donde mencionas Range, por ej:

       Sheets("Datos"). Range("B2").Offset(i, 1) = Sheets("Infor"). Range("I24")

Otras manera correcta de hacer referencia a un rango o celda:

Do While Sheets("Datos").[B2].Offset(i, 0) <> ""

Sdos y no olvides valorar la respuesta.

Elsa

http://aplicaexcel.com

Respuesta
1

Puedes platicar qué necesitas hacer.

i = 0
If Range("Infor!H24") <> Range("Datos!B2").Offset(i, 0) Then

Tu código inicia con una comparación de las celdas H24 y B2

Si son iguales, entonces 

Range("Datos!B2").Offset(i, 0) = Range("Infor!H24")
Range("Datos!B2").Offset(i, 1) = Range("Infor!I24")
Range("Datos!B2").Offset(i, 2) = Range("Infor!J24")

B2 = H24

C2 = I24

D2 = J24

Sería más simple si lo pones directamente:

  Range("Datos!B2") = Range("Infor!H24")
  Range("Datos!C2") = Range("Infor!I24")
  Range("Datos!D2") = Range("Infor!J24")

Si son diferentes.

If Range("Infor!H24") <> Range("Datos!B2").Offset(i, 0) Then
Do While Range("Datos!B2").Offset(i, 0) <> ""
i = i + 1
Loop

Entonces buscas la última fila con datos de la columna B. Es correcto?


Sería más simple algo como esto:

Sub test()
  Dim lr As Long
  If Range("Infor!H24") <> Range("Datos!B2") Then
    lr = Sheets("Datos").Range("B" & Rows.Count).End(3).Row + 1
    Range("Datos!B" & lr) = Range("Infor!H24")
    Range("Datos!C" & lr) = Range("Infor!I24")
    Range("Datos!D" & lr) = Range("Infor!J24")
  Else
    Range("Datos!B2") = Range("Infor!H24")
    Range("Datos!C2") = Range("Infor!I24")
    Range("Datos!D2") = Range("Infor!J24")
  End If
End Sub

Pero sigo sin entender para qué haces la comparación. Si lo explicas te ayudo con el código.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas