允许用户在运行时在工作表上input条目
所有:
预先感谢你,你们都是一个巨大的资源!
我有几张电子表格,其中工作表受到保护,但用户仍然可以使用filter。 我自动处理大部分工作表,但是我需要做的是向用户提供需要过滤的工作表,然后让他们select一个“完成”types的button或工具栏条目,我已经有了。
我需要做的就是把这张纸放上去,如果可能的话,暂停一下macros,在他们做出改变的时候(可能最多有5个filter,他们在纸张准备好之前select)。
然后,将可见单元格复制到特定工作表,然后恢复macros。
我不认为工作表变化事件会做到这一点。
我正在考虑更多地在备用纸上设置一个标志,启动下一个macros,然后看看是否可以find原始的macros,并拿起标记的地方?
我想到了一个无模式的用户窗体,用户可以点击确定,然后调用下一个macros,但这是行不通的。
调用代码是:
UserForm3.Show CopyToDisplay "AEP" LastPos = LastPos + 1
其中,AEP是要从中复制过滤行的工作表名称。
用户窗体显示,但单击确定什么都不做,当然,macros不断。
任何build议将不胜感激!
谢谢,
杰夫
杰夫让我们试试这个。 您目前的代码:
UserForm3.Show CopyToDisplay "AEP" LastPos = LastPos + 1
当我们显示一个UserForm时,默认的行为是vbModal
,它基本上冻结了应用程序,用户不能和除UserForm之外的其他任何东西交互,这不是你想要的。 你需要的是一种显示表单的方法,然后等待用户发信号通知他/他已完成input。
所以我们需要修改一些东西:
UserForm需要有效地“暂停”,同时也允许用户与工作表进行交互。 一个vbModal
forms不能做到这一点(它暂停,没有交互),真的既不可以vbModeless
(它继续执行,并允许交互)。
难题? 不,我们可以使用vbModeless
窗体模拟暂停,并保留用户与工作表交互的能力。 两全其美的!!
我们将用可选的vbModeless
来显示表单,这允许用户与应用程序/工作表/其他部分进行交互。 由于无模式表单继续执行代码,因此我们需要模拟一个暂停,我们可以使用Loop
来做到这一点。 循环将无限期运行,并且只有在UserFormclosures后才会中断,此时代码的其余部分将继续执行。
UserForm3.Show vbModeless Do While UserForm3.Visible DoEvents Loop LastPos = LastPos + 1 'You MAY need to reset some variables, if the Filter/Autofilter has affected these/etc.
在devise方面,给你的表单一个单独的Label
控件,并以一些有用/有教育意义的方式设置它的.Caption
属性(和表单的.Caption
属性)。 你可以添加一个命令button,但似乎没有必要,因为所有的button都会调用Terminate
事件(总是可以用红色的“X”来完成)
对于你的复制问题(显然不能粘贴),试着改变它:
Sheets("AEP").Select With ActiveSheet .UsedRange.SpecialCells(xlCellTypeVisible).Copy _ Destination:=Sheets("Display").range("A" & LastPos) .AutoFilterMode = False Application.CutCopyMode = False End With
对此:
With ActiveSheet .UsedRange.SpecialCells(xlCellTypeVisible).Copy Sheets("Display").range("A" & LastPos).PasteSpecial .AutoFilterMode = False Application.CutCopyMode = False End With