【问题标题】:Creating a Sheet List using Listbox使用列表框创建工作表列表
【发布时间】:2017-11-09 04:01:27
【问题描述】:

在使用 Listbox1 的用户表单中,我想列出已打开的工作簿,并在 Listbox2 中以相同的形式列出 listbox1 中所选工作簿的工作表,但也在 lisbox2 中,我想创建每个工作表命名一个带有五个命令按钮的复选框,用于导入、导出、擦除、隐藏或取消隐藏从 Wb1 到 Wb2 的选定工作表,反之亦然。 到目前为止,我得到了你们的帮助,制作了一个包含已打开工作簿列表和相应工作表列表的表格here 我也在尝试编写代码以将工作表从一个工作簿导入另一个工作簿here,.你知道实现这一点的方法吗? 谢谢你

顺便说一句,这是从工作表中用于擦除可能放入列表中的工作表的代码

Sub DeleteSheets()


    Dim wks As Worksheet
    Dim MyRange As Range
    Dim cell As Range

    Set wks = Worksheets("Controls")

    With wks
    Set MyRange = Range("D5:D34", .Cells(.Rows.Count, "H").End(xlUp))

    End With

    On Error Resume Next
    Application.DisplayAlerts = False
    For Each cell In MyRange
    Sheets(cell.Value).Delete

    Next cell
    Application.DisplayAlerts = True
    On Error GoTo 0
    Sheets("Controls").Range("D5:D34").ClearContents

End Sub

还有这个用于隐藏和取消隐藏工作表:

Sub Hide_Sheets()

    'In use
    'Hide the sheets in Controls Sheet
    Dim cell As Range
    On Error Resume Next
    For Each cell In Sheets("Controls").Range("E5:E34")
    ' Hide sheets
    Sheets(cell.Value).Visible = False

    Next cell
End Sub

Sub Unhide_Sheets()

    'In use
    'Unhide the sheets in Controls Sheet
    Dim cell As Range
    On Error Resume Next
    For Each cell In Sheets("Controls").Range("G5:G34")
    ' Hide sheets
      Sheets(cell.Value).Visible = True
      Next cell
End Sub

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    我建议您的用户表单采用以下结构:

    由于您执行以下操作,其中两个列出工作簿,另一个列出当前选定工作簿的工作表。然后,您需要五个命令按钮来执行您想要执行的操作。

    为了更新工作簿和工作表,您需要在 Userform_activate 和 Listbox1_Change 事件内的用户窗体中放置代码。因此,您获得了将所有工作簿名称列出到 listbox1 中并将其放入 Userform_Activate 的代码。每次激活用户表单时,工作簿列表都会更新。

    如果您现在选择 listbox1 的条目,您希望代码更新您的工作表名称。因此,您获得了更新名为“wbname”的工作簿的工作表名称并将其放入 listbox1_Change 的代码。然后执行以下代码:

    Private Sub ListBox1_Change()
      Dim wbname as string
      wbname=ListBox1.Value
    
      call GetSheetNamesIntoListBox2(wbname)
    
    End Sub
    

    当然,GetSheetNamesIntoListBox2 是您将所有工作表名称放入 ListBox2 的子项。

    最后您需要设置按钮。每个按钮都有一个您想要使用的 Click 事件。因此,如果单击 Button,将运行以下代码:

    Private Sub CommandButton1_Click()
     Dim wbname as string, wsname as string
    
     wbname=Listbox1.Value
     wsname=Listbox2.Value
    
      ' You may want to check if wbname and wsname are valid before running the Task
    
     PerformAction(wbname,wsname)
    End Sub
    

    PerformAction 是您用于导入、导出、清除、隐藏或取消隐藏工作表的例程。

    我知道这不是可行的解决方案,但您可以根据您的具体情况调整此通用解决方案。如果您使用我的方法遇到问题,请在 cmets 中询问。

    【讨论】:

    • 非常感谢,我会检查并尝试将您的见解应用于我的问题,我会及时通知您
    猜你喜欢
    • 1970-01-01
    • 2018-05-13
    • 1970-01-01
    • 2012-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-28
    相关资源
    最近更新 更多