Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS Access > получить в переменную название формы


Автор: Dmitriy9 1.7.2013, 15:21
Здравствуйте, подскажите как мне получить при запуске формы ее название в переменную для последующей работы с этой переменной (в VBA только разбираюсь!)


Код

Private Sub Form_Load()
M Me
End Sub
 так пытаюсь обратиться к функции


Код

Public Function M()
Dim MyForm As Form
For Each MyForm In Forms
My = MyForm.Name
Next MyForm
End Function
  эта функция находится в общем модуле

Подскажите что не так делаю и как получить переменную, что бы потом ее использовать в любой части проекта 

Автор: Михайло 1.7.2013, 20:43
Для внутренней переменной достаточно написать так:

Dim s As string

Private Sub Form_Load()
  s=Me.Name
End Sub

Если нужна глобальная переменная, то на закладке "Модули" окна "база данных" создайте модуль с любым именем и таким содержимым:

Public s As string

Автор: SkCom 1.7.2013, 21:05
Назначить глобальную открытую переменную на уровне модуля.

Код

Public frmName As String

Private Sub Form_Load()
frmName = Form_Name(Me)
End Sub


Создать общедоступную Функцию.
Код

Public Functuion Form_Name(ByVal frm As Form)
Return frm.Name
End Function



Этот ответ добавлен с нового Винграда - http://ru.vingrad.com//object-id51d174e86ccc19f524000002#findElement_E7045_51d1c4d36ccc198a5400a826_0

Автор: Akina 2.7.2013, 07:16
Цитата(SkCom @  1.7.2013,  22:05 Найти цитируемый пост)
Назначить глобальную открытую переменную на уровне модуля.

Ага... и определил её в модуле класса... молодец, блин!

Цитата(SkCom @  1.7.2013,  22:05 Найти цитируемый пост)
Создать общедоступную Функцию.

Ну тут ты вообще отличился! Одна строка в теле функции - зато какая!

Не лезь ты туда, где НИЧЕГО не смыслишь...

Добавлено через 1 минуту и 23 секунды
Dmitriy9, для определения переменных уровня проекта создайте ОТДЕЛЬНЫЙ модуль. 

Автор: Dmitriy9 2.7.2013, 07:34

SkCom, Сделал все как вы сказали
 
Код

Public Functuion Form_Name(ByVal frm As Form)
 Return frm.Name
End Function
Выдает ошибку в строке  Return frm.Name 

Автор: Akina 2.7.2013, 07:46
Dmitriy9, не надо бездумно переписывать всякий бред. 

Автор: Dmitriy9 2.7.2013, 07:49
я в vba разбираюсь только , по этому и пробую что подсказывают, так сказать по принципу проб и ошибок

Автор: Akina 2.7.2013, 07:54
Dmitriy9, не надо бездумно переписывать всякий бред.  

Вы посмотрели, где и для чего используется в VBA ключевое слово Return? 

Автор: Dmitriy9 2.7.2013, 07:56
Это находится в общем модуле, переменная и функция
Код

Public frmName 

Public Function Form_Name(ByVal frm As Form)
For Each MyForm In Forms
frmName = MyForm.Name
Next MyForm
End Function


Так обращаюсь к функции
Код

Private Sub Form_Load()
frmName = Form_Name(Me)
End Sub
 в переменную выдает пустое значение

Автор: Akina 2.7.2013, 08:29
Цитата(Dmitriy9 @  2.7.2013,  08:56 Найти цитируемый пост)
Это находится в общем модуле, переменная и функция

1) Русским по белому ж говорил - "для определения переменных уровня проекта создайте ОТДЕЛЬНЫЙ модуль".
2) Почему не определён тип переменной?
3) Что, по твоему мнению, делает эта функция? почему именно это и как именно? ПОДРОБНО!

Цитата(Dmitriy9 @  2.7.2013,  08:56 Найти цитируемый пост)
Так обращаюсь к функции

А вот сфига бы ты решил, что на момент события Form_Load форма уже Loaded, а? ну надо же хоть немного головой-то думать?

Автор: Dmitriy9 2.7.2013, 09:21
Цитата
1) Русским по белому ж говорил - "для определения переменных уровня проекта создайте ОТДЕЛЬНЫЙ модуль".
 я и делаю это в отдельном модуле , просто назвал его общий
Цитата
2) Почему не определён тип переменной?
Код

Public frmName As String
 я и определяя и не определяя пробовал делать
Цитата
3) Что, по твоему мнению, делает эта функция? почему именно это и как именно? ПОДРОБНО!
 Функцию я нашел в интернете, она вроде возвращает название текущей формы....
Цитата
ПОДРОБНО!
 если бы я знал как правильно писать функции и все остальное, я бы не задавал здесь вопросов,...так как я на начальном этапе изучения VBA то я не знаю всех тонкостей языка.  По этому и прошу подсказок, что бы исправляться на начальном этапе

Цитата

А вот сфига бы ты решил, что на момент события Form_Load форма уже Loaded, а? ну надо же хоть немного головой-то думать?
 Это я решил потому что, вроде как форма нчала загружаться, и в этот момент я могу получить ее название. И если это не так ,то не обязательно было писать то что вы написали, лучше бы было если бы вы подсказали в каком событиии это лучше делать, я бы учел это на будущее. Я прошу помощи в объяснение, а не  критики

Автор: Akina 2.7.2013, 09:43
Цитата(Dmitriy9 @  2.7.2013,  10:21 Найти цитируемый пост)
я и делаю это в отдельном модуле , просто назвал его общий

Кто пишет - 
Цитата(Dmitriy9 @  2.7.2013,  08:56 Найти цитируемый пост)
Это находится в общем модуле, переменная и функция

Не жадничайте на этапе разработки. Потом, когда всё зашуршит, соберёте в кучу.

Цитата(Dmitriy9 @  2.7.2013,  10:21 Найти цитируемый пост)
Функцию я нашел в интернете, она вроде возвращает название текущей формы....

Нет.
Функция перебирает все открытые формы (причём в случайном по большому счёту порядке - хотя обычно получается, что в порядке загрузки), и запоминает имя каждой очередной формы (забывая при этом имя только что полученной предыдущей). Индус писАл...

Цитата(Dmitriy9 @  2.7.2013,  10:21 Найти цитируемый пост)
Я прошу помощи в объяснение, а не  критики 

А я вот хочу видеть самостоятельную работу. Попытки понять, что делает код, который скопипастен ХЗ откуда. Имею право, верно? а что вижу? скопировал, запустил, не работает, а-а-а-а!!! Описания функций - не смотрел, логику работы - не разбирал...

Помогать можно тому, кто работает. А кто сидит и  ждёт ответа - на того можно только лить ушаты критики и прочих субстанций.

Автор: Dmitriy9 3.7.2013, 08:01
А вообще существует ли вообще эта функция что бы узнать имя формы, или я зря время трачу? После прочтения кучи статей и боли в глазах я начал сомневаться в ее существовании.

Автор: Akina 3.7.2013, 08:08
У любого объекта есть куча свойств - в т.ч. и свойство Name.
А насчёт функции - вряд ли.

Автор: bopoha 4.7.2013, 00:09
Dmitriy9, в Access есть такая штука, как CodeContextObject, при помощи которого можно узнать в рамках какого объекта выполняется данный метод/функция/процедура:
Код

...
    Dim frm     As Form
    Dim obj     As Object
    
    Set obj = CodeContextObject
    If obj Is Nothing Then Exit Function
    If Not TypeName(obj) Like "Form*" Then Exit Function
    
    Set frm = obj

    ... = frm.Name
....


Мне кажется, что если бы вы начали с конца, т.е. зачем это нужно, было бы проще.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)