McAfee从VBA模块中删除代码

我正在尝试编写一个Excel模块,它将代码dynamic地插入到在devise时创build的窗体中的新对象中。

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

Dim DstrFiles As Object Set DstrFiles = ThisWorkbook.VBProject.VBComponents("DistributeFiles") With DstrFiles.CodeModule .InsertLines .CountOfLines + 1, Code End With 

我的问题是,当我使用.InsertLines,McAfee从我的模块中删除整个代码,有没有办法解决这个问题?

首先我创build标签:

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

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

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

解决这个问题的一个难得的方法就是事先在后台创build一堆代码,然后限制可能在运行中创build的标签数量。 – 我希望不会这样。

我一直在兜圈子,这似乎是迈克菲已知的问题。

有谁知道一种方法来创build一个dynamic的用户表单,可以添加代码添加到Contrls.Add方法的新标签或button?

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

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

例如:

 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 

如果你想创build一个新添加的控件的dynamic数组,你将需要创build一个包装类。 示例代码在这里。

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

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

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

所以你可以创build这样的代码在你的开发机器上运行,但是它不会(或者只是临时的)分发给客户。