在使用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
答案 0 :(得分:0)
我建议使用以下用户表单结构:
由于您执行了两项操作,其中一项列出了工作簿,另一项列出了当前所选工作簿的工作表。然后,您希望有五个命令按钮用于您要执行的操作。
为了更新工作簿和工作表,您需要将代码放在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是您用来导入,导出,清除,隐藏或取消隐藏工作表的例程。
我知道这不是解决方案,但您可以根据具体情况调整此一般解决方案。如果您使用我的方法遇到问题,请在评论中提问。