es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  , , ,

Answer

  1. Avatar for 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:

    Sub DeterminarPestañas()
    
        'DETERMINAR QUÉ SUBRUTINA LLAMAR BASADO EN EL NOMBRE DE LA HOJA (PESTAÑA)
        Select Case ActiveSheet.Name
            Case "CBI", "Fire", "LEA"
                'Llamar a la subrutina IsolNamesOnly para CBI, Fire o LEA
                Call IsolNamesOnly
            Case "InCase"
                'Llamar a la subrutina IsolInCase para InCase
                Call IsolInCase
            Case Else
                'Llamar a IsolOther para cualquier otra hoja de trabajo
                Call IsolOther
        End Select
    
    End Sub
    

    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!

Comments are closed.