Sub Zakaz()
Dim ThisPos As Range, sTextToSearch As String
sTextToSearch = CB_Zakazchik.Value
With Range("A1:B25")
Set ThisPos = Cells.Find(sTextToSearch, LookAt:=xlWhole, MatchCase:=False, SearchFormat:=False)
If Not ThisPos Is Nothing Then
Cell_Split_R = Split(ThisPos.Address(ReferenceStyle:=xlR1C1), "R")
Cell_Split_C = Split(Cell_Split_R(1), "C")
Scol = Cell_Split_C(0)
Srow = Cell_Split_C(1) + 1
' MsgBox (Scol & ", " & Srow)
End If
End With
Zakazchik.Value = CB_Zakazchik.Value
Object.Value = Cells(Scol, Srow).Value
prot.Value = Cells(12, 28) + 1
End Sub
В коде ЮзерФормы он выполняется без нареканий, но при попытке вынести его в отдельный модуль выскакивает ошибка 424. Вот не могу понять, что надо поменять, чтобы оно заработало.
Я догадывался о подобном варианте, но проблема в том, что тогда теряется смысл выводить это в отдельный модуль. Может есть какой нибудь модификатор а-ля ActiveForm?
П.С. Замечание учту, но я слишком редко пишу на форуме - забуду.
Sanja, Нет конечно. Активной (вернее одна Show, остальные Hide) является только одна форма, но каждая из них отвечает за свой СИЗ. Но конкретные элементы из примера абсолютно идентичны во всех.
Я не знаю что такое СИЗ, и почему нельзя использовать одну форму, раз они идентичны, но раз Вы так хотите, то объявите глобальную переменную (что-то типа такого Public ActiveUF As UserForm) и присваивайте ей значение в момент инициализации/открытия/показа формы. См.файл Может эта статья натолкнет на какие-то мысли Работа с модулями классов
UmkaKamenka написал: но каждая из них отвечает за свой СИЗ.
имеет смысл просто добавить какой-то список или текстбокс, в котором будет указываться или выбираться конкретный комплект СИЗ. Нет смысла делать под каждый свою форму, если наполнение формы не изменятся. Если сам тип(или наименование) СИЗ не должны отображаться на форме - можно заносить в скрытый текстбокс признак этого СИЗ и потом опираться на него, забирая данные из формы. Это все на вскидку, т.к. полной картины у нас нет.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Дмитрий(The_Prist) Щербаков, Можно было бы. Но учитывая, что этот "проект" я начинал с нуля знаний в VBA , то получается как получается. И само собой переписывать всю архитектуру у меня нет ни малейшего желания, ни времени. Тем более сама программа готова и я всего лишь работаю над минорными улучшениями.
Private Sub CB_Zakazchik_Change()
Zakaz Me
End Sub
Это в стандартный модуль.
Код
Sub Zakaz(UF As UserForm)
Dim ThisPos As Range, sTextToSearch As String
sTextToSearch = UF.CB_Zakazchik.Value
With Range("A1:B25")
Set ThisPos = Cells.Find(sTextToSearch, LookAt:=xlWhole, MatchCase:=False, SearchFormat:=False)
If Not ThisPos Is Nothing Then
Cell_Split_R = Split(ThisPos.Address(ReferenceStyle:=xlR1C1), "R")
Cell_Split_C = Split(Cell_Split_R(1), "C")
Scol = Cell_Split_C(0)
Srow = Cell_Split_C(1) + 1
' MsgBox (Scol & ", " & Srow)
End If
End With
UF.Zakazchik.Value = UF.CB_Zakazchik.Value
UF.Object.Value = Cells(Scol, Srow).Value
UF.prot.Value = Cells(12, 28) + 1
End Sub
обращение к модулю класса. В данном случае - модуль формы. Если обращаться в коде самой формы - то получается все равно, что обратиться изнутри формы по её имени, только проще и короче.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...