McAfee从VBA模块中删除代码

时间:2008-12-26 22:34:10

标签: excel vba excel-vba mcafee

我正在尝试编写一个Excel模块,它在设计时以创建的形式动态地在新对象中插入代码。

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

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

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

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

首先我用:

创建标签
Form1.Controls.Add("Forms.Label.1", "Label1", True)

然后我使用.InsertLines创建一些与Label一起使用的代码。

例如,当有人点击它时,我希望标签的背景颜色变为红色。使用“.InsertLines”很容易实现这一点。

解决这个问题的一个丑陋方法是事先创建一堆在后台准备好的代码,然后限制可以动态创建的标签数量。 - 我希望不会那样。

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

有没有人知道一种创建动态用户表单的方法,可以将代码添加到使用Contrls.Add方法添加的新标签或按钮?

3 个答案:

答案 0 :(得分: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.

答案 1 :(得分:1)

如果可能,我建议不要动态生成代码(闻起来像是一个自我修改程序?)。

在不知道具体问题的情况下可能很难说,但我敢打赌,使用具有必要参数的函数有更好的解决方案。

答案 2 :(得分:1)

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

因此,您可以创建这样的代码,以便在您的开发机器上运行,但在分发给客户时,它永远不会(或只是暂时的)工作。