Перевод программы из VBA на VBS

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
good_dEmon
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 4
Зарегистрирован: 26.03.2008 (Ср) 12:33
Откуда: Vault 13

Перевод программы из VBA на VBS

Сообщение good_dEmon » 26.03.2008 (Ср) 12:56

Здравствуйте. Написал программу на VBА (макрос в Ворде). Вопрос состоит в том, чтобы каким-нибудь образом переделать её так, чтобы она работала не через Ворд, а как обычная программа.
Код программы слуедующий:
Код: Выделить всё
Private Sub CommandButton1_Click()

Dim Firma As String
Dim Ty As String
Dim Diam As String
Dim Marka As String
Dim Tara As String
Dim NumbTara As String
Dim Brutto As String
Dim Netto As String
Dim Data As String
Dim TabNumber As String
Dim Shtamp As String
Dim CodeVnutr As String
Dim s As String
Dim Priznihod As String
Dim Lak As String
Dim Invnomobor As String
Dim Invnaimobor As String

Firma = InputBox("Введите название изготовителя")
Ty = InputBox("Введите ТУ")
Diam = InputBox("Введите диаметр")
Marka = InputBox("Введите марку")
Tara = InputBox("Введите тару")
NumbTara = InputBox("Введите № тары/массу")
Brutto = InputBox("Введите брутто")
Netto = InputBox("Введите нетто")
Data = InputBox("Введите дату")
TabNumber = InputBox("Введите табельный №")
Shtamp = InputBox("Введите штамп ОТК")
CodeVnutr = InputBox("Введите внутренний код")
Priznihod = InputBox("Введите признак сырья и номер хода")
Lak = InputBox("Введите номмер лака")
Invnomobor = InputBox("Введите инвентарный номмер оборудования")
Invnaimobor = InputBox("Введите инвентарное наименование оборудования")

CR_LF = Chr(13) + Chr(10)
s = "" + CR_LF
s = s + "OS" + CR_LF
s = s + "Q240,16" + CR_LF
s = s + "q500,15" + CR_LF
s = s + "I8,10,001" + CR_LF
s = s + "N" + CR_LF
s = s + "B470,108,2,1,2,2,90,N," + Chr(34) + CodeVnutr + Chr(34) + CR_LF
s = s + "B260,240,2,E30,2,1,42,B," + Chr(34) + Shtamp + Chr(34) + CR_LF
s = s + "A380,498,2,2,1,2,N," + Chr(34) + Firma + Chr(34) + CR_LF
s = s + "A470,420,2,1,1,2,N," + Chr(34) + Ty + Chr(34) + CR_LF
s = s + "A470,360,2,1,1,2,N," + Chr(34) + Diam + Chr(34) + CR_LF
s = s + "A350,155,2,1,1,2,N," + Chr(34) + Invnaimobor + Chr(34) + CR_LF
s = s + "A150,155,2,1,1,2,N," + Chr(34) + Priznihod + Chr(34) + CR_LF
s = s + "A170,90,2,1,2,3,N," + Chr(34) + Lak + Chr(34) + CR_LF
s = s + "A306,355,2,1,1,2,N," + Chr(34) + Marka + Chr(34) + CR_LF
s = s + "A140,355,2,1,1,2,N," + Chr(34) + Tara + Chr(34) + CR_LF
s = s + "A470,287,2,1,1,2,N," + Chr(34) + NumbTara + Chr(34) + CR_LF
s = s + "A300,288,2,1,1,2,N," + Chr(34) + Brutto + Chr(34) + CR_LF
s = s + "A125,288,2,1,1,2,N," + Chr(34) + Netto + Chr(34) + CR_LF
s = s + "A470,220,2,1,1,2,N," + Chr(34) + Data + Chr(34) + CR_LF
s = s + "A470,155,2,1,1,2,N," + Chr(34) + Invnomobor + Chr(34) + CR_LF
s = s + "A340,220,2,1,1,2,N," + Chr(34) + TabNumber + Chr(34) + CR_LF
s = s + "GG150,108," + Chr(34) + "gk_h" + Chr(34) + CR_LF
s = s + "GG100,430," + Chr(34) + "stb_h" + Chr(34) + CR_LF
s = s + "P1" + CR_LF + Chr(26)
Documents.Add
Selection.WholeStory
    Selection.Delete Unit:=wdCharacter, Count:=1
Selection.TypeText Text:=s
Selection.WholeStory
    Selection.Font.Name = "Courier New"
ChangeFileOpenDirectory "D:\Взвешивание\"
    ActiveDocument.SaveAs FileName:="OS.txt", FileFormat:=wdFormatDOSText, _
        LockComments:=False, Password:="", AddToRecentFiles:=True, WritePassword _
        :="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:=False, _
        SaveNativePictureFormat:=False, SaveFormsData:=False, SaveAsAOCELetter:= _
        False
Open "D:\Взвешивание\OS.txt" For Input As #1
    Do Until EOF(1)
    Line Input #1, peremen
    si = si + peremen + Chr(13) + Chr(10)
    Loop
Open "LPT1:" For Binary As #2
Put #2, , si
Close #1
Close #2
'Windows("OS").Activate
'    ActiveWindow.Close
'Windows("Взвешивание готовой продукции.").Activate
End Sub

Буду очень благодарен хоть за какую-либо помощь.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 26.03.2008 (Ср) 13:01

Типы (As String) убираешь.
Символ $ в имени функций убираешь.
Selection заменяешь на doc, doc ранее инициализируешь хотя бы так: Set doc = CreateObject("Word.Application").Documents.Add().
Именованные константы объявляешь в коде или заменяешь на значения.
Open ... As #1 заменяешь, считываешь файл через FSO (ReadLine и пр.).
Open ... As #2 заменяешь, содержимое si выгружаешь в файл (тоже через FSO), затем этот файл копируешь на устройство lpt1, затем файл удаляешь.

Вроде бы все.
Lasciate ogni speranza, voi ch'entrate.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 26.03.2008 (Ср) 13:03

Хотя код какой-то непостижимый.
Словами скажи, что тебе надо от этого кода?
Lasciate ogni speranza, voi ch'entrate.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 26.03.2008 (Ср) 13:10

Selection заменяешь на doc
Selection является свойством Word.Application, Global, Pane и Window, поэтому
Код: Выделить всё
Set Word = CreateObject("Word.Application")
Set doc = Word.Documents.Add
Set Selection = Word.Selection 'типа можно и не заменять
Лучший способ понять что-то самому — объяснить это другому.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Re: Перевод программы из VBA на VBS

Сообщение Viper » 26.03.2008 (Ср) 14:20

good_dEmon писал(а):Вопрос состоит в том, чтобы каким-нибудь образом переделать её так, чтобы она работала не через Ворд, а как обычная программа.

Как обычная (exe-файл) или же как скрипт?
Весь мир матрица, а мы в нем потоки байтов!

good_dEmon
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 4
Зарегистрирован: 26.03.2008 (Ср) 12:33
Откуда: Vault 13

Сообщение good_dEmon » 31.03.2008 (Пн) 9:55

На работе толко сегодня оказался :)
Итак, попорядку%
1. 2 alibek: Суть программы такая: я запрашиваю у пользователя данные, которые он вводит с клавиатуры, затем эти данные+данные из программы (ЕСК-коды для принтера) записываются в вайл и сохраняются в досовской кодировке. Потом этот файл подаётся на порт ЛПТ и происходит прямая печать.
2. 2 Viper: да хоть как-то, только чтобы испонялось и всё.

gjghjc
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 659
Зарегистрирован: 13.10.2002 (Вс) 8:28
Откуда: БАЛАКЛАВА!!

Сообщение gjghjc » 31.03.2008 (Пн) 10:30

Ну тогда так.
Можно оставить под Вордом.
1. Вместо вот этого
Код: Выделить всё
Firma = InputBox("Введите название изготовителя")
Ty = InputBox("Введите ТУ")
Diam = InputBox("Введите диаметр")
Marka = InputBox("Введите марку")
Tara = InputBox("Введите тару")
NumbTara = InputBox("Введите № тары/массу")
Brutto = InputBox("Введите брутто")
Netto = InputBox("Введите нетто")
Data = InputBox("Введите дату")
TabNumber = InputBox("Введите табельный №")
Shtamp = InputBox("Введите штамп ОТК")
CodeVnutr = InputBox("Введите внутренний код")
Priznihod = InputBox("Введите признак сырья и номер хода")
Lak = InputBox("Введите номмер лака")
Invnomobor = InputBox("Введите инвентарный номмер оборудования")
Invnaimobor = InputBox("Введите инвентарное наименование оборудования")

Логичнее было бы сделать форму с таким же количеством текстовых полей и кнопку по нажатию на которую формируется файл. В этом случае у тебя пользователь сможет проконтроллировать правильность введения данных перед тем как их распечатывать.
2. вместо вот этого
Код: Выделить всё
Documents.Add
Selection.WholeStory
    Selection.Delete Unit:=wdCharacter, Count:=1
Selection.TypeText Text:=s
Selection.WholeStory
    Selection.Font.Name = "Courier New"
ChangeFileOpenDirectory "D:\Взвешивание\"
    ActiveDocument.SaveAs FileName:="OS.txt", FileFormat:=wdFormatDOSText, _
        LockComments:=False, Password:="", AddToRecentFiles:=True, WritePassword _
        :="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:=False, _
        SaveNativePictureFormat:=False, SaveFormsData:=False, SaveAsAOCELetter:= _
        False

Лучше использовать тот же Open "путь к файлу" FOR OUTPUT As #1 для записи данных в текстовик. Правда перед этим необходимо будет проверить есть ли уже этот файл и если есть то сделать ему KILL
Вложения
Tipa_primer.ZIP
(1.27 Кб) Скачиваний: 45
Утро добрым не бывает!

good_dEmon
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 4
Зарегистрирован: 26.03.2008 (Ср) 12:33
Откуда: Vault 13

Сообщение good_dEmon » 31.03.2008 (Пн) 11:11

А в какой среде разработки лучше это делать? А то у меня на компе кроме ворда со встроенными макросами ничего нету :) Просто ниразу с ВБ так близко не сталкивался, а тут появилась реальная задача.
А может всё таки лучше сделать всё скриптом? Чтобы без шума и пыли?
"War. War never changes..."

HiSER
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 88
Зарегистрирован: 04.07.2007 (Ср) 18:17

Сообщение HiSER » 31.03.2008 (Пн) 12:47

Принтер поди еще штрих-кодов? :)

good_dEmon
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 4
Зарегистрирован: 26.03.2008 (Ср) 12:33
Откуда: Vault 13

Сообщение good_dEmon » 02.04.2008 (Ср) 10:07

HiSER писал(а):Принтер поди еще штрих-кодов? :)

В яблочко :)
"War. War never changes..."


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 77

    TopList