Jump to content

Formula en hoja sin seleccionar o oculta


lphant

Recommended Posts

Buenas tardes chic@s;

Tengo una macro que pone diferentes fórmulas en varias hojas diferentes y para poder ponerlas tengo que antes seleccionar la hoja donde quiero que se ponga.

Hay alguna forma de poner la fórmula en la hoja que necesite sin antes seleccionar/activar dicha hoja??.

Las fórmulas las pongo de la siguiente forma:

Worksheets("Hoja2").Range("A2:A30").FormulaR1C1= "aquí la fórmula"

Pd: ahora mismo no tengo aquí el Excel, estoy escribiendo desde el móvil, si es necesario mañana le adjunto.

Muchísimas gracias.

Link to comment
Share on other sites

Hola @lphant

No es necesario activar la hoja para ejecutar "muchas" acciones (salvo cuando debes obligatoriamente seleccionar) o escribir algo.

Toma un libro nuevo que tenga como mínimo cuatro hojas.

En un módulo común, copia este código. Selecciona una hoja y ejecútalo.

Verás que escribe las fórmulas en todas las hojas involucradas sin necesidad de activarlas. Cambia la hoja seleccionada y vuelve a probar el código.

Qué tengas un buen día! Suerte!

 

Sub escribir_formulas()
With Application
    .ScreenUpdating = False
    .DisplayAlerts = False
End With

Hoja1.Range("A2:A12").FormulaR1C1 = "=IF(RC3<>"""",COUNTIFS(R2C3:R12C4,RC3),1)"
Hoja2.Range("B2:B12").FormulaR1C1 = "=IF(RC4<>"""",COUNTIFS(R2C3:R12C4,RC4),1)"
Hoja3.Range("C2:C12").FormulaR1C1 = "=IF(RC4<>"""",COUNTIFS(R2C3:R12C4,RC4),1)"

With Application
    .ScreenUpdating = True
    .DisplayAlerts = True
End With
End Sub
Link to comment
Share on other sites

Hace 17 horas, tierra_pampa dijo:

Hola @lphant

No es necesario activar la hoja para ejecutar "muchas" acciones (salvo cuando debes obligatoriamente seleccionar) o escribir algo.

Toma un libro nuevo que tenga como mínimo cuatro hojas.

En un módulo común, copia este código. Selecciona una hoja y ejecútalo.

Verás que escribe las fórmulas en todas las hojas involucradas sin necesidad de activarlas. Cambia la hoja seleccionada y vuelve a probar el código.

Qué tengas un buen día! Suerte!

 




Sub escribir_formulas()
With Application
    .ScreenUpdating = False
    .DisplayAlerts = False
End With

Hoja1.Range("A2:A12").FormulaR1C1 = "=IF(RC3<>"""",COUNTIFS(R2C3:R12C4,RC3),1)"
Hoja2.Range("B2:B12").FormulaR1C1 = "=IF(RC4<>"""",COUNTIFS(R2C3:R12C4,RC4),1)"
Hoja3.Range("C2:C12").FormulaR1C1 = "=IF(RC4<>"""",COUNTIFS(R2C3:R12C4,RC4),1)"

With Application
    .ScreenUpdating = True
    .DisplayAlerts = True
End With
End Sub

Gracias @tierra_pampa

Ya he visto donde tengo el fallo.

Tengo fórmulas con cells y.....esas son las que sin estar la hoja activa me da error.

Worksheets("Hoja2").Range(cells(1,2), cells(1,20)).FormulaR1C1= "aquí la fórmula"

Gracias.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


  • Crear macros Excel

  • Posts

    • Hola estoy cargando una hoja Excel a una grilla de VB6 y creo que el método que estoy empleando es lento, creo recordar que hay otros métodos mas rápidos, yo utilizo dos for X, y for Y recorriendo celda por celda y obtengo su valor (esto en 790 filas con 21 columnas me esta demorando 1 minuto), pero creo que había una forma de obtener un array de las celda lo cual es mas rápido mi código actual Private Sub Form_Load() Dim LastRow As Long Dim i As Integer Dim XL As Object, xlSpread As Object Const xlLastCell = 11 Dim Row As Long, Col As Long Set XL = CreateObject("Excel.Application") XL.Workbooks.Open FileName:=App.Path & "\L1.xlsx", ReadOnly:=False Set xlSpread = XL.Application LastRow = xlSpread.ActiveCell.SpecialCells(xlLastCell).Row With ucGridPlus1 .Redraw = False .ColsCount = 21 .RowsCount = LastRow - 6 + 1 'Encabesados For i = 0 To 20 .ColumText(i) = xlSpread.Cells(5, i + 1).Value Next i = 0 'Celdas/Tabla For Row = 6 To LastRow For Col = 0 To 20 .CellValue(i, Col) = xlSpread.Cells(Row, Col + 1).Value Next i = i + 1 'Debug.Print Row Next .Redraw = True End With XL.Application.DisplayAlerts = False XL.ActiveWorkbook.Close False 'Dont save changes (if any) XL.Quit Set XL = Nothing End Sub  
    • Para ocultar la aplicación: Application.Visible = False en el evento Workbook_Open Para poder trabajar con Excel mientras el formulario está mostrado: Userform1.Show vbModeless
    • Hola 2 horas de proceso ufff me parece mucho tiempo... Si ese proceso te congela momentáneamente Excel, no te queda mas que usar una virtual   Saludos 
    • Hola El comportamiento de las funciones utilizando formato de tabla estructurada, cambia respecto a las referencias Una forma sencilla de superarlo es usar referencias relativas de esas celdas Mira =SUMAR.SI.CONJUNTO(J$7:J7,C$7:C7,$C7)   Saludos 
    • ¡Hola, @gogua! El tema de los rangos expandibles en tabla tienen un comportamiento "peculiar" cuando llegan al final de la misma.  Entonces, una opción para trabajar con ellos es "jugar" con las referencias estructuradas.  Tu fórmula, al tener un solo criterio, puede usarse con la función SUMAR.SI de la siguiente forma: =SUMAR.SI(C$7:[@CODIGO];[@CODIGO];J$7:[@[Ent./Sal.]]) ¡Pruébala y comentas! ¡Bendiciones!
  • Recently Browsing

    No registered users viewing this page.

×
×
  • Create New...

Important Information

Privacy Policy