2015-10-12 2 views
0

Этот код выглядит так, как это делает Шрёдингер. Если я открою проект и запустил код, я не получу никаких ошибок. Если я просмотрю код для редактирования или добавления чего-либо, при первом запуске кода я получаю «Ошибка времени выполнения 91». Если я попытаюсь запустить его второй раз, не внося никаких изменений, я получаю «Ошибка времени выполнения 429» (компонент ActiveX не может создать объект).Ошибка выполнения 91 и 429

Я пытаюсь найти строку (BuildSel) в диапазоне на листе (Ref), который имеет то же значение, что и выбранное в списке пользовательской формы (BuildList). Затем, как только строка найдена, чтобы взять данные из этой строки и столбцов A и B, и поместить их в текстовые поля на мою пользовательскую форму. Является ли мой код правильным и ActiveX делает ошибку? Я тоже извиняюсь за ужасную кодировку.

EDIT: список находится на многостраничном в моей пользовательской форме. Я впервые заметил проблему сегодня, когда попытался добавить еще один список на другой странице.

Private Sub BuildList_Click() 
    Dim Ref As Worksheet, BuildSel As Long 

    Set Ref = ThisWorkbook.Sheets("Ref") 

    BuildSel = Ref.Range("B2", Ref.Range("B" & Rows.Count).End(xlUp)).Find(BuildList.Value, lookat:=xlPart).Row 
    BuilderText.Value = Ref.Range("A" & BuildSel).Value 
    CompNameText.Value = Ref.Range("B" & BuildSel).Value 
End Sub 
+0

BuildSel неправильно определен. Он должен сказать: «Dim BuildSel As Variant» Я бы поставил это как ответ на свой вопрос, но поскольку я не могу объяснить, почему это исправило проблему, и я не хочу, чтобы мой код был хорошим примером правильного код, я поставлю его здесь как комментарий. Я оставлю вопрос до модераторов, чтобы решить, будет ли это полезно другим или нет. – Tyeler

ответ

0

Не уверен, почему изменяющий «BuildSel», чтобы вариант делает его работу, но код, как он стоит не имеет ошибки проверки, если нет элемента списка соответствия можно найти

Следующий код должен быть лучше подходит для использования:

Private Sub BuildList_Click() 
    Dim Ref As Worksheet: Set Ref = ThisWorkbook.Sheets("Ref") 
    Dim BuildSel As Range 
    With Ref 
     Set BuildSel = .Range("B2", .Range("B" & Rows.Count).End(xlUp)).Find _ 
      (BuildList.Value, lookat:=xlPart) 
     If Not BuildSel Is Nothing Then 
      BuilderText.Value = .Range("A" & BuildSel.Row).Value 
      CompNameText.Value = .Range("B" & BuildSel.Row).Value 
     Else 
      BuilderText.Value = "" 
      CompNameText.Value = "" 
     End If 
    End With 
End Sub 
+0

Thakns Flephal для вашего более эффективного кода. Это фактически обеспечило бы то, что я хотел, и не оставил бы места для ошибок. Я собираюсь изменить свой код на что-то вроде того, что вы предложили, потому что строка, которую я сделал, довольно грязная. BuildSel никогда не должен быть «Ничто», но я думаю, что это могло быть не так, поскольку я получал ошибки. Спасибо вам за помощь!! – Tyeler