Recorrer varias instrucciones de GoTo en Excel de forma masiva

Espero me puedan ayudar, no tengo mucha experiencia pero tengo conocimientos básicos.

No encuentro la forma para poder recorrer todos mis Goto de forma masiva sin tener que ir 1 por 1.
Ejemplo:
Tengo GoTo 201 en cascada hasta llegar al GoTo 1000, pero son muchas líneas hacia abajo y quisiera ver si existe alguna forma de ejecutar los Goto poniendo la instrucción de forma horizontal para no tener tantas líneas verticales.
Nota: La selección en circulo rojo es como se me ocurrió pero no funciona.
Slds

2 Respuestas

Respuesta
1

Visita:

Cursos de Excel y Macros

Por Dante Amor

----- --

No es recomendable utilizar la instrucción GoTo, no es una forma estructurada de realizar un código. Y no es recomendable realizar demasiados GoTo, no podrás hacer una adecuada revisión, de en dónde empieza y en dónde termina la macro.

----- --

Revisa las recomendaciones:

Curso de macros. Consejos para empezar a programar. - YouTube

Curso de macros. Declarar variables en vba excel. - YouTube

----- --

Pon aquí tu código, al menos, una parte, los primeros 30 GoTo, para entender tu código y ayudarte con la estructura, simplificar el código, hacerlo más eficiente y desde luego más rápido.

También explica con un ejemplo, cuál es el objetivo del código o de cada GoTo.

Si es complicado poner los ejemplos, puedes subir tu archivo a google drive, lo compartes, copias el enlace y lo pegas aquí.

O envíame tu archivo a mi correo:

[email protected]

----- --

Sal u dos Dante Amor

Hola Dante, gracias por tus comentarios.
Tienes toda la razón, tal ves no lo estoy haciendo de la mejor forma, pero esa fue la manera que encontré y que me funciono. Me gustaría saber como podría hacer mi código más eficiente, simple y funcional. Te comento que lo que pretendo hacer es copiar y pegar carpetas de diferentes direcciones mediante 1 botón que lo haga de forma masiva (Utiliznado Goto).
Este es el código que manejo actualmente:


Dim fso As Scripting.FileSystemObject

Sub Actualizar_ElementoB()

If MsgBox("El Proceso de actualización puede tardar  minutos ", vbQuestion + vbOKCancel, " ") = vbCancel Then Exit Sub

'Declaro los GoTo para que vaya a cada uno.

GoTo 201
GoTo 201
GoTo 202
GoTo 203
GoTo 204
On Error Resume Next

'Ingreso la ruta donde tengo datos oficiales "Privado" y los quiero pasar a otra carpeta donde se llama "Publico", en este caso solo es para la carpeta "01_Procedimiento" y así tengo para diferentes carpetas (capacitación, avance y seguimiento y análisis de riesgo), por eso es que manejo muchos GoTo, porque quiero que vaya a cada uno y haga el copiado de la carpeta especifica (este ejemplo es de 4 GoTo pero tengo más de 100).

201 Dim rutaEle2_Pro As String
Set fso = CreateObject("Scripting.FileSystemObject")
rutaEle2_Pro = "C:\Privado\Elemento_2\00_Elemento_2\01_Procedimiento"
If fso.FolderExists("C:\Publico\Elemento_2\00_Elemento_2\01_Procedimiento") = True Then
fso.DeleteFolder "C:\Publico\Elemento_2\00_Elemento_2\01_Procedimiento", True
fso.CopyFolder rutaEle2_Pro, "C:\Publico\Elemento_2\00_Elemento_2\", True
Else
fso.CopyFolder rutaEle2_Pro, "C:\Publico\Elemento_2\00_Elemento_2\", True
End If
'Instruccion para GoTo 202
202 Dim rutaEle2_Cap As String
Set fso = CreateObject("Scripting.FileSystemObject")
rutaEle2_Cap = "C:\Privado\Elemento_2\00_Elemento_2\02_Capacitacionl"
If fso.FolderExists("C:\Publico\Elemento_2\00_Elemento_2\02_Capacitacion") = True Then
fso.DeleteFolder "C:\Publico\Elemento_2\00_Elemento_2\02_Capacitacion", True
fso.CopyFolder rutaEle2_Cap, "C:\Publico\Elemento_2\00_Elemento_2\", True
Else
fso.CopyFolder rutaEle2_Cap, "C:\Publico\Elemento_2\00_Elemento_2\", True
End If
'Intruccion para Goto 203
203 Dim rutaEle2_Avan As String
Set fso = CreateObject("Scripting.FileSystemObject")
rutaEle2_Avan = "C:\Privado\Elemento_2\00_Elemento_2\07_Avance_Seguimiento"
If fso.FolderExists("C:\Publico\Elemento_2\00_Elemento_2\07_Avance_Seguimiento") = True Then
fso.DeleteFolder "C:\Publico\Elemento_2\00_Elemento_2\07_Avance_Seguimiento", True
fso.CopyFolder rutaEle2_Avan, "C:\Publico\Elemento_2\00_Elemento_2\", True
Else
fso.CopyFolder rutaEle2_Avan, "C:\Publico\Elemento_2\00_Elemento_2\", True
End If
'Intruccion para Goto 204
204 Dim rutaEle2_Ries As String
Set fso = CreateObject("Scripting.FileSystemObject")
rutaEle2_Ries = "C:\Privado\Elemento_2\00_Elemento_2\11_Analisis_Riesgo"
If fso.FolderExists("C:\Publico\Elemento_2\00_Elemento_2\11_Analisis_Riesgo") = True Then
fso.DeleteFolder "C:\Publico\Elemento_2\00_Elemento_2\11_Analisis_Riesgo", True
fso.CopyFolder rutaEle2_Ries, "C:\Publico\Elemento_2\00_Elemento_2\", True
Else
fso.CopyFolder rutaEle2_Ries, "C:\Publico\Elemento_2\00_Elemento_2\", True
End If

MsgBox "Proceso de actualización satisfactorio", vbInformation, "Carpeta actualizada"

End Sub

Te paso el código para los 4 goto:

Sub Actualizar_ElementoB()
  Dim fso As Scripting.FileSystemObject
  Dim arr As Variant, carpeta As Variant
  Dim pri As String, pub As String
  '
  Set fso = CreateObject("Scripting.FileSystemObject")
  '
  pri = "C:\Privado\Elemento_2\00_Elemento_2\"
  pub = "C:\Publico\Elemento_2\00_Elemento_2\"
  'agregar en el array las carpetas
  arr = Array("01_Procedimiento", "02_Capacitacion", _
              "07_Avance_Seguimiento", "11_Analisis_Riesgo")
  '
  For Each carpeta In arr
    On Error Resume Next: fso.DeleteFolder pub & carpeta, True: On Error GoTo 0   'borrar carpeta publico
    fso.CopyFolder pri & carpeta, pub, True                                       'copiar privado en publico
  Next
  MsgBox "Proceso de actualización satisfactorio", vbInformation, "Carpeta actualizada"
End Sub

En el array puedes agregar más carpetas.

Utiliza la misma lógica para los otros Goto que tienes.

Si tienes dudas, pon tu código para ajustarlo.

----- --

Curso 

cargar combobox - YouTube

Sal u dos Dante Amor

Respuesta
1

No entiendo porqué necesitas tantos GoTo... pero te comento que se pueden escribir varias instrucciones 1 una sola fila, separadas por 2 puntos. Por ejemplo:

GoTo 201 : GoTo 202  : GoTo 203

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas