Страницы: 1
RSS
вынос процедуры в отдельный модуль
 
Приветствую, есть код:
Код
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. Вот не могу понять, что надо поменять, чтобы оно заработало.
Изменено: UmkaKamenka - 19.09.2024 12:15:55
 
Для обращения к контролам формы ВНЕ модуля формы, нужно явно указывать родительский объект, т.е. эту форму
Код
sTextToSearch = Bots.CB_Zakazchik.Value
Ну и в подобных местах по аналогии
П.С. код в сообщении следует оформлять соответствующим тегом (<...>)
Согласие есть продукт при полном непротивлении сторон
 
Цитата
написал:
Ну и в подобных местах по аналогии
Я догадывался о подобном варианте, но проблема в том, что тогда теряется смысл выводить это в отдельный модуль. Может есть какой нибудь модификатор а-ля ActiveForm?

П.С. Замечание учту, но я слишком редко пишу на форуме - забуду.
Изменено: UmkaKamenka - 19.09.2024 12:04:51
 
Лучше озвучьте ЗАДАЧУ, которую Вы пытаетесь решить таким СПОСОБОМ
Согласие есть продукт при полном непротивлении сторон
 
Цитата
Замечание учту
Свои ранние сообщения можно изменять. Если что
Согласие есть продукт при полном непротивлении сторон
 
Цитата
написал:
Лучше озвучьте ЗАДАЧУ, которую Вы пытаетесь решить таким СПОСОБОМ
Задачи особой нет, но в реальном случае у меня не одна форма как в примере, а около 15. А предложенное Вами решение не даёт нужной универсальности.  
 
Цитата
UmkaKamenka написал:
А предложенное Вами решение не даёт нужной универсальности.
Вот и опишите тут эту функциональность. У Вас все формы одинаковые?
Согласие есть продукт при полном непротивлении сторон
 
Да, код я могу скопировать в каждую форму отдельно без изменений.  
 
А зачем столько одинаковых форм? Вы ими одновременно пользуетесь?
Согласие есть продукт при полном непротивлении сторон
 
Sanja, Нет конечно. Активной (вернее одна Show, остальные Hide) является только одна форма, но каждая из них отвечает за свой СИЗ. Но конкретные элементы из примера абсолютно идентичны во всех.  
 
Я не знаю что такое СИЗ, и почему нельзя использовать одну форму, раз они идентичны, но раз Вы так хотите, то объявите глобальную переменную (что-то типа такого Public ActiveUF As UserForm) и присваивайте ей значение в момент инициализации/открытия/показа формы. См.файл
Может эта статья натолкнет на какие-то мысли
Работа с модулями классов
Изменено: Sanja - 19.09.2024 12:46:43
Согласие есть продукт при полном непротивлении сторон
 
Sanja, Спасибо, ознакомлюсь.

П.С. "СИЗ" это для рабочих. К программированию отношение не имеет.
 
Цитата
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
 
МатросНаЗебре, спасибо
 
Sanja, извиняюсь, а как тему закрыть?
 
Цитата
UmkaKamenka написал:
как тему закрыть?
Зачем? Тема уже Вам не принадлежит) Она, возможно, кому-то еще поможет
Согласие есть продукт при полном непротивлении сторон
 
UmkaKamenka,
Темы здесь не закрываются. Они - для всех. И подскажите, пожалуйста, всё-таки как расшифровывается СИЗ?
 
Sanja, ну в таком случае всё ок
 
Мистер Экселистор, я так понимаю Средство Индивидуальной Защиты
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
МатросНаЗебре написал:
Zakaz Me
Извините, пожалуйста, а что такое ME?
 
Дмитрий(The_Prist) Щербаков, Большое спасибо!
 
Цитата
Мистер Экселистор написал:
что такое ME?
обращение к модулю класса. В данном случае - модуль формы. Если обращаться в коде самой формы - то получается все равно, что обратиться изнутри формы по её имени, только проще и короче.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Дмитрий(The_Prist) Щербаков,
Огромнейшее спасибо! Я узнал много нового  :D
Страницы: 1
Наверх