powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Вопрос!
25 сообщений из 28, страница 1 из 2
Вопрос!
    #32633637
Gotar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть модуль в VBA....

Надо как-нибудь его сделать в VBS, простой инсерт в VBS естественно не помогает,
вылезает множество ошибок синтаксиса... Из за того что модуль достаточно обьемный, то уже на первой странице я бросил это дело.

Посоветуйте как можно более простым методом компельнуть его в VBS.
...
Рейтинг: 0 / 0
Вопрос!
    #32633641
Gotar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да и еще, как можно запустить файл, хотя бы тот же модуль VBS от имени админа, при условии что я знаю пароль...
...
Рейтинг: 0 / 0
Вопрос!
    #32633662
raur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а что такое VBS?
...
Рейтинг: 0 / 0
Вопрос!
    #32633689
Ander Borisov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Visual Basic Script ... больш просто нечему.
...
Рейтинг: 0 / 0
Вопрос!
    #32634068
Processor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. В VBA раннее связывание заменить на позднее: это даст возможность проверить модуль под VBA-отладчиком.
2. После отладки из строк деклараций переменных удалить тип переменных (в VBS тип переменных - variant).
3. После деклараций глобальных переменных написать единственную строку, не обрамлённую Sub...End Sub:
Код: plaintext
Call Main
где Main (или другое имя) - имя главного модуля в VBA.
...
Рейтинг: 0 / 0
Вопрос!
    #32634287
Gotar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1.Можно не скромный вопрос что такое связывание...
2.Про переменные знаю
3. что именно писать? просто Sub & End Sub или еще добавить Call Main?


Как функции обьявлять?
...
Рейтинг: 0 / 0
Вопрос!
    #32634549
raur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Processor1. В VBA раннее связывание заменить на позднее: это даст возможность проверить модуль под VBA-отладчиком...


а что такое vba-отладчик? это типа кнопка "run with full compile"?
...
Рейтинг: 0 / 0
Вопрос!
    #32634557
raur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gotar1.Можно не скромный вопрос что такое связывание...


это способ посредством которого цепляются СОМ объекты, или я ошибаюсь?
...
Рейтинг: 0 / 0
Вопрос!
    #32634628
Gotar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
хы хы... блин меня интересует как работать с функциями через VBS ибо нужно обьявить функцию с использованием библиотеки. При запуске ругается на все! Тойсть как в VBA пишу - Public Declare Function TATATA Lib "sgdgfdg" as long
ну и мне пишут, что я даун 8) Не могу найти нигде как это делается, так же вопрос - как обьявить просто функцию... к примеру чтонть типа Function TATATA (Переменные) as long для внесения дополнительных параметров... тоже - ругается

В инете по VBS натыкаюсь только на VBS вирусы или на школьные пособия по VBS, так же не могу найти ни одной книги по VBS. На одном сайте видел такую инфу - VBS знает все функции(?) "В смысле библиотеки чтоль, или он их сам знает как подрубить, и не нада их указывать? "

Дело в том что надо писать загрузочный файл, а код самой проги написан под VBA, решено было конвертить его в VBS, но к сожалению VBA и VBS немного отличаются, и из за большого кол - ва функций в имеющемся макросе, возникли эти проблеммы.
...
Рейтинг: 0 / 0
Вопрос!
    #32634657
Processor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Программа быстрее отлаживается, если объявляется тип каждой переменной (в IDE к этому принуждает Option Explicit). Объявление типа (не-variant) требует включения в проект ссылок на соответствующие библиотеки (Tools-->References... в VBA). Последнее и есть "раннее связывание": компилятор проделывает рутинную часть работы по проверке соответствия типов переменных, а линкер настраивает код на вызов функций соответствующих модулей...
Текст VB-скрипта интерпретируется в run time и "наполняет" вариантные переменные соответствующими значениями: ByVal целыми, булевскими, вещественными, или ByRef строками, указателями и т.п. Тогда имя переменной, значимое для программиста, становится объектом, значимым для интерпретатора. Это и есть "позднее связывание":
Код: plaintext
Set FSO = CreateObject("Scripting.FileSystemObject")
3. В VBA каждая исполняемая строка кода находится в обрамлении декларации процедуры. VBS же - аналог .bat-файла DOS: это пакет команд командного языка соответствующей оболочки, среди которых как расширение этого языка есть и команда вызова другого пакета (Call).
VBScript не обязан содержать пакетов, обрамлённых Sub...End Sub, однако в целях последующего сопровождения (отладки) скрипта в IDE VBA текст отлаживаемого в IDE VBA модуля должен быть обрамлён.
Компромиссом и является скрипт, содержащий единственную команду CALL, вызывающую пакет команд, заключённых в оператор Sub...End Sub (внутри к-рого, естественно, могут быть Sub...End Sub и Function...End Function).
...
Рейтинг: 0 / 0
Вопрос!
    #32634697
Processor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To raur
Из VBA-отладчиков мне милее всего IDE Visual Basic for Excel.
Microsoft Script Debugger по определению не обладает всеми возможностями отладки, доступными в IDE Visual Basic.
...
Рейтинг: 0 / 0
Вопрос!
    #32634700
raur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Processor To raur
Из VBA-отладчиков мне милее всего IDE Visual Basic for Excel.
Microsoft Script Debugger по определению не обладает всеми возможностями отладки, доступными в IDE Visual Basic.

а можно поподробнее плиз
...
Рейтинг: 0 / 0
Вопрос!
    #32635316
Processor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
raurа что такое vba-отладчик? это типа кнопка "run with full compile"?
а можно поподробнее плиз
С методикой написания и пошаговой отладки кода в IDE VB ты ведь знаком (сужу по профилю).
Не въехал, о чём "поподробнее"...
...
Рейтинг: 0 / 0
Вопрос!
    #32635352
raur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Processor To raur
Из VBA-отладчиков мне милее всего IDE Visual Basic for Excel.
Microsoft Script Debugger по определению не обладает всеми возможностями отладки, доступными в IDE Visual Basic.

вот об этом, если можно
...
Рейтинг: 0 / 0
Вопрос!
    #32635361
raur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
возможно я просто не знаю всех определений... IDE VB - это что?
...
Рейтинг: 0 / 0
Вопрос!
    #32635538
Processor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IDE VB--> Integrated Development Environment for Visual Basic
MSDN Library Visual Studio 6.0The working environment in Visual Basic is often referred to as the integrated development environment or IDE because it integrates many different functions such as design, editing, compiling, and debugging within a common environment. In most traditional development tools, each of these functions would operate as a separate program, each with its own interface. In this section, the following topics are discussed:

Starting the Visual Basic IDE Getting up and running.

Integrated Development Environment Elements An introduction to the various parts of the IDE.

Environment Options Configuring Visual Basic to your personal preferences

Здесь можно узнать многое о Microsoft Script Debugger
"ПО ОПРЕДЕЛЕНИЮ": т.к. VBS поддерживает только позднее связывание, то и проверка синтаксиса вызова методов/свойств объекта возможна во время выполнения, в то время как VBA "знает" свойства и методы объекта во время разработки.
...
Рейтинг: 0 / 0
Вопрос!
    #32635583
raur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо
почитаю
...
Рейтинг: 0 / 0
Вопрос!
    #32635772
Gotar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это все здорово и потрясающи, а вот например если реально есть такой макрос на VBA, то что с ним сделать чтоб он на VBS пахал :

Public Type PRINTER_INFO_2
pServerName As Long 'String
pPrinterName As Long 'String
pShareName As Long 'String
pPortName As Long 'String
pDriverName As Long 'String
pComment As Long 'String
pLocation As Long 'String
pDevMode As Long ' DEVMODE
pSepFile As Long 'String
pPrintProcessor As Long 'String
pDatatype As Long 'String
pParameters As Long 'String
pSecurityDescriptor As Long 'SECURITY_DESCRIPTOR
Attributes As Long
Priority As Long
DefaultPriority As Long
StartTime As Long
UntilTime As Long
Status As Long
cJobs As Long
AveragePPM As Long
End Type

Public Type PRINTER_DEFAULTS
pDatatype As Long 'String
pDevMode As Long 'DEVMODE
DesiredAccess As Long
End Type


Public Declare Function AddPrinter Lib "winspool.drv" Alias "AddPrinterA" (ByVal pName As String, ByVal Level As Long, pPrinter As PRINTER_INFO_2) As Long
Public Declare Function ClosePrinter Lib "winspool.drv" (ByVal hPrinter As Long) As Long
Public Declare Function OpenPrinter Lib "winspool.drv" Alias "OpenPrinterA" (ByVal pPrinterName As String, phPrinter As Long, pDefault As PRINTER_DEFAULTS) As Long
Public Declare Function DeletePrinter Lib "winspool.drv" (ByVal hPrinter As Long) As Long

Public Declare Function lstrcpy Lib "kernel32" Alias "lstrcpyA" (ByVal lpString1 As Long, ByVal lpString2 As String) As Long

Public Const STANDARD_RIGHTS_REQUIRED = &HF0000
Public Const PRINTER_ACCESS_ADMINISTER = &H4
Public Const PRINTER_ACCESS_USE = &H8
Public Const PRINTER_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED Or PRINTER_ACCESS_ADMINISTER Or PRINTER_ACCESS_USE)



Function CreatePrinter(strServer As String, _
strPrinter As String, _
strPort As String, _
strDriver As String, _
strPrintProcessor As String) As Boolean

Dim hPrinter As Long
Dim pi2 As PRINTER_INFO_2
Dim bBuffer(1000) As Byte
Dim i



For i = 0 To UBound(bBuffer)
bBuffer(i) = 0
Next


pi2.pPrinterName = AddString(strPrinter, bBuffer)
pi2.pPortName = AddString(strPort, bBuffer)
pi2.pDriverName = AddString(strDriver, bBuffer)
pi2.pPrintProcessor = AddString(strPrintProcessor, bBuffer)


pi2.Attributes = 0
pi2.AveragePPM = 0
pi2.cJobs = 0
pi2.DefaultPriority = 0
pi2.pComment = 0
pi2.pDatatype = 0
pi2.pDevMode = 0
pi2.pLocation = 0
pi2.pParameters = 0
pi2.Priority = 0
pi2.pSecurityDescriptor = 0
pi2.pSepFile = 0
pi2.pServerName = 0
pi2.pShareName = 0
pi2.StartTime = 0
pi2.Status = 0
pi2.UntilTime = 0



hPrinter = AddPrinter(strServer, 2, pi2)
If hPrinter <> 0 Then
ClosePrinter (hPrinter)
CreatePrinter = True
Else
CreatePrinter = False
End If
End Function

Private Function AddString(strString As String, ByRef bBuffer() As Byte) As Long


Dim lngEnd As Long

lngEnd = UBound(bBuffer) + 1
Do
lngEnd = lngEnd - 1
Loop While (bBuffer(lngEnd) = 0 And lngEnd > 0)
lngEnd = lngEnd + 2

lstrcpy VarPtr(bBuffer(0)) + lngEnd, strString

AddString = VarPtr(bBuffer(0)) + lngEnd
End Function

Function RemovePrinter(strPrinter As String)
Dim hPrinter As Long
Dim pd As PRINTER_DEFAULTS


pd.pDatatype = 0
pd.pDevMode = 0
pd.DesiredAccess = PRINTER_ALL_ACCESS


If OpenPrinter(strPrinter, hPrinter, pd) = 0 Then
RemovePrinter = False
Exit Function
End If



If DeletePrinter(hPrinter) = 0 Then
RemovePrinter = False
Exit Function
End If


ClosePrinter (hPrinter)

RemovePrinter = True
End Function



Sub main()




MsgBox "Printer Creation: " & CreatePrinter("", "", "", "", "WinPrint")



' MsgBox "Printer Deletion: " & RemovePrinter("New Printer")

End Sub


Про стринги лонги и тд итп я знаю... Ошибки которые выдаются - начиная с первой строчки: ругается на TYPE, ругается на все Declare Function, также на константу PRINTER_ACSES, ну и еще много мелких прелестей... Править не получается, меняется структура программы очень сильно, а этого бы не хотелось.
...
Рейтинг: 0 / 0
Вопрос!
    #32635839
Processor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gotarесли реально есть такой макрос на VBA, то что с ним сделать чтоб он на VBS пахал
1. Перейти с IDE VBA на IDE VB6: там без напряга создаётся ActiveX DLL
(библиотека, содержащая реализацию класса и интерфейс класса).
В Вашем случае - это класс MySuperPrinter с (минимум) двумя методами: CreatePrinter и RemovePrinter
2. Зарегистрировать эту DLL в системе, чтобы в run-time из реестра можно было найти имя объекта и содержащую его библиотеку (типа Scripting.FileSystemObject).
3. Написать скрипт:
Код: plaintext
1.
2.
3.
4.
5.
Dim NewPrn
Set NewPrn=CreateObject("MyDLL.MySuperPrinter")
NewPrn.CreatePrinter
....
NewPrn.RemovePrinter
- и выполнить его.

А ругаться будет уже не CScript.exe, а компилятор VB6 ;-)
...
Рейтинг: 0 / 0
Вопрос!
    #32636231
Gotar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Processor Gotarесли реально есть такой макрос на VBA, то что с ним сделать чтоб он на VBS пахал
1. Перейти с IDE VBA на IDE VB6: там без напряга создаётся ActiveX DLL
(библиотека, содержащая реализацию класса и интерфейс класса).
В Вашем случае - это класс MySuperPrinter с (минимум) двумя методами: CreatePrinter и RemovePrinter
2. Зарегистрировать эту DLL в системе, чтобы в run-time из реестра можно было найти имя объекта и содержащую его библиотеку (типа Scripting.FileSystemObject).
3. Написать скрипт:
Код: plaintext
1.
2.
3.
4.
5.
Dim NewPrn
Set NewPrn=CreateObject("MyDLL.MySuperPrinter")
NewPrn.CreatePrinter
....
NewPrn.RemovePrinter
- и выполнить его.

А ругаться будет уже не CScript.exe, а компилятор VB6 ;-)

1. В смысле работать в среде VB6? (У меня тока VBA есть )
2. Немного не удобно, так как этот макрос должен будет запускаться при обращении компьютера к серверу (при подключении к сети) (другими словами он будет прикреплен к BATнику на сервере), что бы облегчить установку этого принтера на большое количество машин. (ну не в ручную же ставить на более чем 100 компов :) )
Данный метод означает что придется писать еще дополнительный скрипт, регестрирующий эту библиотеку, это не желательно.
3. Этот скрипт будет в VBS я так понимаю, и будет обращаться к созданной нами библиотеке. Правильно?

(Кстати там будет только установка принтера)

Возможно существует другое решение данной задачи, но реально она сделанна в VBA, и планировалось: распространить вордовский файл с макросом и при его открытии, макрос создания принтера будет запускаться,
а затем после создания принтера - документ с макросом самоудаляться(так нада). При данной схеме была проблемма, что на машины, куда будет распространнен этот макрос, работают под учетной записью без прав администратора, следовательно, макрос будет работать только под администратором (Пользователи не имеют доступа к учетной записи админа).
Была идея как-нибудь сделать запуск этого макроса с правами администратора, или написать другой макрос, который бы открывал доковский файл с макросом создания принтера с правами администратора. Но как сделать это технически не имею ни малейшего представления (такой информации найти не удалось). Вследствии всех этих радостей было решено написать этот макрос в VBS и добавить его в загрузку сетевых параметров. (Если можно это сделать с VBA макросом то как?) Но переписать макрос в VBS не получается.
...
Рейтинг: 0 / 0
Вопрос!
    #32636319
Gotar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть еще один вариант, но тоже не знаю как его реализовать.

В VBS написать скрипт, запускающий док файл от имени администратора.

как в VBS можно выполнить данную задачу.
...
Рейтинг: 0 / 0
Вопрос!
    #32636489
Gotar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кое что нашел но всеравно не ясно...

Можно запустить файл от имени администратора примерно так:

RunAs service

С:\>runas /?
Применение RUNAS:

RUNAS [/profile] [/env] [/netonly] /user:<имя_пользователя> program

/profile загрузка профиля пользователя
/env использование текущих параметров среды вместо
пользовательских.
/netonly использование, если учетные данные предназначены только
для удаленного доступа.
/user <имя пользователя> д.б. в виде USER@DOMAIN или DOMAIN\USER
program командная строка для EXE. См. примеры ниже

Примеры:
> runas /profile /user:mymachine\administrator cmd
> runas /profile /env /user:mydomain\admin "mmc %windir%\system32\dsa.msc"
> runas /env /user:user@domain.microsoft.com "notepad \"my file.txt\""

Примечание: вводите пароль пользователя только тогда, когда он запрашивается.

а как туда пароль вфигачить, ибо таким методом она спрашивает пароль, и как эту командную строку можно в VBS зафигачить?
...
Рейтинг: 0 / 0
Вопрос!
    #32636505
Flare
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не мешает почитать мануалы, что такое VBA и VBS.
Разница примерно такая же как между Java и Javascript.
Для каждого типа задач - свой инструмент. А тут в некоторых постингах, простите, просто глупости.
...
Рейтинг: 0 / 0
Вопрос!
    #32636576
Processor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Терзают меня смутные сомненья:
Возможно существует другое решение данной задачи
И вот почему.
1. Т.к. есть слова "сеть, пользователи, админы, права, VBS",
следует предположить, что сеть работает под W2k/W2003.
В такой сети расшареный принтер виден в Проводнике
при наборе UNC-имени компьютера в строке адреса.
2. Для его подключения достаточно щёлкнуть по имени принтера
правой кнопкой мыши и выбрать пункт "Подключиться..."
Права администратора не требуются.
3. Чтобы облегчить установку этого принтера на большое количество машин
(ну не вручную же ставить на более чем 100 компов :) ),
макрос должен будет запускаться при подключении к сети (logon).
Единожды подключенный, он остаётся зарегистрированным "на постоянно".

Чем такая установка принтера Вас не устраивает?
...
Рейтинг: 0 / 0
Вопрос!
    #32636683
Gotar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дело в том, что это не печатный принтер... это принтер аля AcrobatPDFWriter, и он нужен для той же цели, единственное отличие от AcrobatPDFWriter в том, что он используется моим макросом для создания PDF файлов (не через ACROBATDISTILLER). Для работы макроса конвертатора нужен принтер, который печатает в файл, и запуск печати - тоже осуществляется програмно:

Application.Printout FileName:="", Range:=wdPrintAllDocument, Item:= _
wdPrintDocumentContent, Copies:=1, Pages:="", PageType:=wdPrintAllPages, _ Сollate:=True, Background:=False, printtofile:=True, PrintZoomColumn:=0, _
PrintZoomRow:=0, PrintZoomPaperWidth:=0, PrintZoomPaperHeight:=0, _
OutputFileName:="" + fName + "" + ".ps"

дальше запускается непосредственно программа конвертатор.

Так вот для работы проги конвертатора, нужен принтер, который надо установить програмно, без привлечения юзеров. Это можно сделать с сервера, прикрепив к NetLogOn, туда и будет добавляться скрипт установки принтера (и насколько я понимаю, при загрузке компа и подключению к сети будет устанавливаться принтер. НО! Так как юзер входит под своим профилем (не админском) Винд будет блочить попытку установить принтер.
Проблеммы в том, что во первых скрипт создания принтера есть тока на базе VBA, и в VBS я немогу его переписать, во вторых его нада установить под правами админа чтоб Винд не ругался.

Уважаемый FLARE, если не сложно дайте ссылку на мануал VBS, ни как не могу найти толковый мануал, и я согласен что возможно в некоторых постах есть глупости, но простите пожалуйсто, я только учусь програмировать, и первый раз решаю подобную задачу в рамках корпоративной сети, ведь все мы когдато учились 8)
...
Рейтинг: 0 / 0
25 сообщений из 28, страница 1 из 2
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Вопрос!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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