Por que excel no respeta las referencias en las macros

Espero puedan ayudarme,

Tengo una macro que copia y pega valores, sin embargo si yo escribo G7 me envía ala celda K15, y así con varias referencias en el mismo libro como lo soluciono

Sheets("Calculos").Select
Selection.Range("F8").Select
valor = ActiveCell.Value
Sheets("HOLA").Select
Set busca = ActiveSheet.UsedRange.Find(valor, LookIn:=xlValues, lookat:=xlWhole)
If Not busca Is Nothing Then
ActiveCell.Offset(1, 0).Select
Selection.Copy
    Sheets("Calculos").Select
    Selection.Range("G8").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
a = a + 1
End If

Además que debe estar en la celda A1 para ejecutar si no lo pega en lugares distintos, y el asunto es que quiero que lo haga por varias líneas debe copiar y pegar otro valor que da de resultado de esta primera aciion en otra hoja pero se ha vuelto loco con las referencias

1 Respuesta

Respuesta
1

La macro tiene instrucciones que no sé, si es lo que necesitas, por ejemplo, empezando con esta línea:

Selection.Range("F8").Select

Lo que hace la línea anterior es, según la celda donde se encuentre el cursor, va a avanzar 8 filas hacia abajo y 6 filas hacia a la derecha. Siempre hace eso, si estás en la celda A1 te lleva la F8, más adelante tiene esto la macro:

Selection.Range("G8").Select

Lo que hace es irse a la celda "L15" y ahí pega la información.

Mejor explícame con ejemplos qué quieres buscar, en dónde lo quieres buscar, qué resultado quieres y en dónde lo quieres; si quieres que la macro se ejecute para los valores de toda una columna.

Si puedes poner imágenes de las hojas "calculos" y "hola" para que con las imágenes me digas qué tienes y los resultados que esperas.

O bien, envíame tu archivo con los ejemplos, y con colores y comentarios me explicas lo que quieres.

Mi correo [email protected]

En el asunto del correo escribe tu nombre de usuario "aangie6" y el título de esta pregunta.

Listo ya he enviado el archivo con una breve explicación, espero me haya explicado bien, espero su amable respuesta :)

Por cierto y lo puse así

Selection.Range("G8").Select

por que si lo dejo asi

Range("G8").Select

Manda este error

Te anexo la macro. Realiza lo siguiente

Para cada dato en la hoja query1 busca en query2 las fechas de INPROG y RESOLVED, toma esas fechas y las pone en cálculos, en inicial y final, respectivamente.

Después debe tomar el resultado que aparece en la hoja "calculos" celda G4 y ponerlo en "query1"

¿Es correcto?, si es así:

Sub Ticket()
'Por.Dante Amor
    Application.ScreenUpdating = False
    Set h = Sheets("Calculos")
    Set h1 = Sheets("QueryR1")
    Set h2 = Sheets("QueryR2")
    '
    u = h1.Range("D" & Rows.Count).End(xlUp).Row
    If u = 1 Then u = 2
    h1.Range("A2:A" & u).ClearContents
    For i = 2 To u
        h.[G2] = h1.Cells(i, "D")
        h.[G3] = h1.Cells(i, "AJ")
        Set r = h2.Columns("B")
        Set b = r.Find(h1.Cells(i, "D"), LookAt:=xlWhole, LookIn:=xlFormulas)
        If Not b Is Nothing Then
            ncell = b.Address
            Do
                Select Case h2.Cells(b.Row, "C")
                    Case "INPROG":   h.[G8] = h2.Cells(b.Row, "D")
                    Case "RESOLVED": h.[G9] = h2.Cells(b.Row, "D")
                End Select
                Set b = r.FindNext(b)
            Loop While Not b Is Nothing And b.Address <> ncell
        End If
        h1.Cells(i, "A") = h.[G4]
    Next
    '
    Application.ScreenUpdating = True
    MsgBox "Cálculos terminados", vbInformation
End Sub


Saludos. Dante Amor

No olvides valorar la respuesta.

Te anexo la macro

Sub Ticket()
'Por.Dante Amor
    Application.ScreenUpdating = False
    Set h = Sheets("Calculos")
    Set h1 = Sheets("QueryR1")
    Set h2 = Sheets("QueryR2")
    '
    'Prepara la hoja QueryR2
    If h2.AutoFilterMode Then h2.AutoFilterMode = False
    u2 = h2.Range("B" & Rows.Count).End(xlUp).Row
    If u2 = 1 Then u2 = 2
    h2.Range("A2:A" & u2).ClearContents
    With h2.Sort
     .SortFields.Clear: .SortFields.Add Key:=h2.Range("D2:D" & u2)
     .SetRange h2.Range("A1:F" & u2): .Header = xlYes: .Apply
    End With
    '
    'Para cada registro en la hoja QueryR1
    u1 = h1.Range("D" & Rows.Count).End(xlUp).Row
    For i = 2 To u1
        'Actualiza la hoja "calculos"
        h.[G2] = h1.Cells(i, "D")
        h.[G3] = h1.Cells(i, "AJ")
        h.[G7] = h1.Cells(i, "U")
        '
        'Busca el ticket en la hoja2
        Set r = h2.Columns("B")
        Set b = r.Find(h1.Cells(i, "D"), LookAt:=xlWhole, LookIn:=xlFormulas)
        una = False
        If Not b Is Nothing Then
            ncell = b.Address
            una = True
            Do
                If una Then
                    'Actualiza el primer registro encontrado
                    h2.Cells(b.Row, "A") = 0
                    h.[G8] = h2.Cells(b.Row, "D")
                    una = False
                Else
                    'Actualiza los siguientes registros
                    h.[G9] = h2.Cells(b.Row, "D")
                    h2.Cells(b.Row, "A") = h.[G4]
                End If
                Set b = r.FindNext(b)
            Loop While Not b Is Nothing And b.Address <> ncell
        End If
    Next
    '
    Application.ScreenUpdating = True
    MsgBox "Cálculos terminados", vbInformation, "TIEMPOS"
End Sub

Saludos.Dante Amor

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas