Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Из Ворда запустить *.exe скомпилированный в ВБ6 / 25 сообщений из 98, страница 1 из 4
20.05.2012, 16:40
    #37802868
катастрофа
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из Ворда запустить *.exe скомпилированный в ВБ6
Здравствуйте, если в Ворде нажму кнопку, а там будет сказано в обработчике нажатия кнопки - Шелл.... и какой именно экзешник скомпилированный в ВБ6 - так можно сделать?думаю, что можно и начал писать в ВБ6:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
 Dim ObjectWord As Object
    Set ObjectWord = GetObject(, " Word.Application")
 
    'отключаем дёргание экрана при выполнении кода
    ObjectWord.Application.ScreenUpdating = False
 
    '************************
    Dim isTable As ObjectWord.Range
    Set isTable = Selection.Range



Выёживается, выделяет isTable As ObjectWord.Range что не так?
...
Рейтинг: 0 / 0
20.05.2012, 17:10
    #37802902
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из Ворда запустить *.exe скомпилированный в ВБ6
катастрофа,

Потому что нет такого типа/класса ObjectWord, а есть Word.Application
...
Рейтинг: 0 / 0
20.05.2012, 17:18
    #37802908
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из Ворда запустить *.exe скомпилированный в ВБ6
катастрофа,

И такого свойства Range там вообще нет

:0)
...
Рейтинг: 0 / 0
21.05.2012, 07:28
    #37803201
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из Ворда запустить *.exe скомпилированный в ВБ6
VladConnкатастрофа,

Потому что нет такого типа/класса ObjectWord, а есть Word.ApplicationА должно быть Range.
...
Рейтинг: 0 / 0
21.05.2012, 07:47
    #37803209
скукотища
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из Ворда запустить *.exe скомпилированный в ВБ6
AntonariyVladConnкатастрофа,

Потому что нет такого типа/класса ObjectWord, а есть Word.ApplicationА должно быть Range.Нету у ворда ( объект ) ни свойства, ни метода Range. Есть класс Range в библиотеке Word.
...
Рейтинг: 0 / 0
21.05.2012, 08:44
    #37803229
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из Ворда запустить *.exe скомпилированный в ВБ6
Есть у документа, начать надо с подключения к документу, открытию или созданию нового
...
Рейтинг: 0 / 0
21.05.2012, 11:20
    #37803473
катастрофа
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из Ворда запустить *.exe скомпилированный в ВБ6
сейчас в Ворде есть поле, оно должно быть размещено в таблице, щёлкая по нему, запускается макрос на ВБА:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
'защищает от некоторых, трудно уловимых ошибок
'Option - Вариант
'Explicit - Явный
Option Explicit
 
Sub Main()
 
'отключаем дёргание экрана при выполнении кода
Application.ScreenUpdating = False
 
'*********************************************************
'функция (выясняем место нахождения курсора в таблице)
Dim isTable As Word.Range
Set isTable = Selection.Range
 
'условие, если выделено более одной таблицы, тогда ...
If Selection.Tables.Count > 1 Then
MsgBox$ _
                "Программа не может быть продолжена, выделено более одной таблицы", vbOKOnly, _
                "Внимание"
GoTo Конец
'условие, если выделеное находится не в таблице, тогда ...
ElseIf Not isTable.Information(wdWithInTable) Then
MsgBox$ _
                "Программа не может быть продолжена, курсор должен находится в таблице", vbOKOnly, _
                "Внимание"
GoTo Конец
End If
 
'номер таблицы в документе, где расположен курсор
Dim NumberCursorTable As Long
'номер таблицы в документе, где расположен курсор
NumberCursorTable = ActiveDocument.Range(0, Selection.Tables(1).Range.End).Tables.Count
 
'номер строки в таблице, в документе, где расположен курсор
Dim NumberCursorRow As Long
'номер строки в таблице, в документе, где расположен курсор, даже если таблица имеет объединённые ячейки
NumberCursorRow = Selection.Information(wdEndOfRangeRowNumber)
 
'номер столбца, а также ячейки в таблице, в документе, где расположен курсор, даже если ширина столбца, ячейки различается
Dim NumberCursorCell As Long
'номер столбца, то есть ячейки в строке таблицы, в документе где расположен курсор, даже если таблица имеет объединённые ячейки
NumberCursorCell = Selection.Information(wdEndOfRangeColumnNumber)
 
'*********
'2 вариант
 
'номер строки в таблице, в документе, где расположен курсор, даже если таблица имеет объединённые  ячейки
'IntegerCursorRow = Selection.Cells(1).RowIndex
 
'номер столбца, а также ячейки в таблице, в документе, где расположен курсор, даже если ширина столбца, ячейки различается
'IntegerCursorCell = Selection.Cells(1).ColumnIndex
'*********
 
'установка объекта в значение Nothing требуется для освобождения памяти, которая была выделена для создания этого объекта
Set isTable = Nothing
'конец функции (выясняем место нахождения курсора в таблице)
'*********************************************************
    
Selection.Delete Unit:=wdCharacter, Count:=1
 
Dim Строка_таблицы_Word As String
 
'************************************************************************
'функция (считывание со строки, ячейки таблицы)
'Range со строки или ячейки таблицы Word
'абзац заменяем на пробел
'заменяем два, три, четыре и более пробелов подряд на один пробел
'удаляем концевую сноску таблицы Word
'заменяем пробел, следом идущую запятую на запятую, то есть, удаляем пробел перед запятой
'заменяем двоеточие, следом идущее двоеточие на двоеточие, то есть удаляем пробел перед двоеточием
 
'здесь при помощи Trim$ откидываем лишние пробелы в начале и в конце строки или ячейки таблицы Word
Строка_таблицы_Word = Trim$(ActiveDocument.Tables(NumberCursorTable).Rows(NumberCursorRow).Cells(NumberCursorCell).Range)
'Debug.Print Строка_таблицы_Word
 
Dim reg As Object
Set reg = CreateObject("vbscript.regexp")
'искать по всему тексту, по умолчанию False - будет найдено только первое совпадение
reg.Global = True
'Chr$(13) это абзац, заменяем его на пробел
reg.Pattern = Chr$(13)
Строка_таблицы_Word = reg.Replace$(Строка_таблицы_Word, " ")
'Debug.Print Строка_таблицы_Word
'+ означает, что заменяем два, три, четыре и более пробелов подряд на один пробел
reg.Pattern = " +"
Строка_таблицы_Word = reg.Replace$(Строка_таблицы_Word, " ")
'Debug.Print Строка_таблицы_Word
'Chr$(7) это концевая сноска таблицы Word
reg.Pattern = Chr$(7)
Строка_таблицы_Word = reg.Replace$(Строка_таблицы_Word, "")
'Debug.Print Строка_таблицы_Word
'заменяем пробел, следом идущую запятую на запятую, то есть удаляем пробел перед запятой
reg.Pattern = " ,"
Строка_таблицы_Word = reg.Replace$(Строка_таблицы_Word, ",")
'Debug.Print Строка_таблицы_Word
'заменяем пробел, следом идущее двоеточие на двоеточие, то есть удаляем пробел перед двоеточием
reg.Pattern = " :"
Строка_таблицы_Word = reg.Replace$(Строка_таблицы_Word, ":")
'Debug.Print Строка_таблицы_Word
Строка_таблицы_Word = Trim$(Строка_таблицы_Word)
'Debug.Print Строка_таблицы_Word
 
'установка объекта в значение Nothing требуется для освобождения памяти, которая была выделена для создания этого объекта
Set reg = Nothing
'конец функции (считывание со строки, ячейки таблицы)
'************************************************************************
 
With ActiveDocument.Tables(NumberCursorTable)
 
'добавить одну строчку в таблице ниже строки где находится курсор
Selection.InsertRowsBelow 1
 
If .Rows(NumberCursorRow).Cells(NumberCursorCell).Range.Fields.Count = 1 And _
.Rows(NumberCursorRow).Cells(NumberCursorCell).Range.Fields(1).Type = 70 Then
.Rows(NumberCursorRow + 1).Cells(NumberCursorCell).Range.Text = "Место регистрации: " & .Rows(NumberCursorRow).Cells(NumberCursorCell).Range.Fields(1).Result
Else
.Rows(NumberCursorRow + 1).Cells(NumberCursorCell).Range.Text = "Место регистрации: "
End If
 
.Rows(NumberCursorRow).Cells(NumberCursorCell).Range.Text = Строка_таблицы_Word
 
'переместить курсор в конец строки
Selection.EndKey Unit:=wdLine
End With
 
Beep
 
Конец:
 
'отменяем отключенное ранее дёргание экрана при выполнении кода
Application.ScreenUpdating = True
 
End Sub



нужно этот функционал вставить в ВБ6, скомпилировать, а в Воде просто указать Shell (полный путь к екзешнику), так каков будет код в ВБ6 перед компиляцией?
...
Рейтинг: 0 / 0
21.05.2012, 11:30
    #37803499
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из Ворда запустить *.exe скомпилированный в ВБ6
Навскидку - ты тут работаешь только с объектом Selection, то есть тебе надо подключиться к Word.Application, взять у него Selection в переменную а остальное все так же.
...
Рейтинг: 0 / 0
21.05.2012, 11:41
    #37803516
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из Ворда запустить *.exe скомпилированный в ВБ6
скукотищаAntonariyпропущено...
А должно быть Range.Нету у ворда ( объект ) ни свойства, ни метода Range. Есть класс Range в библиотеке Word.Я это и имел ввиду.
...
Рейтинг: 0 / 0
21.05.2012, 11:49
    #37803542
катастрофа
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из Ворда запустить *.exe скомпилированный в ВБ6
Shocker.ProНавскидку - ты тут работаешь только с объектом Selection, то есть тебе надо подключиться к Word.Application, взять у него Selection в переменную а остальное все так же.
неподъемно
жалко день победы прошёл, до Нового года далеко, к какому празднику просить, по хоккею чемпионы, ну тогда к чемпионату Европы по футболу. Поправьте пжл в коде, чтобы не запускать долгоиграющую пластинку
...
Рейтинг: 0 / 0
21.05.2012, 12:07
    #37803576
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из Ворда запустить *.exe скомпилированный в ВБ6
катастрофанеподъемноЧто именно непонятно. Весь нужный код у тебя уже есть в этом топике. Еще у тебя есть "тетрадка", в которой уже мегабайты примеров работы. Но если ты не можешь уже за третий год понять, что такое объект, их метод и свойство, то ни к новому году, ни к победе нашей сборной по футболу на ЧМ, мозгов тебе добавить никто не сможет, даже доктор Майоров. Принеси уже пользу людям там, где ты сможешь.
...
Рейтинг: 0 / 0
21.05.2012, 19:12
    #37804637
катастрофа
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из Ворда запустить *.exe скомпилированный в ВБ6
Shocker.Pro,
>надо подключиться к Word.Application
вроде так?
Код: vbnet
1.
2.
Dim ObjectWord As Object
Set ObjectWord = GetObject(, " Word.Application")


>взять у него Selection в переменную
как?
>Еще у тебя есть "тетрадка", в которой уже мегабайты примеров работы
неа, в ВБ6 я новичёк
...
Рейтинг: 0 / 0
21.05.2012, 19:20
    #37804648
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из Ворда запустить *.exe скомпилированный в ВБ6
катастрофанеа, в ВБ6 я новичёккакая разница, с объектами все то же самое
катастрофакак?у тебя в ObjectWord теперь находится тот же объект, что при работе с ВБА ты видишь как Application. Вот и вперед. В смысле - думай.
...
Рейтинг: 0 / 0
21.05.2012, 19:35
    #37804669
катастрофа
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из Ворда запустить *.exe скомпилированный в ВБ6
Shocker.Proу тебя в ObjectWord теперь находится тот же объект, что при работе с ВБА ты видишь как Application. Вот и вперед. В смысле - думай.
так я так делал уже давно, ещё когда не полез с вопросом на форум, но выделяет Dim isTable As Word.Range, как уладить?
...
Рейтинг: 0 / 0
21.05.2012, 19:54
    #37804693
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из Ворда запустить *.exe скомпилированный в ВБ6
катастрофатак я так делал уже давно, ещё когда не полез с вопросом на форум, но выделяет Dim isTable As Word.Range, как уладить?Тут надо понимать, каким путем ты идешь. Либо подключаешь к проекту библиотеку Word (через References). Либо не используешь ссылки на Word и тогда все переменные объявляешь как Object.
...
Рейтинг: 0 / 0
21.05.2012, 20:00
    #37804702
катастрофа
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из Ворда запустить *.exe скомпилированный в ВБ6
Shocker.Pro,
и каким путём идти лучше?
...
Рейтинг: 0 / 0
21.05.2012, 20:11
    #37804716
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из Ворда запустить *.exe скомпилированный в ВБ6
Первый удобнее для разработки - выпадают подсказки, больше ошибок можно отловить на этапе компиляции. Второй надежнее с точки зрения переноса между машинами.
...
Рейтинг: 0 / 0
21.05.2012, 20:14
    #37804718
катастрофа
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из Ворда запустить *.exe скомпилированный в ВБ6
Shocker.Pro, конечно выбираю второй надёжный, тогда строки кода
Код: vbnet
1.
2.
Dim ObjectWord As Object
Set ObjectWord = GetObject(, " Word.Application")


не нужны?
...
Рейтинг: 0 / 0
21.05.2012, 20:20
    #37804725
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из Ворда запустить *.exe скомпилированный в ВБ6
в этом случае как раз нужны
...
Рейтинг: 0 / 0
21.05.2012, 20:43
    #37804744
катастрофа
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из Ворда запустить *.exe скомпилированный в ВБ6
Shocker.Pro, окейно, есть движение:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
'защищает от некоторых, трудно уловимых ошибок
'Option - Вариант
'Explicit - Явный
Option Explicit
 
Sub Main()

Dim ObjectWord As Object
Set ObjectWord = GetObject(, " Word.Application")

'отключаем дёргание экрана при выполнении кода
ObjectWord.ScreenUpdating = False
 
'*********************************************************
'функция (выясняем место нахождения курсора в таблице)
Dim isTable As Object
Set isTable = ObjectWord.Selection.Range
 
'условие, если выделено более одной таблицы, тогда ...
If ObjectWord.Selection.Tables.Count > 1 Then
MsgBox$ _
                "Программа не может быть продолжена, выделено более одной таблицы", vbOKOnly, _
                "Внимание"
GoTo Конец
'условие, если выделеное находится не в таблице, тогда ...
ElseIf Not isTable.Information(wdWithInTable) Then


теперь выделяет wdWithInTable - переменная не определена, как определить?
...
Рейтинг: 0 / 0
21.05.2012, 20:58
    #37804752
катастрофа
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из Ворда запустить *.exe скомпилированный в ВБ6
Но в ВБА wdWithInTable с Option Explicit идёт и не спотыкается
и что же делать в ВБ6?
...
Рейтинг: 0 / 0
21.05.2012, 22:26
    #37804831
скукотища
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из Ворда запустить *.exe скомпилированный в ВБ6
катастрофаНо в ВБА wdWithInTable с Option Explicit идёт и не спотыкается
и что же делать в ВБ6?А что такое это wdWithInTable ?
...
Рейтинг: 0 / 0
21.05.2012, 23:10
    #37804856
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из Ворда запустить *.exe скомпилированный в ВБ6
катастрофатеперь выделяет wdWithInTable - переменная не определена, как определить?надо нажать в ВБА F2 и посмотреть чему равна эта константа
...
Рейтинг: 0 / 0
22.05.2012, 01:58
    #37804974
катастрофа
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из Ворда запустить *.exe скомпилированный в ВБ6
Shocker.Pro, ухты, нажал Эф2 - и понеслось, короче сделал, спасибо!!!!!!!!!!!!!
>победе нашей сборной по футболу на ЧМ
а это уже за Вами
...
Рейтинг: 0 / 0
22.05.2012, 02:19
    #37804979
катастрофа
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из Ворда запустить *.exe скомпилированный в ВБ6
Shocker.Pro, радость пока не полная, скомпилировал, запускаю с Ворда экзешник
Код: vbnet
1.
2.
3.
4.
5.
Sub Ссылка()

Shell ("J:\MACROBUTTON'ы\MACROBUTTON1.exe")

End Sub



выёживается, говорит ошибка 429 АктивХ компонент cant create object, как лечится?
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Из Ворда запустить *.exe скомпилированный в ВБ6 / 25 сообщений из 98, страница 1 из 4
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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