Macro "genérica"

gustavomeeuwes

New Member
Joined
Aug 13, 2010
Messages
46
Hola de nuevo !!! Preguntando otra vez...

Tengo una serie de macros que son repetitivas en las instrucciones, salvo en el caso de los valores de unos rangos.
Adjunto ejemplo:

Code:
Sub DG_Ocup_Cerrar()
    ActiveSheet.Unprotect
    Range("[COLOR=red]C40[/COLOR]").Select
    Sheets("Hoja5").Visible = True
    If ActiveCell.MergeCells Then
    Sheets("Hoja5").Select
    Range("[COLOR=red]I3:J21[/COLOR]").Select
    Selection.Copy
    Sheets("Hoja2").Select
    Range("[COLOR=red]B40[/COLOR]").Select
    ActiveSheet.Paste
    End If
    Sheets("Hoja5").Select
    Sheets("Hoja5").Visible = False
    Sheets("Hoja2").Select
    Range("[COLOR=red]C48[/COLOR]").Select
    ActiveSheet.Protect
End Sub

Los valores que cambian son los indicados en rojo.
Quería saber como hacerla con Dim & String o Value (No tengo idea) para que quede algo así:

Code:
Sub DG_Ocup_Cerrar()
[COLOR=red]   DIM[/COLOR]
[COLOR=red]   Value1 = Hoja2 "C40"[/COLOR]
[COLOR=red]   Value2 = Hoja5 "I3:J21"[/COLOR]
[COLOR=red]   Value3 = Hoja2 "B40"[/COLOR]
[COLOR=red]   Value4 = Hoja2 "C48"[/COLOR]
[COLOR=red]   Application.Run "Cerrar"[/COLOR]
End Sub
 
Sub Cerrar
    ActiveSheet.Unprotect
    Range("[COLOR=red]Value1[/COLOR]").Select
    Sheets("Hoja5").Visible = True
    If ActiveCell.MergeCells Then
    Sheets("Hoja5").Select
    Range("[COLOR=red]Value2[/COLOR]").Select
    Selection.Copy
    Sheets("Hoja2").Select
    Range("[COLOR=red]Value3[/COLOR]").Select
    ActiveSheet.Paste
    End If
    Sheets("Hoja5").Select
    Sheets("Hoja5").Visible = False
    Sheets("Hoja2").Select
    Range("[COLOR=red]Value4[/COLOR]").Select
    ActiveSheet.Protect
End Sub

Así solo cambio los valores y ejecuto la macro "genérica".
Espero haber sido claro.
Unavez más gracias por vuestra ayuda.
Saludos
Gustavo
 

Excel Facts

Difference between two dates
Secret function! Use =DATEDIF(A2,B2,"Y")&" years"&=DATEDIF(A2,B2,"YM")&" months"&=DATEDIF(A2,B2,"MD")&" days"
Hola,

de pronto puedas usar algunas constantes, no estoy muy seguro de entender bien. Quizás algo así:

Code:
Sub DG_Ocup_Cerrar()

    Const [COLOR="Blue"]Value1[/COLOR] As String = "C40"
    Const [COLOR="Blue"]Value2[/COLOR] As String = "I3:J21"
    Const [COLOR="Blue"]Value3[/COLOR] As String = "B40"
    Const [COLOR="Blue"]Value4[/COLOR] As String = "C48"
    
    ActiveSheet.Unprotect
    Range([COLOR="blue"]Value1[/COLOR]).Select
    Sheets("Hoja5").Visible = True
    
    If ActiveCell.MergeCells Then
        Sheets("Hoja5").Select
        Range([COLOR="blue"]Value2[/COLOR]).Select
        Selection.Copy
        Sheets("Hoja2").Select
        Range([COLOR="blue"]Value3[/COLOR]).Select
        ActiveSheet.Paste
    End If
    
    Sheets("Hoja5").Select
    Sheets("Hoja5").Visible = False
    Sheets("Hoja2").Select
    Range([COLOR="blue"]Value4[/COLOR]).Select
    ActiveSheet.Protect
    
End Sub

Si quieres especificar la hoja, de pronto puedas definir las constantes más o menos así:

Code:
    Const Value1 As String = "Hoja2!C40"
    Const Value2 As String = "Hoja5!I3:J21"
    Const Value3 As String = "Hoja2!B40"
    Const Value4 As String = "Hoja2!C48"

y recuerda que no es necesario seleccionar una hoja o un rango para trabajar con él desde VBA, por lo que podrías reducir mucho código y hacer que vaya más rápido y limpia la macro si evitas seleccionar los objectos... de pronto algo así (no me parece lo ideal trabajar con "activesheet" pero no sé desde cuál hoja estés ejecutando la macro, así que ahí lo dejo):

Code:
Sub DG_Ocup_Cerrar()

    
    Const Value1 As String = "Hoja2!C40"
    Const Value2 As String = "Hoja5!I3:J21"
    Const Value3 As String = "Hoja2!B40"
    Const Value4 As String = "Hoja2!C48"

    
    ActiveSheet.Unprotect

    If Range(Value1).MergeCells Then Range(Value2).Copy Range(Value4)

    ActiveSheet.Protect


End Sub
 
Upvote 0

Forum statistics

Threads
1,223,956
Messages
6,175,611
Members
452,660
Latest member
Zatman

We've detected that you are using an adblocker.

We have a great community of people providing Excel help here, but the hosting costs are enormous. You can help keep this site running by allowing ads on MrExcel.com.
Allow Ads at MrExcel

Which adblocker are you using?

Disable AdBlock

Follow these easy steps to disable AdBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the icon in the browser’s toolbar.
2)Click on the "Pause on this site" option.
Go back

Disable AdBlock Plus

Follow these easy steps to disable AdBlock Plus

1)Click on the icon in the browser’s toolbar.
2)Click on the toggle to disable it for "mrexcel.com".
Go back

Disable uBlock Origin

Follow these easy steps to disable uBlock Origin

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back

Disable uBlock

Follow these easy steps to disable uBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back
Back
Top