2008-12-26 77 views
5

我正在尝试编写一个Excel模块,它将代码动态地插入到在设计时创建的窗体中的新对象中。McAfee从VBA模块中删除代码

我正在使用此代码,其中“代码”包含一个字符串与应该进入DstrFiles对象的实际代码。

Dim DstrFiles As Object 
Set DstrFiles = ThisWorkbook.VBProject.VBComponents("DistributeFiles") 

With DstrFiles.CodeModule 
    .InsertLines .CountOfLines + 1, Code 
End With 

我的问题是,当我使用.InsertLines,迈克菲从我的模块去掉整个代码,是有办法解决此问题?

首先,我创建一个标签:

Form1.Controls.Add("Forms.Label.1", "Label1", True) 

然后我用.InsertLines创建一些代码去与标签。

例如,我想让标签的背景颜色在有人点击时变成红色。用“.InsertLines”很容易完成。

解决这个问题的一种难看的方法是,预先在后台创建一堆代码,然后限制可以在运行中创建的标签数量。 - 我希望它不会那样。

我一直在兜兜转转,这似乎是McAfee的一个已知问题。

有谁知道创建动态用户表单的方法,该表单可以将代码添加到添加了Contrls.Add方法的新标签或按钮中?

+0

这里有一个讨论可能有助于:http://www.vbforums.com/showthread.php?t=358444 – Fionnuala 2008-12-26 23:23:55

回答

7

您不应该通过编写创建控件的代码来生成新的标签。

您应该使用Controls集合上的.Add方法来创建新的标签。

例如:

UserForm1.Controls.Add("Forms.Label.1", "foo", True) 

您可以使用WithEvents获得的事件。

例如,在UserForm1,

Public WithEvents a As MSForms.Label 

Private Sub a_Click() 

    MsgBox "label clicked" 

End Sub 

Private Sub CommandButton1_Click() 

    Set a = UserForm1.Controls.Add("Forms.Label.1", "foo", True) 
    a.Visible = True 
    a.Caption = "Hi There" 

End Sub 

如果你想新添加控件的动态数组,你需要创建一个小包装类。 Sample code for that is here.

+0

这对我来说还不够。我也需要一些代码来与标签一起使用。点击标签时应该发生一些事情。 – Christian 2009-01-13 10:03:08

1

如果可能的话,我会建议不要动态生成代码(像自修改程序的气味?)。

这可能很难说,如果不知道你的具体问题,但我敢打赌,有一个更好的解决方案,使用具有必要参数的函数。

1

您可能可以解决此版本的McAfee问题。但是下一个版本的数据文件或其他恶意软件拦截器可能会阻止你。

因此,您可以创建类似于此的代码以在您的开发计算机上运行,​​但它在分发给客户时决不会(或仅临时)运行。