Здравствуйте, замечательное сообщество VBA, я все еще новичок в VBA и пытаюсь многому научиться.Заранее благодарим за просмотр моего кода и моего описания проблемы, с которой я сталкиваюсь.
У меня есть кнопка на странице, которая вызывает новую форму пользователя.
КОД SNIPPET1:
Sub btnShowDetails_Click()
Call frmShowDeets.ShowDeets
End Sub
... который вызывает следующий бит кода в пользовательской форме 'frmShowDeets':
SNIPPET CODE 2:
Public Sub ShowDeets()
Dim frm As frmShowDeets
Set frm = New frmShowDeets 'this line triggers the Userform_Initialize() event below
frm.Show
End Sub
... запуск:
КОД SNIPPET 3:
Private Sub UserForm_Initialize()
Dim comboBoxItem As Range
For Each comboBoxItem In ContactList.Range("tblContactList[CompanyName]")
'^refers to unique values in a named range
With Me.boxCompanySelection
.AddItem comboBoxItem.Value
End With
Next comboBoxItem
End Sub
Итак, на этом этапе форма, которую я хочу отобразить, имеет загруженные значенияв его одном выпадающем списке для выбора пользователя.Пользователь выбирает компанию, и событие Combobox_Change запускает другие подпрограммы, которые извлекают информацию для этой компании.
КОД SNIPPET 4:
Public Sub boxCompanySelection_Change()
Call frmShowDeets.PullData
End Sub
Sub PullData()
Dim numCompanies As Long
numCompanies = ContactList.Range("B6").Value 'this holds a count of the rows in the named range
Dim FoundCell As Range
Set FoundCell = ContactList.Range("tblContactList[Company Name]").Find(What:=boxCompanySelection.Text, LookIn:=xlValues, LookAt:=xlWhole)
Dim CompanyRow As Long
CompanyRow = FoundCell.Row
With ContactList
'pull a bunch of the company's details
End With
End Sub
Вот где это становится странным... Как только форма показывается, и пользователь выбирает один из элементов поля со списком, вызывая событие Combobox_Change, код обрывается, потому что часть Range () What: = boxCompanySelection.Text '. Метод Find читается как "" пустой(хотя Code Snippet 3 предназначен для загрузки названий компаний, а Code Snippet 4 запускается только тогда, когда пользователь выбирает одно из этих названий компаний в выпадающем списке), и мне не нужно создавать что-то для обработки исключений «не найдено», посколькуединственными возможными значениями должны быть значения, извлеченные из моего именованного диапазона.
После перехода по коду я определил, что по какой-то причине фрагменты кода 2 и 3 запускаются ДВАЖДЫ до фрагмента кода4 запускается.Кто-нибудь знает, что из-за моего кода это происходит?Я думаю, что есть несоответствие между формой, которая отображается и загружается со значениями в выпадающем списке, и тем, из чего кодовый фрагмент 4 считывает данные.
Что страннее, если я запускаю код, начинающийся с фрагмента кода 2 (игнорируя вызов кнопки в фрагменте кода 1), форма работает так, как задумано, и из того, что я могу сказать, 2 и 3 запускаются только один раз.
Проблема, вероятно, проста, которую я пропускаю, но я просто не могу понять,что это такое.Еще раз спасибо!