5

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

我正在使用此代码,其中“代码”包含一个字符串,其中包含应进入 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 创建一些代码以配合标签。

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

解决此问题的一种丑陋方法是预先创建一堆在后台准备好的代码,然后限制可能动态创建的标签数量。- 我希望它不会到那个地步。

我一直在谷歌搜索,这似乎是 McAfee 的一个已知问题。

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

4

3 回答 3

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

如果要创建一个新添加控件的动态数组,则需要创建一个小包装类。示例代码在这里。

于 2009-01-08T03:01:40.103 回答
1

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

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

于 2008-12-29T14:17:57.477 回答
1

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

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

于 2009-01-06T22:17:24.437 回答