0

Excelのいくつかのコードで奇妙なことが起こっています

Private Sub CommandButton2_Click()

Dim thiswb As Workbook
Set thiswb = ActiveWorkbook


Call EnterDataToSS(thiswb)
Me.Hide
BeamNoFind.Show vbModal



End Sub

呼び出されたコードは、基本的にいくつかの値をスプレッドシートにドロップします。残った値は、BeamNoFind ユーザーフォームの LISTBOX1 に入力されます。

BeamNoFind ユーザーフォームには、ボタンと LISTBOX1 があります。listbox1 から項目を選択してボタンをクリックすると、3 番目のユーザーフォーム (VBMODELESS) が開き、値を配置できます。

以下は、3番目のユーザーフォームを表示するボタンのコードです。

Private Sub CommandButton2_Click()
Dim Selected_Length As String
Dim Selected_Name As String

Dim Selected_Length_index As Integer

Selected_Length_index = BeamNoFind.ListBox1.ListIndex

With BeamNoFind.ListBox1

If .ListIndex > -1 Then

    Selected_Name = .Column(0, .ListIndex)
    Selected_Length = .Column(1, .ListIndex)

    CellInputForm.beam_length_label.Caption = Selected_Name & " [ " & Selected_Length & " ] "

    BeamNoFind.Hide
    'ChngDataSrc.Hide
    'Unload ChngDataSrc
    CellInputForm.Show vbModeless



Else
    MsgBox "No selection", vbExclamation, "Oops!"

End If
End With

End Sub

奇妙なことに、ボタンをクリックしてモードレスユーザーフォームを表示し、データをセルに配置すると、最初のマクロがトリガーされ、最初のユーザーフォームにドロップされます。コメント付きのコード 'ChngDataSrc.Hide' と 'Unload ChngDataSrc' がある場所は、ユーザーフォームが表示されたくないときに表示されないようにする試みです。フォームをアンロードすると、フォームが表示される代わりにエラーが発生します。エラーは最初のマクロにあります。

Sub get_scheduling_data(control As IRibbonControl)
ChngDataSrc.Show

End Sub

「CellInputForm.Show vbModeless」行の「vbModeless」を「vbModal」に置き換えると、不要なフォーム(ChngDataSrc)なしで正しく表示されるため、vbModeless と関係があります。しかし、フォームの機能(セルを選択し、OKボタンを押し、選択したセルに値を入れる)はなくなります。

4

1 に答える 1

0

解決策を見つけましたが、実際の解決策ではありません。配置しました

ChngDataSrc.Hide は、CellInputForm ユーザーフォームの Activate サブにあります。そのため、CellInputForm.show vbModeless が実行され、ChngDataSrc ユーザーフォームが不要にポップアップすると、再び非表示になります。

そもそもなぜ表示されているのかを知りたいのですが、この修正は今のところうまくいくようです。

于 2014-07-03T06:02:51.987 に答える