使用列表框创建工作表列表

时间:2017-11-09 04:01:27

标签: vba excel-vba excel

在使用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

1 个答案:

答案 0 :(得分:0)

我建议使用以下用户表单结构:

enter image description here

由于您执行了两项操作,其中一项列出了工作簿,另一项列出了当前所选工作簿的工作表。然后,您希望有五个命令按钮用于您要执行的操作。

为了更新工作簿和工作表,您需要将代码放在Userform_activate和Listbox1_Change事件中的userform中。因此,您可以获取代码以将所有工作簿名称列入listbox1并将其放入Userform_Activate中。 Evertime userform被激活,工作簿列表将被更新。

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

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

  call GetSheetNamesIntoListBox2(wbname)

End Sub

GetSheetNamesIntoListBox2当然是子目录,你将所有的表格名称都输入到ListBox2中。

最后,您需要设置按钮。每个Button都有一个您想要使用的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是您用来导入,导出,清除,隐藏或取消隐藏工作表的例程。

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