Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Переменная из другого модуля (доступ) / 21 сообщений из 21, страница 1 из 1
20.01.2005, 11:50:31
    #32874194
NikP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переменная из другого модуля (доступ)
как ее получить? прописываю Public, а она не возвращается
Заранее извиняюсь за глупый вопрос.
...
Рейтинг: 0 / 0
20.01.2005, 12:14:48
    #32874277
Alexey Kudinov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переменная из другого модуля (доступ)
NikPкак ее получить? прописываю Public, а она не возвращается
Заранее извиняюсь за глупый вопрос. Покажите декларацию переменной и как вы к ней обращаетесь из другого модуля.

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

Set var = MainModile.Factory

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

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

Можно использовать эту переменную: Mod1.ItNumber, если просто ItNumber не работает.
Все должно работать.
...
Рейтинг: 0 / 0
20.01.2005, 15:26:12
    #32875048
NikP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переменная из другого модуля (доступ)
А если он в другой надстройке(файле)?
как писать?
надстройка грузится автоматом.
...
Рейтинг: 0 / 0
20.01.2005, 15:37:26
    #32875093
NikP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переменная из другого модуля (доступ)
Пишу
Код: plaintext
MyKg = MyMacros.My.ItNumber
ошибка 424
Object required
...
Рейтинг: 0 / 0
20.01.2005, 16:03:03
    #32875212
Андрей Il
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переменная из другого модуля (доступ)
Object required возникает, если объект не найден, не определен или не объявлен.
Пришли конкретный пример.
...
Рейтинг: 0 / 0
20.01.2005, 16:19:57
    #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
20.01.2005, 16:37:54
    #32875359
Андрей Il
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переменная из другого модуля (доступ)
Я комментирую некоторые строки, ссылающиеся на объекты.
Добавляю после mykg = ItNumber строку MsgBox mykg .
Далее:
Private Sub Command1_Click()
MyNumberFormat (1234)
TBKg 1, 1, 1, 1
End Sub


В результате выводит "1 234".
Может я чего не понял?
...
Рейтинг: 0 / 0
20.01.2005, 16:53:32
    #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
20.01.2005, 17:32:34
    #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
20.01.2005, 17:44:42
    #32875595
NikP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переменная из другого модуля (доступ)
давай до завтра
пора с работы уходить да и башка под конец дня уже не варит
...
Рейтинг: 0 / 0
21.01.2005, 09:18:24
    #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
21.01.2005, 11:47:48
    #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
21.01.2005, 14:35:25
    #32877365
NikP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переменная из другого модуля (доступ)
что-то я до конца не догоняю
Можешь прямо в моем коде указать где чего править?
...
Рейтинг: 0 / 0
21.01.2005, 14:44:12
    #32877400
Андрей Il
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переменная из другого модуля (доступ)
Пришли мне конкретные файлы с кодом и файлы, на которые есть ссылки (модули и т.д.)
...
Рейтинг: 0 / 0
21.01.2005, 14:48:56
    #32877410
NikP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переменная из другого модуля (доступ)
на мыло пойдет?
...
Рейтинг: 0 / 0
21.01.2005, 14:52:05
    #32877418
Андрей Il
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переменная из другого модуля (доступ)
Да
...
Рейтинг: 0 / 0
21.01.2005, 15:31:56
    #32877563
NikP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переменная из другого модуля (доступ)
Отправил
...
Рейтинг: 0 / 0
21.01.2005, 20:21:28
    #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
24.01.2005, 09:26:15
    #32879243
NikP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переменная из другого модуля (доступ)
спасибо все работает!
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Переменная из другого модуля (доступ) / 21 сообщений из 21, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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