2008-12-26 102 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問題。但是下一個版本的數據文件或其他惡意軟件攔截器可能會阻止你。

因此,您可以創建類似於此的代碼以在您的開發計算機上運行,​​但它在分發給客戶時決不會(或僅臨時)運行。