Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на Basic / VBA


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Basic/VBA

Выпуск № 372
от 14.09.2006, 03:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 200, Экспертов: 35
В номере:Вопросов: 2, Ответов: 6


Вопрос № 54700: Здравствуйте! Можно ли средствами VB 6.0 получить имя компьютера в сети? Спасибо....
Вопрос № 54720: VBA, Excel. Вызов процедуры. Второй раз сталкиваюсь с проблемой, но так и не понял, почему не работает и как справиться. Нужно сделать вызов процедуры, находящейся в другом проекте. Читая Help по VBA, я понимаю, что это до...

Вопрос № 54.700
Здравствуйте! Можно ли средствами VB 6.0 получить имя компьютера в сети?
Спасибо.
Отправлен: 08.09.2006, 09:05
Вопрос задал: GreenJeen (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: fsl
Здравствуйте, GreenJeen!
Средствами VB нет, но API дает
Вот функция

Declare Function GetUserName Lib "advapi32" Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long

GetUserName возвращает имя пользователя. Имя пользователя содержится в строке lpBuffer. Фукция также передает размер возвращаемой строки в переменную nSize. Функция возвращает 0 в случае ошибки, и значение,отличное от нуля в успешном случае

Параметры
lpBuffer
Строка,содержащая имя пользователя
nSize
Длина строки,передаваемой функции
Пример
Dim username As String ' имя пользователя
Dim slength As Long ' длина строки
Dim retval As Long ' возвращаемое значение

' отводим место для получения строки в буфере
username = Space(255)
slength = 255
' получаем имя пользователя
' slength сейчас является длиной возвращаемой строки
retval = GetUserName(username, slength)
' извлекаем информацию из буфера,отбрасывая Null
username = Left(username, slength - 1)

Debug.Print "Имя пользователя "; username
Ответ отправил: fsl (статус: 4-ый класс)
Ответ отправлен: 08.09.2006, 09:14
Оценка за ответ: 4
Комментарий оценки:
Все так, но мне нужно именно Сетевое имя, а не имя пользователя - т.е. с какого компьютера user стартовал

Отвечает: Денисов Сергей Иванович
Здравствуйте, GreenJeen!
Вот ссылка на пример: http://www.rashid4ever.narod.ru/myapps/network_master/Network_Master.zip
Ответ отправил: Денисов Сергей Иванович (статус: 1-ый класс)
Ответ отправлен: 08.09.2006, 10:49

Отвечает: Кокорич Вадим Леонидович
Здравствуйте, GreenJeen!

Создайте на форме меню с именем mnuData (имя компонента в проекте, надпись придумайте сами - например, "Показать имена") и в нем субменю mnuDataGetNames mnuDataExit. Добавьте на форму две текстовые метки (label) и два текстовых поля (text). Напоследок добавьте в проект модуль (обычный). Вставьте в процедуры обработки соответствующих событий приведенный в приложении код. В программе при выборе пункта меню mnuDataGetNames в текстовых полях отобразятся имена пользователя и сетевое имя компьютера.

Приложение:

---------
Труд сделал обезьяну человеком, а лень человека - программистом !

Ответ отправил: Кокорич Вадим Леонидович (статус: 6-ой класс)
Ответ отправлен: 08.09.2006, 14:35


Вопрос № 54.720
VBA, Excel. Вызов процедуры.

Второй раз сталкиваюсь с проблемой, но так и не понял, почему не работает и как справиться.

Нужно сделать вызов процедуры, находящейся в другом проекте.

Читая Help по VBA, я понимаю, что это должно быть возможно (хотя прямых инструкций не нашел). Довольно близкое пояснение в разделе Calling Procedures with the Same Name предлагает:

Sub Main()
[MyProject.vbp].[MyModule].Main
End Sub

Судя по всему должна быть возможность вызвать процедуру, находящуюся в другом проекте. Но никак не получается запустить. Говорит, что Object required во всех возможных вариантах. У кого-нибудь получалось? Если да, то как?
Отправлен: 08.09.2006, 12:25
Вопрос задал: Genyaa (статус: 7-ой класс)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: MrLexus
Здравствуйте, Genyaa!
Лично я делал вызов процедур VBA из проекта VB таким образом:

MyXL.Workbooks.Open (App.Path & "" & FilePath & "" & FileName)
MyXL.Windows(FileName).Visible = False
MyXL.Visible = True
MyXL.Run FileName & "!Интерфейс.Auto_Opend"

Т.е. вначале создаем обект экселя, открываем файл и запускаем на выполнение процедуру "Auto_Opend" из модуля "Интерфейс". Внимание! Восклицательный знак и кавычки обязательны. Ну и вместо переменной FileName подставьте свое имя файла.
Например:
Run "myBook.xls!Module1.Main"
В вашем случае можно упростить код, не создавая нового объекта Excel, а просто открыв нужный файл программно.
Удачи!!!
---------
Замысел без умысла - это вымысел!
Ответ отправил: MrLexus (статус: Академик)
Россия, Орловская обл.
Адрес: г. Ливны
ICQ: 8128110
----
Ответ отправлен: 08.09.2006, 13:38
Оценка за ответ: 5
Комментарий оценки:
Тоже вариант. Спасибо.

Отвечает: Hookest
Здравствуйте, Genyaa!
Для запуска макросов из другой книги используется
Application.Run("AnotherBook.xls!Macros1")
Ответ отправил: Hookest (статус: 1-ый класс)
Ответ отправлен: 08.09.2006, 13:59
Оценка за ответ: 5
Комментарий оценки:
Да, верно. Но Run по смылу работает значительно медленнее, чем если бы можно было бы обратиться к процедуре, как Call.

Отвечает: Макаренко Е.В.
Здравствуйте, Genyaa!
Насколько мне известно, VBA может подгружать функции из DLL.
В VS 2005 это делается примерно так (см. приложение, вырезка из хелпа).
В Вашем случае для простоты можно собрать модуль из общеупотребимых функций и подгружать его во все новые проекты.
Уложенные в модуле функции, имеющие статус "Public" будут доступны подмодулям всех листов.
К тому же исключается риск потери наработок в случае повреждения проекта-ресурса.
С уважением.

Приложение:

---------
осторожность, точность... и горит все синим пламенем! :))

Ответ отправил: Макаренко Е.В. (статус: 9-ый класс)
Ответ отправлен: 08.09.2006, 16:14


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.36 от 06.09.2006
Яндекс Rambler's Top100

В избранное