允许用户在运行时在工作表上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需要有效地“暂停”,同时也允许用户与工作表进行交互。 一个vbModalforms不能做到这一点(它暂停,没有交互),真的既不可以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