Problema de definición de variables, btt.comando e inputbox, buscan un valor en un rango, copiando el resultado.

Soy nuevo tanto en VBA como en esta red. Agradecería a ver si me puedes orientar con este problema.

Tengo una hoja de excel que calcula los km a través de Googlemaps, hay que incluir una dirección física.

Quiero que introduciendo un nº de oficina, me copie la dirección física completa en la hoja donde se activa el calculo de km´s.(Estoy utilizando botón de comando e inputbox)

Código:

Private Sub CommandButton2_Click()

Dim ordinales As Range
Dim miDestino As Integer

miDestino = InputBox("Ordinal", "Introduccion de datos", "Nº ordinal oficina")
Set ordinales = Sheets("000_Oficina_Direccion").Range("C2:D46").Find(what:=miDestino, lookat:=xlWhole, searchorder:=xlByRows)
Sheets("000_Oficina_Direccion").Select
If ordinales Is Nothing Then
MsgBox ("Ordinal no encontrado o inexistente"), vbOKOnly
Else
Set ordinales = Range(ordinales.Address).Offset(0, 1)
Sheets("000_Oficina_Direccion").Range(ordinales.Address).Copy
Sheets("Distancias").Range("B2").PasteSpecial xlPasteAll
End If
Sheets("Distancias").Activate
End Sub

En el inputbox se introduce un nº, ej: 0085, 0839, 1075, 5031, etc

La macro funciona siempre que el dígito empiece por un nº que no sea cero y contenga 4 caracteres. Tanto si incluyo los ceros como si no los incluyo, me dice que no existe el numero.

Creo que es un problema del tipo de variable definido, pero no lo tengo claro.

No se si con esto se consigue entender el problema, si lo prefieres puedo enviar el archivo por e-mail.

3 respuestas

Respuesta
2

Efectivamente tu problema es en la declaración de la variable "midestino", la tienes declarada como Integer, entonces si capturas "0023", en la variable se almacena 23.

En VBA no es necesario declarar variables. Revisa el siguiente enlace sobre la declaración de variables:

Según su función ¿Cómo declarar variables?


Si la búsqueda solamente es en la columna C, entonces el rango debería ser C2:C46.

Si vas a copiar un dato y pegar todo, entonces puede ser así:

Private Sub CommandButton2_Click()
'
    Set h1 = Sheets("000_Oficina_Direccion")
    Set h2 = Sheets("Distancias")
    '
    miDestino = InputBox("Ordinal", "Introduccion de datos", "Nº ordinal oficina")
    Set b = h1.Range("C2:C46").Find(what:=miDestino, lookat:=xlWhole, searchorder:=xlByRows)
    If b Is Nothing Then
        MsgBox ("Ordinal no encontrado o inexistente"), vbOKOnly
    Else
        b.Offset(0, 1).Copy h2.Range("B2")
    End If
    h2.Activate
End Sub

Ya establecí en el objeto "b" el resultado de la búsqueda, por tanto, no es necesario establecer en el otro objeto "Set ordinales", la celda siguiente. Con el objeto "b" puedes obtener el dato de la siguiente celda: "b.Offset(0, 1)"


.

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

.

Avísame cualquier duda

.

Respuesta
1

Prueba con esto

Private Sub CommandButton1_Click()
    miDestino = InputBox("Ordinal", "Introduccion de datos", "Nº ordinal oficina")
    '
    Set ordinales = Sheets("000_Oficina_Direccion").Range("C2:D46").Find(what:=miDestino, lookat:=xlPart)
        '
        If ordinales Is Nothing Then
            MsgBox ("Ordinal no encontrado o inexistente"), vbOKOnly
        Else
            Set ordinales = Range(ordinales.Address).Offset(0, 1)
            Sheets("000_Oficina_Direccion").Range(ordinales.Address).Copy
            Sheets("Distancias").Range("B2").PasteSpecial xlPasteAll
        End If
    Sheets("Distancias").Select
End Sub

si aun tienes dificultades mi email: [email protected]

Respuesta

Esto te puede dar alguna idea más

https://youtu.be/xqovnvqt5ao 

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas