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

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

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


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


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


это способ посредством которого цепляются СОМ объекты, или я ошибаюсь?
...
Рейтинг: 0 / 0
04.08.2004, 11:28
    #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
04.08.2004, 11:38
    #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
04.08.2004, 11:51
    #32634697
Processor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос!
To raur
Из VBA-отладчиков мне милее всего IDE Visual Basic for Excel.
Microsoft Script Debugger по определению не обладает всеми возможностями отладки, доступными в IDE Visual Basic.
...
Рейтинг: 0 / 0
04.08.2004, 11:53
    #32634700
raur
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос!
Processor To raur
Из VBA-отладчиков мне милее всего IDE Visual Basic for Excel.
Microsoft Script Debugger по определению не обладает всеми возможностями отладки, доступными в IDE Visual Basic.

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

вот об этом, если можно
...
Рейтинг: 0 / 0
04.08.2004, 16:14
    #32635361
raur
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос!
возможно я просто не знаю всех определений... IDE VB - это что?
...
Рейтинг: 0 / 0
04.08.2004, 17:12
    #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
04.08.2004, 17:29
    #32635583
raur
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос!
спасибо
почитаю
...
Рейтинг: 0 / 0
04.08.2004, 18:59
    #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
04.08.2004, 20:08
    #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
05.08.2004, 09:45
    #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
05.08.2004, 10:34
    #32636319
Gotar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос!
Есть еще один вариант, но тоже не знаю как его реализовать.

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

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

Чем такая установка принтера Вас не устраивает?
...
Рейтинг: 0 / 0
05.08.2004, 12:59
    #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
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Вопрос! / 25 сообщений из 28, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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