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 を使用して、Label に対応するコードを作成します。

たとえば、誰かがラベルをクリックすると、ラベルの背景色が赤くなるようにします。これは、「.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 に答える