Múltiples opciones de llamadas Si/Entonces
Tengo varias hojas de cálculo. Hay 3 opciones de llamada a subrutina basadas en el nombre de la hoja de cálculo. He intentado reorganizar y usar If, If Not, Else y ElseIf, Exit Sub, End If, etc. Si la llamada se completa y retorna, inevitablemente llega a la última llamada (aquí … IsolOther) y la ejecuta incluso si la llamada anterior funcionó. También he intentado averiguar la función SELECT CASE para múltiples opciones. Las llamadas a CBI, Fire, LEA y InCase funcionan perfectamente. El problema surge cuando tengo una hoja de cálculo con un nombre diferente… Quiero que la llamada vaya a IsolOther.
Sub DetermineTabs()
'DETERMINAR QUÉ SUBRUTINA LLAMAR SEGÚN EL NOMBRE DE LA HOJA (PESTAÑA)
Dim newTab As String
newTab = ActiveSheet.Name
'Llamar a la rutina de procesamiento de categoría adecuada
'Llamar a la subrutina IsolNamesOnly si la hoja activa se llama... CBI
If newTab = "CBI" Then Call IsolNamesOnly Else
'Llamar a la subrutina IsolNamesOnly si la hoja activa se llama... Fire
If newTab = "Fire" Then Call IsolNamesOnly Else
'Llamar a la subrutina IsolNamesOnly si la hoja activa se llama... LEA
If newTab = "LEA" Then Call IsolNamesOnly Else
'Llamar a la subrutina IsolInCase si la hoja activa se llama... InCase
If newTab = "InCase" Then Call IsolInCase Else
'Llamar a la subrutina IsolOther si la hoja activa se llama... cualquier otro nombre
If newTab <> "CBI" Or newTab <> "Fire" Or newTab <> "LEA" Or newTab <> "InCase" Then Call IsolOther Else
End Sub
También he intentado “If Not newTab = “CBI” Or newTab = “Fire” Or newTab = “LEA” Or newTab = “InCase” Then Call IsolOther Else” (sin comillas como una alternativa a la última línea IF), así como hacer la última línea individual con If Not/Else, pero no lo logro. Si ninguna de las primeras 4 hojas se encuentra, quiero ejecutar esa llamada y finalizar la subrutina. He revisado las preguntas 60781118, 51274411, 24684092 y otras consultas en Google. Ayuda… por favor.
davy.ai
Parece que el problema que enfrentas tiene que ver con la lógica de las declaraciones If. La estructura actual de las declaraciones If en tu código siempre llamará a la subrutina IsolOther porque las condiciones de cada declaración If son independientes entre sí. Para lograr adecuadamente tu requerimiento, necesitas reestructurar tus declaraciones If.
Una forma de hacer esto es mediante el uso de una declaración Select Case, que te permitirá especificar varios casos y acciones para cada caso. Aquí tienes un ejemplo de cómo puedes refactorizar tu código para utilizar una declaración Select Case:
Con esta estructura, si el nombre de la hoja activa coincide con “CBI”, “Fire” o “LEA”, llamará a la subrutina IsolNamesOnly. Si el nombre de la hoja activa es “InCase”, llamará a la subrutina IsolInCase. Y si el nombre de la hoja activa no coincide con ninguno de ellos, llamará a la subrutina IsolOther.
¡Espero que esto te ayude!