允许用户在运行时在工作表上创建条目

时间:2014-09-23 19:07:18

标签: excel vba excel-vba

所有

先谢谢你,你们都是一个巨大的资源!!!

我有几张表格受保护的电子表格,但用户仍然可以使用过滤器。我正在自动处理大部分工作表,但我需要做的是向用户提供需要过滤的工作表,然后让他们选择“完成”类型按钮或工具栏条目,我已经拥有。 / p>

我需要做的是将这张纸张打开,如果可能的话,暂停宏,同时进行更改(最多可以在纸张准备好之前选择5个过滤器。

然后,仅将可见单元格复制到特定工作表,然后恢复宏。

我认为工作表更改事件不会这样做。

我正在考虑更多关于在备用工作表上设置标记,启动下一个宏然后查看是否可以找到原始宏并选择标记位置的方法?

我想到了一个无模式用户表单,用户可以单击“确定”,然后调用下一个宏,但这不起作用。

主叫代码是:

UserForm3.Show
CopyToDisplay "AEP"
LastPos = LastPos + 1

其中AEP是要从中复制过滤行的工作表名称。

显示Userform,但单击“确定”不会执行任何操作,当然,宏会继续运行。

任何建议都将不胜感激!

谢谢,

杰夫

1 个答案:

答案 0 :(得分:2)

杰夫试试吧。您当前的代码:

UserForm3.Show
CopyToDisplay "AEP"
LastPos = LastPos + 1

当我们显示UserForm时,默认行为是vbModal,它实际上冻结了应用程序,用户无法与任何 UserForm进行交互,这不是您想要的。你需要的是一种显示表单的方法,然后等待用户发出他/她完成输入的信号。

所以我们需要修改一些内容:

UserForm需要有效地“暂停”,同时还允许用户与工作表进行交互。 vbModal表单不能执行此操作(暂停,没有交互),并且vbModeless实际上也不能(它继续执行并允许交互)。

难题?不。我们可以使用vbModeless形式模拟暂停,并保留用户与工作表交互的能力。这两个世界中最好的!!

我们将使用可选的vbModeless显示表单,这允许用户与Application / worksheets / etc的其余部分进行交互。由于无模式表单继续执行代码,我们需要模拟暂停,我们可以使用Loop执行此操作。循环将无限期地运行,并且只有在UserForm关闭后才会中断,此时其余代码将继续执行。

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.

以设计为目标,为您的表单提供一个Label控件,并以一些有用/有用的方式设置其.Caption属性(以及表单的.Caption属性)。您可以添加一个命令按钮,但这似乎是不必要的,因为所有按钮都会调用Terminate事件(总是可以用红色“X”完成)

enter image description here

针对您的复制问题(明显无法粘贴),请尝试更改此内容:

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