Búsqueda de la celda activa en excel

Adaptando, como comente anteriormente, algunas rutinas, surgen complicaciones en el proceso haciendo que, algo que funcionaba muy bien en un contexto, en otro sea un desastre. En el siguiente código necesito confirmar la celda activa y, una vez elegida, copiar la fórmula a lo largo de una fila.

Pues bien, jamás la ubica y entiendo que algo está faltando

Private Sub CommandButton 5 Click()

Dim col As Range
Application.ScreenUpdating = False
Sheets("Hoja1").Select
'BUSCO LA CELDA CON FECHA DE HOY Y SERÁ MI CELDA ACTIVA------------------------------------------------
Set col = Rows(5).Find(Date, , xlFormulas, xlWhole)
If Not col Is Nothing Then
col.Offset(1).Select
End If
'COLOCO LA FÓRMULA EN LA CELDA ACTIVA----------------------------------------------------------------------------------
ActiveCell.FormulaR1C1 = "=IF(R[-1]C='utiliz x art'!R1C3,'utiliz x rt'!R4C3+ ...etc etc ....
ActiveCell.Copy Range(ActiveCell.Offset(, 1), Range("ABE6"))
Sheets("PLANIFICACION CP").Range("A1").Select
Application.ScreenUpdating = True
End Sub

Tracé el código y no toma la celda activa coincidente con la fecha de hoy

¿

¿Podrías indicarme donde esta la metida de pata?

1 Respuesta

Respuesta
1

Es un problema lidiar con las fechas, porque visualmente tiene un formato, pero internamente excel las almacena como un número.

Prueba la siguiente:

Private Sub CommandButton5Click()
  Dim col As Range, nDate As Long
  Application.ScreenUpdating = False
  Sheets("Hoja1").Select
  nDate = Date
  Set col = Rows(5).Find(Date, , xlFormulas, xlWhole)
  If Not col Is Nothing Then
    col.Offset(1).Select
    'COLOCO LA FÓRMULA EN LA CELDA ACTIVA--
    ActiveCell.FormulaR1C1 = "=IF(R[-1]C="""",""bla"",""etc"")"
    ActiveCell.Copy Range(ActiveCell.Offset(, 1), Range("ABE6"))
    'Sheets("PLANIFICACION CP").Range("A1").Select
    Application.ScreenUpdating = True
  Else
    MsgBox "No existe la fecha"
  End If
End Sub

Dante, pasa de largo y muestra el mensaje que no existe fecha

En el código que puse saltaba el error porque no encontraba la celda activa, es decir, se colorea de amarillo la sentencia:

"...ActiveCell.Copy Range(ActiveCell.Offset(, 1), Range("ABE6"))..."

A mi me funciona, pero como dije, hay que jugar un poco para ver con cuál instrucción funciona para ti:

Prueba lo siguiente, cambié Date por nDate

Private Sub CommandButton5Click()
  Dim col As Range, nDate As Long
  Application.ScreenUpdating = False
  Sheets("Hoja1").Select
  nDate = Date
  Set col = Rows(5).Find(nDate, , xlFormulas, xlWhole)
  If Not col Is Nothing Then
    col.Offset(1).Select
    'COLOCO LA FÓRMULA EN LA CELDA ACTIVA--
    ActiveCell.FormulaR1C1 = "=IF(R[-1]C="""",""bla"",""etc"")"
    ActiveCell.Copy Range(ActiveCell.Offset(, 1), Range("ABE6"))
    'Sheets("PLANIFICACION CP").Range("A1").Select
    Application.ScreenUpdating = True
  Else
    MsgBox "No existe la fecha"
  End If
End Sub

Otra opción, cambié xlFormulas por xlValues

Private Sub CommandButton5Click()
  Dim col As Range, nDate As Long
  Application.ScreenUpdating = False
  Sheets("Hoja1").Select
  nDate = Date
  Set col = Rows(5).Find(Date, , xlValues, xlWhole)
  If Not col Is Nothing Then
    col.Offset(1).Select
    'COLOCO LA FÓRMULA EN LA CELDA ACTIVA--
    ActiveCell.FormulaR1C1 = "=IF(R[-1]C="""",""bla"",""etc"")"
    ActiveCell.Copy Range(ActiveCell.Offset(, 1), Range("ABE6"))
    'Sheets("PLANIFICACION CP").Range("A1").Select
    Application.ScreenUpdating = True
  Else
    MsgBox "No existe la fecha"
  End If
End Sub

Otra, cambié Date por nDate y xlformulas por xlvalues

Private Sub CommandButton5Click()
  Dim col As Range, nDate As Long
  Application.ScreenUpdating = False
  Sheets("Hoja1").Select
  nDate = Date
  Set col = Rows(5).Find(nDate, , xlValues, xlWhole)
  If Not col Is Nothing Then
    col.Offset(1).Select
    'COLOCO LA FÓRMULA EN LA CELDA ACTIVA--
    ActiveCell.FormulaR1C1 = "=IF(R[-1]C="""",""bla"",""etc"")"
    ActiveCell.Copy Range(ActiveCell.Offset(, 1), Range("ABE6"))
    'Sheets("PLANIFICACION CP").Range("A1").Select
    Application.ScreenUpdating = True
  Else
    MsgBox "No existe la fecha"
  End If
End Sub

Buen día Dante

No funciono ninguna. Hasta force ponerle la celda de la fecha correcta para ver si la detecta pero no hubo caso.

Tome la hoja y reescribí el rango de fechas por si había algún error, etc pero tampoco.

Debo aclararte que intento activar esta rutina con un botón que se dispara desde la "hoja2"

Sin embargo, la misma rutina llamada desde la "hoja1" que es donde está el rango de fechas, funciona perfecto.

Hay algo que estoy obviando! Y me quita el sueño!

Abrazo

Será un problema de Seteo de la Hoja?

Digo quizás falte...  Set h9 = Sheets("Hoja1") y todo lo que a ella refiere...pues trazando todas las variantes veo que, identifica la hoja, identifica una celda del rango, identifica el nDate con la fecha de hoy, pero cuando llega a:

Set col = Rows(5).Find(nDate, , xlValues, xlWhole)

la ignora y me parece que es como que el código busca en la hoja2 y no en la hoja1 donde está la acción!

No te parece?

Pero tu código dice que seleccionas la hoja1

Sheets("Hoja1").Select

No puedo adivinar que tú vas a ejecutar en otra hoja si no lo mencionas.

Como te he comentado en otras ocasiones, para ti es bastante obvio, porque estás viendo tus datos.

Te sugiero que hagas la ejecución en la misma hoja, porque habría que cambiar todas las referencias.

Set col = Rows(5).Find(Date, , xlFormulas, xlWhole)
col.Offset(1).Select ---> no puedes utilizar select si estás en otra hoja

'tampoco puedes utilizar Activecell si estás en otra hoja
ActiveCell.FormulaR1C1 = "=IF(R[-1]C="""",""bla"",""etc"")"---> hay que modificar la fórmula

Para que considere el nombre de la otra hoja

'

'tampoco puedes utilizar Activecell si estás en otra hoja
ActiveCell. Copy Range(ActiveCell. Offset(, 1), Range("ABE6"))

Y si ya te funciona estando en la hoja, pues para que te complicas.

Te ofrezco una disculpa pues has perdido tiempo. Con el correr de las hs me di cuenta que no había sido claro en mi pedido y me quede paralizado frente a semejante cagadon!. Juro que lo primero que pensé fue ... "que cagada a pedos me voy a llevar de Dante!..." y así fue!

Intentare reconstruir el código pues quien lo operara no conoce de esto y deseo darle todas las posibilidades. Si no puedo, solo pondré botón de cambio de hoja y que refreshee ennla hoja1

Dante, creo que lo estoy logrando sin molestar demasiado

Me trabe en lo siguiente:-------------------------------------------------------------------------------------------------------

Private Sub CommandButton5_Click()
Dim col As Range
Application.ScreenUpdating = False

Set hx = Sheets("Hoja1") (ok)
Set col = hx.Rows(5).Find(Date, , xlFormulas, xlWhole) (ok)
If Not col Is Nothing Then
ncell = col.Address ------ (hasta aquí funciona e identifica la celda con la fecha de hoy) (ok)

Luego, debo bajar una celda hacia abajo y copiar la fórmula a lo largo de toda la fila 6 hasta la primera celda vacía (no lo estoy pudiendo lograr!!)

J = Cells(6, Columns.Count).End(xlToRight).Column ?????

Do
    With hx.Rows(col)
         .FormulaR1C1 = "=IF(R[-1]C='utiliz x art'!R1C3,'utiliz x art'!R4C3+ etc etc
         .Value = .Value
             J = J + 1
   End With
Loop Until Cells(6, J).Value = ""
End If

Por favor solo guíame en dónde está el pifie, pues no estoy pudiendo bajar una celda hacia abajo y encontrando la 1°a celda vacía a la derecha en fila 6 para luego pegar la formula en todo ese rango

Lo agradezco y trato de no ser pesado pero, estoy aprendiendo

Abrazo.

Daniel.

Y si te cambias de hoja, utilizando application.screenupdating = false, para que no se vea y luego regresas a la otra hoja

Private Sub CommandButton5Click()
  Dim col As Range, nDate As Double
  Application.ScreenUpdating = False
  '
  Sheets("Hoja1").Select
  '
  nDate = Date
  Set col = Rows(5).Find(Date, , xlFormulas, xlWhole)
  If Not col Is Nothing Then
    col.Offset(1).Select
    'COLOCO LA FÓRMULA EN LA CELDA ACTIVA--
    ActiveCell.FormulaR1C1 = "=IF(R[-1]C="""",""bla"",""etc"")"
    ActiveCell.Copy Range(ActiveCell.Offset(, 1), Range("ABE6"))
  Else
    MsgBox "No existe la fecha"
  End If
  '
  Sheets("Hoja2").Select ' o la hoja quieras
  'Sheets("PLANIFICACION CP").Range("A1").Select
  Application.ScreenUpdating = True
  '
End Sub

Prueba lo siguiente para poner la fórmula si estás en otra hoja:

Private Sub CommandButton5Click()
  Dim f As Range, sh As Worksheet
  '
  Set sh = Sheets("Hoja1")
  Set f = sh.Rows(5).Find(Date, , xlFormulas, xlWhole)
  If Not f Is Nothing Then
    With sh.Range(sh.Cells(6, f.Column), sh.Cells(6, "ABE"))
      .FormulaR1C1 = "=IF(R[-1]C="""",""bla"",""etc"")"
    End With
  Else
    MsgBox "No existe la fecha"
  End If
End Sub

¡EXCELENTE DANTE!

Me saco el sombrero! quedo fenomenal y ya comprendí cual era mi error

Quedo en mi base de datos

Muchas gracias de nuevo!

Un fuerte abrazo

Daniel

Como siempre, un placer ayudarte, gra cias por comentar.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas