|
Вопрос!
|
|||
---|---|---|---|
#18+
Есть модуль в VBA.... Надо как-нибудь его сделать в VBS, простой инсерт в VBS естественно не помогает, вылезает множество ошибок синтаксиса... Из за того что модуль достаточно обьемный, то уже на первой странице я бросил это дело. Посоветуйте как можно более простым методом компельнуть его в VBS. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2004, 15:42 |
|
Вопрос!
|
|||
---|---|---|---|
#18+
Да и еще, как можно запустить файл, хотя бы тот же модуль VBS от имени админа, при условии что я знаю пароль... ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2004, 15:43 |
|
Вопрос!
|
|||
---|---|---|---|
#18+
Visual Basic Script ... больш просто нечему. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2004, 16:00 |
|
Вопрос!
|
|||
---|---|---|---|
#18+
1. В VBA раннее связывание заменить на позднее: это даст возможность проверить модуль под VBA-отладчиком. 2. После отладки из строк деклараций переменных удалить тип переменных (в VBS тип переменных - variant). 3. После деклараций глобальных переменных написать единственную строку, не обрамлённую Sub...End Sub: Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2004, 19:33 |
|
Вопрос!
|
|||
---|---|---|---|
#18+
1.Можно не скромный вопрос что такое связывание... 2.Про переменные знаю 3. что именно писать? просто Sub & End Sub или еще добавить Call Main? Как функции обьявлять? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2004, 09:12 |
|
Вопрос!
|
|||
---|---|---|---|
#18+
Processor1. В VBA раннее связывание заменить на позднее: это даст возможность проверить модуль под VBA-отладчиком... а что такое vba-отладчик? это типа кнопка "run with full compile"? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2004, 11:04 |
|
Вопрос!
|
|||
---|---|---|---|
#18+
Gotar1.Можно не скромный вопрос что такое связывание... это способ посредством которого цепляются СОМ объекты, или я ошибаюсь? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2004, 11:06 |
|
Вопрос!
|
|||
---|---|---|---|
#18+
хы хы... блин меня интересует как работать с функциями через VBS ибо нужно обьявить функцию с использованием библиотеки. При запуске ругается на все! Тойсть как в VBA пишу - Public Declare Function TATATA Lib "sgdgfdg" as long ну и мне пишут, что я даун 8) Не могу найти нигде как это делается, так же вопрос - как обьявить просто функцию... к примеру чтонть типа Function TATATA (Переменные) as long для внесения дополнительных параметров... тоже - ругается В инете по VBS натыкаюсь только на VBS вирусы или на школьные пособия по VBS, так же не могу найти ни одной книги по VBS. На одном сайте видел такую инфу - VBS знает все функции(?) "В смысле библиотеки чтоль, или он их сам знает как подрубить, и не нада их указывать? " Дело в том что надо писать загрузочный файл, а код самой проги написан под VBA, решено было конвертить его в VBS, но к сожалению VBA и VBS немного отличаются, и из за большого кол - ва функций в имеющемся макросе, возникли эти проблеммы. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2004, 11:28 |
|
Вопрос!
|
|||
---|---|---|---|
#18+
1. Программа быстрее отлаживается, если объявляется тип каждой переменной (в IDE к этому принуждает Option Explicit). Объявление типа (не-variant) требует включения в проект ссылок на соответствующие библиотеки (Tools-->References... в VBA). Последнее и есть "раннее связывание": компилятор проделывает рутинную часть работы по проверке соответствия типов переменных, а линкер настраивает код на вызов функций соответствующих модулей... Текст VB-скрипта интерпретируется в run time и "наполняет" вариантные переменные соответствующими значениями: ByVal целыми, булевскими, вещественными, или ByRef строками, указателями и т.п. Тогда имя переменной, значимое для программиста, становится объектом, значимым для интерпретатора. Это и есть "позднее связывание": Код: plaintext
VBScript не обязан содержать пакетов, обрамлённых Sub...End Sub, однако в целях последующего сопровождения (отладки) скрипта в IDE VBA текст отлаживаемого в IDE VBA модуля должен быть обрамлён. Компромиссом и является скрипт, содержащий единственную команду CALL, вызывающую пакет команд, заключённых в оператор Sub...End Sub (внутри к-рого, естественно, могут быть Sub...End Sub и Function...End Function). ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2004, 11:38 |
|
Вопрос!
|
|||
---|---|---|---|
#18+
To raur Из VBA-отладчиков мне милее всего IDE Visual Basic for Excel. Microsoft Script Debugger по определению не обладает всеми возможностями отладки, доступными в IDE Visual Basic. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2004, 11:51 |
|
Вопрос!
|
|||
---|---|---|---|
#18+
Processor To raur Из VBA-отладчиков мне милее всего IDE Visual Basic for Excel. Microsoft Script Debugger по определению не обладает всеми возможностями отладки, доступными в IDE Visual Basic. а можно поподробнее плиз ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2004, 11:53 |
|
Вопрос!
|
|||
---|---|---|---|
#18+
raurа что такое vba-отладчик? это типа кнопка "run with full compile"? а можно поподробнее плиз С методикой написания и пошаговой отладки кода в IDE VB ты ведь знаком (сужу по профилю). Не въехал, о чём "поподробнее"... ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2004, 15:56 |
|
Вопрос!
|
|||
---|---|---|---|
#18+
Processor To raur Из VBA-отладчиков мне милее всего IDE Visual Basic for Excel. Microsoft Script Debugger по определению не обладает всеми возможностями отладки, доступными в IDE Visual Basic. вот об этом, если можно ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2004, 16:11 |
|
Вопрос!
|
|||
---|---|---|---|
#18+
возможно я просто не знаю всех определений... IDE VB - это что? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2004, 16:14 |
|
Вопрос!
|
|||
---|---|---|---|
#18+
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 "знает" свойства и методы объекта во время разработки. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2004, 17:12 |
|
Вопрос!
|
|||
---|---|---|---|
#18+
Это все здорово и потрясающи, а вот например если реально есть такой макрос на 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, ну и еще много мелких прелестей... Править не получается, меняется структура программы очень сильно, а этого бы не хотелось. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2004, 18:59 |
|
Вопрос!
|
|||
---|---|---|---|
#18+
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.
А ругаться будет уже не CScript.exe, а компилятор VB6 ;-) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2004, 20:08 |
|
Вопрос!
|
|||
---|---|---|---|
#18+
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.
А ругаться будет уже не CScript.exe, а компилятор VB6 ;-) 1. В смысле работать в среде VB6? (У меня тока VBA есть ) 2. Немного не удобно, так как этот макрос должен будет запускаться при обращении компьютера к серверу (при подключении к сети) (другими словами он будет прикреплен к BATнику на сервере), что бы облегчить установку этого принтера на большое количество машин. (ну не в ручную же ставить на более чем 100 компов :) ) Данный метод означает что придется писать еще дополнительный скрипт, регестрирующий эту библиотеку, это не желательно. 3. Этот скрипт будет в VBS я так понимаю, и будет обращаться к созданной нами библиотеке. Правильно? (Кстати там будет только установка принтера) Возможно существует другое решение данной задачи, но реально она сделанна в VBA, и планировалось: распространить вордовский файл с макросом и при его открытии, макрос создания принтера будет запускаться, а затем после создания принтера - документ с макросом самоудаляться(так нада). При данной схеме была проблемма, что на машины, куда будет распространнен этот макрос, работают под учетной записью без прав администратора, следовательно, макрос будет работать только под администратором (Пользователи не имеют доступа к учетной записи админа). Была идея как-нибудь сделать запуск этого макроса с правами администратора, или написать другой макрос, который бы открывал доковский файл с макросом создания принтера с правами администратора. Но как сделать это технически не имею ни малейшего представления (такой информации найти не удалось). Вследствии всех этих радостей было решено написать этот макрос в VBS и добавить его в загрузку сетевых параметров. (Если можно это сделать с VBA макросом то как?) Но переписать макрос в VBS не получается. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2004, 09:45 |
|
Вопрос!
|
|||
---|---|---|---|
#18+
Есть еще один вариант, но тоже не знаю как его реализовать. В VBS написать скрипт, запускающий док файл от имени администратора. как в VBS можно выполнить данную задачу. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2004, 10:34 |
|
Вопрос!
|
|||
---|---|---|---|
#18+
Кое что нашел но всеравно не ясно... Можно запустить файл от имени администратора примерно так: 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 зафигачить? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2004, 11:39 |
|
Вопрос!
|
|||
---|---|---|---|
#18+
Не мешает почитать мануалы, что такое VBA и VBS. Разница примерно такая же как между Java и Javascript. Для каждого типа задач - свой инструмент. А тут в некоторых постингах, простите, просто глупости. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2004, 11:47 |
|
Вопрос!
|
|||
---|---|---|---|
#18+
Терзают меня смутные сомненья: Возможно существует другое решение данной задачи И вот почему. 1. Т.к. есть слова "сеть, пользователи, админы, права, VBS", следует предположить, что сеть работает под W2k/W2003. В такой сети расшареный принтер виден в Проводнике при наборе UNC-имени компьютера в строке адреса. 2. Для его подключения достаточно щёлкнуть по имени принтера правой кнопкой мыши и выбрать пункт "Подключиться..." Права администратора не требуются. 3. Чтобы облегчить установку этого принтера на большое количество машин (ну не вручную же ставить на более чем 100 компов :) ), макрос должен будет запускаться при подключении к сети (logon). Единожды подключенный, он остаётся зарегистрированным "на постоянно". Чем такая установка принтера Вас не устраивает? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2004, 12:21 |
|
Вопрос!
|
|||
---|---|---|---|
#18+
Дело в том, что это не печатный принтер... это принтер аля 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) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2004, 12:59 |
|
|
start [/forum/topic.php?fid=60&msg=32635538&tid=2158715]: |
0ms |
get settings: |
7ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
38ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
others: | 11ms |
total: | 139ms |
0 / 0 |