powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Из Ворда запустить *.exe скомпилированный в ВБ6
25 сообщений из 98, страница 1 из 4
Из Ворда запустить *.exe скомпилированный в ВБ6
    #37802868
катастрофа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте, если в Ворде нажму кнопку, а там будет сказано в обработчике нажатия кнопки - Шелл.... и какой именно экзешник скомпилированный в ВБ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
Из Ворда запустить *.exe скомпилированный в ВБ6
    #37802902
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
катастрофа,

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

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

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

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

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


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


не нужны?
...
Рейтинг: 0 / 0
Из Ворда запустить *.exe скомпилированный в ВБ6
    #37804725
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в этом случае как раз нужны
...
Рейтинг: 0 / 0
Из Ворда запустить *.exe скомпилированный в ВБ6
    #37804744
катастрофа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Из Ворда запустить *.exe скомпилированный в ВБ6
    #37804752
катастрофа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но в ВБА wdWithInTable с Option Explicit идёт и не спотыкается
и что же делать в ВБ6?
...
Рейтинг: 0 / 0
Из Ворда запустить *.exe скомпилированный в ВБ6
    #37804831
скукотища
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
катастрофаНо в ВБА wdWithInTable с Option Explicit идёт и не спотыкается
и что же делать в ВБ6?А что такое это wdWithInTable ?
...
Рейтинг: 0 / 0
Из Ворда запустить *.exe скомпилированный в ВБ6
    #37804856
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
катастрофатеперь выделяет wdWithInTable - переменная не определена, как определить?надо нажать в ВБА F2 и посмотреть чему равна эта константа
...
Рейтинг: 0 / 0
Из Ворда запустить *.exe скомпилированный в ВБ6
    #37804974
катастрофа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro, ухты, нажал Эф2 - и понеслось, короче сделал, спасибо!!!!!!!!!!!!!
>победе нашей сборной по футболу на ЧМ
а это уже за Вами
...
Рейтинг: 0 / 0
Из Ворда запустить *.exe скомпилированный в ВБ6
    #37804979
катастрофа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro, радость пока не полная, скомпилировал, запускаю с Ворда экзешник
Код: vbnet
1.
2.
3.
4.
5.
Sub Ссылка()

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

End Sub



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


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