1

環境を整えましょう。

これは Excel で実行される VBA コードです。

msflexgrid を含むユーザー フォームがあります。このフレックスグリッドには、顧客のリストと、顧客、営業担当者、CSR、製造担当者、地域、割り当てが表示されます。列をクリックすると、たとえば Territory 列の下で、別のユーザーフォームが開き、Territories のリストが表示されます。次に、選択した地域をクリックすると、ユーザーフォームが消え、新しい地域が古い地域に置き換わります。

選択した領域をクリックするまで、これはすべてうまく機能します。「領域」ユーザーフォームは消えず (ちらつきます)、新しい領域は基になるユーザーフォームを転送しません。

コードをステップ実行すると、うまく機能することを言及する必要があります。

ユーザーフォームを開く他のすべてのユーザーフォーム(フレックスグリッドを持たない)は問題なく機能するため、フレックスグリッドと関係があると思います。

以下は、いくつかのコードサンプルです。

**テリトリーユーザーフォームが閉じられたときにテリトリーユーザーフォームと新しいテリトリーの割り当てを示すflexgridからのイベントをクリックします。

Private Sub FlexGrid_Customers_Click()

With FlexGrid_Customers

    Select Case .Col
        Case 0
        Case 2
        Case 4
        Case 6
            UserForm_Territories.Show
        Case Else
    End Select

    If Len(Trim(Misc1)) > 0 Then
        .TextMatrix(.Row, .Col) = Trim(Misc1)
        .TextMatrix(.Row, .Col + 1) = Trim(Misc2)
    End If

End With

End Sub

** 次のサブはテリトリー ユーザーフォームで使用されます

Private Sub UserForm_Activate()

Misc1 = ""
Misc2 = ""

ListBox_Territory.Clear
Module_Get.Territories

End Sub

Private Sub UserForm_Terminate()

Set UserForm_Territories = Nothing

End Sub

Private Sub ListBox_Territory_Click()

With ListBox_Territory
    Misc1 = Trim(.List(.ListIndex, 0))
    Misc2 = Trim(.List(.ListIndex, 1))
End With

Hide
UserForm_Terminate

End Sub

私はこれが長々とした説明であることを知っていますが、私はかなりまともな VBA プログラマーであり、これには困惑しています。

どんな助けでも大歓迎です。

4

1 に答える 1

3

あなたのやっていることは間違っているとは言いません (絶対にうまくいかないという意味で) が、それは私を怖がらせます。これは私がフォームを扱う方法ではありません。

まず、UserForm_Territories(クラス/フォーム名) を使用して、暗黙的に作成されたフォームのインスタンスを参照しています。これは私がいつも避けてきたことです。私は常にフォームのインスタンスを明示的に作成するので、代わりに:

UserForm_Territories.Show

私はするだろう:

Dim oTerritoriesForm As UserForm_Territories
Set oTerritoriesForm = New UserForm_Territories

oTerritoriesForm.Show vbModal

' get the values from the form here

Unload oTerritoriesForm

次に、もっと心配なことに、明示的に呼び出して UserForm_Terminate の動作を破壊しています。なぜこれを行っているのか、あなたが述べた問題を回避できると思わない限り、私には想像できません。私のアドバイス:そうしないでください。

さらに悪いことに、その Terminate メソッド内で暗黙的に作成されたフォームのインスタンスに割り当てようとしています。あなたもそうすべきではありません。コンパイルさえされていることに驚いています。

暗黙的に作成されたフォームのインスタンスに、明示的に作成されたインスタンスを模倣させようとしているようです。その場合は、上記のように明示的に作成してください。

于 2010-01-07T17:33:43.393 に答える