powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Переменная из другого модуля (доступ)
21 сообщений из 21, страница 1 из 1
Переменная из другого модуля (доступ)
    #32874194
NikP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как ее получить? прописываю Public, а она не возвращается
Заранее извиняюсь за глупый вопрос.
...
Рейтинг: 0 / 0
Переменная из другого модуля (доступ)
    #32874277
Alexey Kudinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NikPкак ее получить? прописываю Public, а она не возвращается
Заранее извиняюсь за глупый вопрос. Покажите декларацию переменной и как вы к ней обращаетесь из другого модуля.

Пример обращения

Set var = MainModile.Factory

MainModile - имя модуля
Factory - имя Public переменной в модуле MainModile

MainModile можно опустить
...
Рейтинг: 0 / 0
Переменная из другого модуля (доступ)
    #32874296
NikP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В модуле из которого ее беру
Код: plaintext
Public ItNumber As String
в модуле в котором хочу ее получить
Код: plaintext
1.
2.
NumFormat = Application.Run("MyMacros.xla!MyNumberFormat", Kg)
MyKg = ItNumber
...
Рейтинг: 0 / 0
Переменная из другого модуля (доступ)
    #32874903
Андрей Il
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если есть модуль: Mod1
В нем объявлена переменная: Public ItNumber As String .

Можно использовать эту переменную: Mod1.ItNumber, если просто ItNumber не работает.
Все должно работать.
...
Рейтинг: 0 / 0
Переменная из другого модуля (доступ)
    #32875048
NikP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если он в другой надстройке(файле)?
как писать?
надстройка грузится автоматом.
...
Рейтинг: 0 / 0
Переменная из другого модуля (доступ)
    #32875093
NikP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пишу
Код: plaintext
MyKg = MyMacros.My.ItNumber
ошибка 424
Object required
...
Рейтинг: 0 / 0
Переменная из другого модуля (доступ)
    #32875212
Андрей Il
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Object required возникает, если объект не найден, не определен или не объявлен.
Пришли конкретный пример.
...
Рейтинг: 0 / 0
Переменная из другого модуля (доступ)
    #32875290
NikP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть две надстройки MyMacros и WorkMacros(обе подгружаются в файл автоматом)
MyMacros (Модуль My)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
Public ItNumber As String
Public Sub MyNumberFormat(MyNumber)

    If MyNumber >  0  And Len(MyNumber) >  3  Or MyNumber <  0  And Len(MyNumber) >  4  Then
        If MyNumber >  0  Then
            TNumber = Int(MyNumber /  1000 ) ' тысячи
            SNumber = MyNumber - TNumber *  1000  ' Сотни
        Else:
            TNumber = -Int(-MyNumber /  1000 ) ' тысячи
            SNumber = -(MyNumber - TNumber *  1000 ) ' Сотни
        End If
        If SNumber >  99  Then
            ItNumber = TNumber & " " & SNumber ' Итог
        Else:
            If SNumber >  9  Then
                ItNumber = TNumber & " 0" & SNumber ' Итог
            Else:
                ItNumber = TNumber & " 00" & SNumber ' Итог
            End If
        End If
    Else:
        ItNumber = MyNumber
    End If
    
End Sub
WorkMacros (Модуль Map)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
Public Sub TBKg(TT1_5, TT1_6, TT2_1, TT2_2)

    Delta = TT2_1 - TT2_2
    Kg = CLng(TT2_1)
        If Delta <> Nill Then
            Delta1 = CLng(Delta)
        Else:
            Delta1 =  0 
        End If
    ActiveSheet.Shapes.AddLabel(msoTextOrientationHorizontal, TT1_5, TT1_6,  0 #,  0 #).Select
    Selection.ShapeRange( 1 ).TextFrame.AutoSize = msoTrue
' ------------------------- Разделители разрядов ---------------------
    NumFormat = Application.Run("MyMacros.xla!MyNumberFormat", Kg)
    MyKg = ???ItNumber '                                                               ???
    NumFormat = Application.Run("MyMacros.xla!MyNumberFormat", Delta1)
    MyDelta = ???ItNumber '                                                            ???
'-------------------------------- Вставка данных -------------------------
    LText1 = "тоннаж "
    LText2 = "отклон. "
    SumLText = Len(LText1) + Len(MyKg) + Len(LText2) +  2 
        If MyDelta <>  0  Then
            Selection.Characters.Text = LText1 & MyKg & Chr( 10 ) & LText2 & MyDelta
        Else:
            Selection.Characters.Text = LText1 & MyKg
        End If
    If Delta1 <  0  Then Selection.Characters(Start:=SumLText, Length:= 10 ).Font.ColorIndex =  3 
    Selection.ShapeRange.Fill.Visible = msoTrue
    Selection.ShapeRange.Fill.ForeColor.SchemeColor =  65 
    
End Sub
...
Рейтинг: 0 / 0
Переменная из другого модуля (доступ)
    #32875359
Андрей Il
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я комментирую некоторые строки, ссылающиеся на объекты.
Добавляю после mykg = ItNumber строку MsgBox mykg .
Далее:
Private Sub Command1_Click()
MyNumberFormat (1234)
TBKg 1, 1, 1, 1
End Sub


В результате выводит "1 234".
Может я чего не понял?
...
Рейтинг: 0 / 0
Переменная из другого модуля (доступ)
    #32875435
NikP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей IlЯ комментирую некоторые строки, ссылающиеся на объекты.
Добавляю после mykg = ItNumber строку MsgBox mykg .
Далее:
Private Sub Command1_Click()
MyNumberFormat (1234)
TBKg 1, 1, 1, 1
End Sub


В результате выводит "1 234".
Может я чего не понял?
MyNumberFormat существует для форматирования чисел(разделитель разрядов)
дело в том, что число находится в надписи, а там нет форматирования приходится извращаться.
только я не понял что такое TBKg 1, 1, 1, 1?
...
Рейтинг: 0 / 0
Переменная из другого модуля (доступ)
    #32875552
Андрей Il
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В модуле Map есть процедура TBKg:

Public Sub TBKg(TT1_5, TT1_6, TT2_1, TT2_2)
...
End Sub


4 параметра.

Сначала процедура MyNumberFormat:
MyNumberFormat (1234) 'присваивает ItNumber значение "1 234"

TBKg 1, 1, 1, 1 'Выполняем вышеуказанную процедуру, где и выполняется mykg = ItNumber
...
Рейтинг: 0 / 0
Переменная из другого модуля (доступ)
    #32875595
NikP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
давай до завтра
пора с работы уходить да и башка под конец дня уже не варит
...
Рейтинг: 0 / 0
Переменная из другого модуля (доступ)
    #32876194
NikP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей IlВ модуле Map есть процедура TBKg:

Public Sub TBKg(TT1_5, TT1_6, TT2_1, TT2_2)
...
End Sub


4 параметра.

Сначала процедура MyNumberFormat:
MyNumberFormat (1234) 'присваивает ItNumber значение "1 234"

TBKg 1, 1, 1, 1 'Выполняем вышеуказанную процедуру, где и выполняется mykg = ItNumber
запускается процедура TBKg (параметры в ней поставь лучше 1, 1, 8000, 9000)
в нутри себя она запускает MyNumberFormat
Код: plaintext
1.
NumFormat = Application.Run("MyMacros.xla!MyNumberFormat", Kg)
Kg это и есть параметр MyNumber, после того как MyNumberFormat выполнится он должен вернуть значение ItNumber обратно в TBKg
Результат: Рисуется надпись(Поле1), а в нем
тоннаж 8 000
отклон. -1 000
...
Рейтинг: 0 / 0
Переменная из другого модуля (доступ)
    #32876687
Андрей Il
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В модуле Map:

1. Добавляем:
Public MyKg, MyDelta As Long
2. У меня модули в Excel, поэтому код немного меняется, но смысл тот же:

' ------------------------- Разделители разрядов ---------------------
MyNumberFormat kg
MyKg = ItNumber
MyNumberFormat delta1
MyDelta = ItNumber
'-------------------------------- Вставка данных -------------------------


В коде Лист1 пишем:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
TBKg 1, 1, 8000, 9000
MsgBox MyKg
MsgBox MyDelta
End Sub


В результате создается надпись:
тоннаж 8 000
отклон. -1000

и выдается 2 значения: 8000 и -1000.
...
Рейтинг: 0 / 0
Переменная из другого модуля (доступ)
    #32877365
NikP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что-то я до конца не догоняю
Можешь прямо в моем коде указать где чего править?
...
Рейтинг: 0 / 0
Переменная из другого модуля (доступ)
    #32877400
Андрей Il
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пришли мне конкретные файлы с кодом и файлы, на которые есть ссылки (модули и т.д.)
...
Рейтинг: 0 / 0
Переменная из другого модуля (доступ)
    #32877410
NikP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
на мыло пойдет?
...
Рейтинг: 0 / 0
Переменная из другого модуля (доступ)
    #32877418
Андрей Il
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да
...
Рейтинг: 0 / 0
Переменная из другого модуля (доступ)
    #32877563
NikP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Отправил
...
Рейтинг: 0 / 0
Переменная из другого модуля (доступ)
    #32878150
Андрей Il
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В модуле My:
1. Можно убрать объявление ItNumber вообще.
'Public ItNumber as String
2. Используй функцию вместо процедуры.
Public Function MyNumberFormat(MyNumber) As String 'а не Public Sub MyNumberFormat(MyNumber)
3. Перед End Function добавь еще строку:
MyNumberFormat = ItNumber

В модуле Map:
1. Присваивай значение NumFormat, а не ItNumber:
NumFormat = Application.Run("MyMacros.xla!MyNumberFormat", Kg)
MyKg = NumFormat
' а не MyKg =ItNumber
NumFormat = Application.Run("MyMacros.xla!MyNumberFormat", Delta1)
MyDelta = NumFormat
' а не MyDelta =ItNumber
'можно сократить до 2 строк

В макросе WorkMacros, что ты мне выслал, удали модуль Map1 .
У меня все работает.
...
Рейтинг: 0 / 0
Переменная из другого модуля (доступ)
    #32879243
NikP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо все работает!
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Переменная из другого модуля (доступ)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]