我用2個文本框,3個按鈕和一個帶有兩列的列表框創建了一個用戶窗體。如果我點擊列表框中的一個條目,所選的列表條目將被轉移到兩個不同的文本框。在VBA中,爲什麼將文本框值放入單元格會觸發另一個用戶窗體子例程中的for循環?
請參見下面的代碼:
Private Sub NewSourceListBox_Click()
Dim i As Integer
'Show the selected data in the corresponding text boxes
For i = 0 To NewSourceListBox.ListCount - 1
If NewSourceListBox.Selected(i) Then
'Hide the add button and show the change button
NewSourceBtnChange.Top = 168
NewSourceBtnChange.Visible = True
NewSourceBtnAdd.Visible = False
NewSourcesIDTxtBox.Value = NewSourceListBox.List(i, 0)
NewSourcesSourceTxtBox.Value = NewSourceListBox.List(i, 1)
'Pass on the selected item row to another subroutine
selectedItem = i
Exit For
End If
Next i
End Sub
selectedItem
是另一個模塊,我需要在另一個子程序使用創造了一個全局變量。如果我更改了用戶窗體中文本框的條目並單擊更改按鈕,則會執行以下代碼。
此代碼:
Private Sub NewSourceBtnChange_Click()
Dim row As Integer
row = 6257 + selectedItem
'Change the selected data in the list box to the corresponding data in the text boxes
Sheets("Datensätze").Range("A" & row).Value = NewSourcesIDTxtBox.Value
Sheets("Datensätze").Range("B" & row).Value = NewSourcesSourceTxtBox.Value
'Another duplicate entry to make vLookup work
Sheets("Datensätze").Range("C" & row).Value = NewSourcesIDTxtBox.Value
Unload Me
'Unload the new entry user form to repopulate the comboboxes
Unload NewEntryUserForm
NewEntryUserForm.Show
End Sub
如果我看通過F8一步一步來,然後會發生以下情況:當我點擊「NewSourceBtnChange」按鈕,相應的子程序NewSourceBtnChange_Click()
開始。當我達到Sheets("Datensätze").Range("A" & row).Value = NewSourcesIDTxtBox.Value
程序跳轉到NewSourcesListBox_Click()
例程,執行它兩次並跳回到Sheets("Datensätze").Range("B" & row).Value = NewSourcesSourceTxtBox.Value
,然後再執行NewSourcesListBox_Click()
例程兩次,並跳回到最後一個條目Sheets("Datensätze").Range("C" & row).Value = NewSourcesIDTxtBox.Value
並執行NewSourceBtnChange_Click()
例程的其餘部分。
這使得無法從文本框中獲取新數據到其目標單元格。
編輯:
只是爲了更容易地重建所描述的行爲,我導出用戶窗體及其代碼和uploaded它。
在工作簿中是否有任何'Worksheet_Change'事件處理程序? –
我試過你的代碼,並沒有你提到的行爲。它必須與您已有的其他代碼相關。正如joseph4tw提到的,「Worksheet_Change」或「Worksheet_SelectionChange」可能會觸發它。再次檢查您的代碼。 – Tehscript
@ joseph4tw和Tehscript。我唯一擁有的是一個'Worksheet_SelectionChange',它將評論框重新放置到可見屏幕的中間。我評論了整個代碼塊,但行爲仍然相同。我會上傳整個用戶表單,也許這將有助於解決問題。 – d3x