You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于主工作表下拉列表值,通过按钮打开指定Excel工作表?

问题与解决方案

问题描述

需要实现:点击“IOP-F&I”工作表中的按钮时,根据“RESUMO”工作表E7单元格下拉列表的值,打开对应的指定工作表。目前已在“RESUMO”工作表编写Worksheet_Change事件代码,可根据E7的值控制VistaCliente_DNN、VistaCliente_SESA等工作表的可见性,但不清楚如何修改按钮触发的宏来打开对应工作表。

原有按钮宏代码:

Sub VistaCliente()
    Sheets("VistaCliente").Visible = True
    Sheets("VistaCliente").Select
    Range("A1").Select
    Condicoes.Show
End Sub

现有Worksheet_Change事件代码:

Private Sub Worksheet_Change(ByVal Target As Range)
If [E7] = "DNN" Then
    Sheets("VistaCliente_DNN").Visible = True
Else
    Sheets("VistaCliente_DNN").Visible = False
End If

If [E7] = "SESA" Then
    Sheets("VistaCliente_SESA").Visible = True
Else
    Sheets("VistaCliente_SESA").Visible = False
End If

If [E7] = "SOM" Then
    Sheets("VistaCliente_SOM").Visible = True
Else
    Sheets("VistaCliente_SOM").Visible = False
End If

If [E7] = "SATE" Then
    Sheets("VistaCliente_SATE").Visible = True
Else
    Sheets("VistaCliente_SATE").Visible = False
End If
End Sub

解决方案

1. 修改按钮触发的宏

替换原有VistaCliente宏代码为以下内容,宏会自动读取E7的值,匹配对应的工作表并打开:

Sub VistaCliente()
    Dim targetSheetName As String
    Dim ws As Worksheet
    Dim resumeWs As Worksheet
    
    ' 获取RESUMO工作表E7的值
    Set resumeWs = ThisWorkbook.Sheets("RESUMO")
    targetSheetName = "VistaCliente_" & resumeWs.Range("E7").Value
    
    ' 检查目标工作表是否存在
    On Error Resume Next
    Set ws = ThisWorkbook.Sheets(targetSheetName)
    On Error GoTo 0
    
    If Not ws Is Nothing Then
        ' 设置工作表可见并选中
        ws.Visible = True
        ws.Select
        ws.Range("A1").Select
        ' 保留原有的用户窗体显示
        Condicoes.Show
    Else
        ' 若没有匹配的工作表,弹出提示
        MsgBox "未找到对应工作表:" & targetSheetName, vbExclamation
    End If
End Sub

2. 优化Worksheet_Change事件代码

原有事件代码可简化,避免重复判断逻辑:

Private Sub Worksheet_Change(ByVal Target As Range)
    ' 只在E7单元格修改时触发
    If Not Intersect(Target, Me.Range("E7")) Is Nothing Then
        Dim wsName As String
        Dim allSheets As Variant
        Dim ws As Variant
        
        ' 定义所有需要控制可见性的工作表
        allSheets = Array("VistaCliente_DNN", "VistaCliente_SESA", "VistaCliente_SOM", "VistaCliente_SATE")
        
        ' 先隐藏所有目标工作表
        For Each ws In allSheets
            ThisWorkbook.Sheets(ws).Visible = False
        Next ws
        
        ' 根据E7的值显示对应工作表
        wsName = "VistaCliente_" & Me.Range("E7").Value
        On Error Resume Next
        ThisWorkbook.Sheets(wsName).Visible = True
        On Error GoTo 0
    End If
End Sub

内容的提问来源于stack exchange,提问作者Joao

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 12:25:30