1

VBAの皆さん、

本題に入ります。私はすべてのベルとホイッスル(ラベル、テキストボックス、リストボックス、タブストリップなど)を備えたユーザーフォームを持っています。現在サブは3人います。

これが私のコードです。人々がユーザーフォームの初期化のみを要求したことは知っていますが、すべてを見ると問題を見つけるのに役立つ場合があります。

Private x As Single
Private y As Single
'------------------------------------------
Private Sub CommandButton1_Click()

    Unload Me

End Sub
'------------------------------------------
Private Sub ListBox1_Click()

    x = 2
    y = 2

    name = ListBox1.Value

    'Loop to match names
    Do Until name = Cells(x, y)
        x = x + 1
    Loop

    'Changes lables on click <- I realize I can handle this better with listbox.values
    Label2.Caption = Sheet2.Cells(x, 2)  'Name
    Label5.Caption = Sheet2.Cells(x, 3)  'Current Positions
    Label7.Caption = Sheet2.Cells(x, 4)  'Previous Positions
    Label9.Caption = Sheet2.Cells(x, 5)  'DOB
    Label11.Caption = Sheet2.Cells(x, 6) 'POB
    Label13.Caption = Sheet2.Cells(x, 7) 'Party Affiliation

    'Changes tab strip accordingly
    Call TabStrip1_Change

    'Handles Picture
    If Cells(x, 8) <> "" Then
        Image1.Picture = LoadPicture(ThisWorkbook.Path & Cells(x, 8))
    Else
        Image1.Picture = LoadPicture(ThisWorkbook.Path & "..\pics\nophoto.jpg")
    End If

End Sub
'------------------------------------------
Private Sub TabStrip1_Change()

    'Handle Tab Strip
    If TabStrip1.Value = 0 Then
        TextBox1.Value = Cells(x, 9)
    ElseIf TabStrip1.Value = 1 Then
        TextBox1.Value = Cells(x, 10)
    Else
        TextBox1.Value = Cells(x, 11)
    End If

End Sub
'------------------------------------------
Private Sub UserForm_Initialize()

    'Initialize global variables
    x = 2

    'Initialize lists within userform.
    ListBox1.RowSource = "B2:B11"

    'Set tab strip to first tab.
    TabStrip1.Value = 0                  
    TextBox1.Value = Sheet2.Cells(2, 9)

    'Grab photo if path is in cell
    If Cells(2, 8) <> "" Then
        Image1.Picture = LoadPicture(ThisWorkbook.Path & Cells(2, 8))
    Else
        Image1.Picture = LoadPicture(ThisWorkbook.Path & "..\pics\nophoto.jpg")
    End If

End Sub

問題は、vba または commandButton (Userform1.show) を介してコードを実行すると、ユーザーフォームがリストボックスにデータを入力するかどうかでコインが反転することです。ラベルは正しく初期化されていますが、リスト ボックスにはテキストが表示されません。マクロを実行して停止し続けると、最終的には正常に動作します。

これはメモリの問題ですか?ユーザーフォームを適切にアクティブ化していませんか? それとも、ずさんなコーディングが原因ですか?

任意の提案をいただければ幸いです。

4

1 に答える 1

1

完全な を表示できないためUserform_Initialize()、リストをリストボックスに入力しただけだと思います。

リストボックスが表示されたときに何かを選択したい場合は、次のようなものを呼び出すかListBox1.ListIndex = 0、デフォルト値のインデックスを呼び出す必要があります。これは、リストが入力された後である必要があります。

アップデート:

ありがとう、それがうまくいかないのは、アクティブシートがリスト項目を持っている場所ではないからだと思います。完全な数式アドレスまたは範囲名を入力すると、テスト ワークブックは "Test.xlsm" になります。

ListBox1.RowSource = "[Test.xlsm]Sheet1!B2:B11"' ワークブックとシートの名前を自分に合わせて変更します

また

ListBox1.RowSource = "Test.xlsm!MyListItems"' ワークブック名​​を変更し、リスト アイテムを含む範囲の名前を作成および変更します。

于 2013-09-18T04:14:01.817 に答える