Имя: Пароль:
1C
1С v8
v8: передать параметр в макрос word
0 адинэсниг1
 
08.07.13
15:36
1. нормальный вопрос 0% (0)
2. автор, иди учись программировать 0% (0)
Всего мнений: 0

onprint = поле ввода.значение;
           ТекстМакроса = "Sub VBAL1()
           | Application.PrintOut FileName:="""", Range:=wdPrintAllDocument, Item:= _
           |    wdPrintDocumentContent, Copies:=1, Pages:=???, PageType:=wdPrintAllPages, _
           |    ManualDuplexPrint:=False, Collate:=True, Background:=True, PrintToFile:= _
           |    False, PrintZoomColumn:=0, PrintZoomRow:=0, PrintZoomPaperWidth:=0, _
           |    PrintZoomPaperHeight:=0
           |    End Sub";
           
           
           Word = Новый COMОбъект("Word.Application");
           Word.Documents.Open("d:/1.docx");
           Word.Application.Visible=0;
           VB = Word.VBE.ActiveVBProject.VBComponents;
           Cnt = VB.Count();
           VB.Add(1);
           VB.Item(Cnt+1).CodeModule.InsertLines(1,ТекстМакроса);
           Word.Application.Run("VBAL1");
автор, иди учись программир

Как передать значание поля в параметр Pages?
пробывал Pages:="+onprint+",
Pages:="""+onprint+""",
Pages:="+символ(34)+onprint+символ(34)+".
Во всех случаях печатает все страницы, невзирая на занчанеие.

ps. пробывал печатать и без макроса, не взлетает.
примерно так: msword.printout(,,,,,,,,onprint,)
1 Андрюха
 
08.07.13
15:38
1) Включи запись макроса
2) Напечатай нужные страницы
3) Останови запись
4) Зайди в макрос и посмотри параметры Pages
2 адинэсниг1
 
08.07.13
15:49
(1) я делал это. Если, например печатать 1,6-10 страницы, то в макросе pages="1,6-10".

В 1с Пробывал передавать в макрос и 1,6-10, и "1,6-10". Печатает все страницы не взирая на это.

ТекстМакроса = "Sub VBAL1()
           | Application.PrintOut FileName:="""", Range:=wdPrintAllDocument, Item:= _
           |    wdPrintDocumentContent, Copies:=1, Pages:="+символ(34)+onprint+символ(34)+", PageType:=wdPrintAllPages, _
           |    ManualDuplexPrint:=False, Collate:=True, Background:=True, PrintToFile:= _
           |    False, PrintZoomColumn:=0, PrintZoomRow:=0, PrintZoomPaperWidth:=0, _
           |    PrintZoomPaperHeight:=0
           |    End Sub";
3 acsent
 
08.07.13
15:53
а на msdn зайти?
4 Jaap Vduul
 
08.07.13
15:54
Вместо wdPrintAllDocument надо wdPrintRangeOfPages.
Для восьмёрки, кстати, извращение со вставкой кода не нужно.
А при вызове методов для необязательных параметров нужно передавать Неопределено.
5 acsent
 
08.07.13
15:54
да и встроенный хелп неплохой
6 адинэсниг1
 
08.07.13
15:55
(4) thank you!
7 адинэсниг1
 
10.07.13
09:08
Еще вопрос по этой теме, вот в этом куске:

VB = MsWord.Application.VBE.ActiveVBProject.VBComponents;
Cnt = VB.count();
VB.Add(1);
VB.Item(Cnt+1).CodeModule.InsertLines(1,ТекстМакроса);
MsWord.Application.Run("VBAL1");
Состояние("Отключение от Word");
MsWord.Quit(Ложь);
MsWord = Неопределено;

Нету стабильности, то печатает все хорошо, то не обнаружен метод count(), то не обнаружен метод item(). От чего это может зависеть?
ps. office 2010
8 адинэсниг1
 
10.07.13
09:12
И еще, можно ли средствами 1с передать параметр wdPrintRangeOfPages в printout? что-бы не мучатся с макросами?
9 skunk
 
10.07.13
09:17
от ActiveVBProject
10 адинэсниг1
 
10.07.13
09:20
(9) подробнее, если не сложно
11 skunk
 
10.07.13
09:22
(8)wdPrintRangeOfPages = 4
12 skunk
 
10.07.13
09:24
(10)ActiveVBProject соддержит указатель на активный VBProject ... который тупо может просто отсуствовать
13 адинэсниг1
 
10.07.13
09:52
(11) Пишет:
Ошибка при вызове метода контекста (PrintOut): Типы не совпадают (12)

Вот так пытаюсь передать:
MsWord.PrintOut(0,неопределено,4,неопределено,неопределено,неопределено,неопределено,1,"1-2",неопределено,False,True);

третий параметр пробывал и 1,2,3,4,5,6.
14 skunk
 
10.07.13
09:57
а так?

MsWord.PrintOut(0, , 4, , , , , 1, "1-2", , False, True);
15 адинэсниг1
 
10.07.13
10:00
(14) получилось! спасибо!
16 skunk
 
10.07.13
10:03
(15)для необязательных параметров в функции и процедуры ничего не передовай ... а "неопределено" - это уже что-то
Закон Брукера: Даже маленькая практика стоит большой теории.