Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/48: Рейтинг темы: голосов - 48, средняя оценка - 5.00
1712 / 579 / 76
Регистрация: 10.04.2009
Сообщений: 9,327

Использовать команду Shell для разных кнопок с разными параметрами

26.05.2012, 15:46. Показов 10030. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, как быть когда нужно на кнопку, которая в документе Ворд повесить код типа этого
Visual Basic
1
Shell "D:\РабочаяПапка\MACROBUTTON1.exe", vbNormalFocus
имеется ввиду когда кнопок много, а плодить MACROBUTTON1.exe ....MACROBUTTON100.exe
не хочется, а хочется чтобы был один MACROBUTTON1.exe и обрабатывал все кнопки
что-то типа параметров с Shell передать можно??
уже гуглил, понял, что нельзя, не хочется этому верить, так можно?? как??
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.05.2012, 15:46
Ответы с готовыми решениями:

Запустить функцию в разных потоках с разными параметрами
Здравствуйте, подскажите как запустить 1 и ту же функцию в разных потоках с разными параметрами, и как после этого получать доступ к этим...

Один метод с параметрами по нажатию разных кнопок
Здравствуйте. Подскажите, как сделать один метод с параметрами по нажатию разных кнопок? Сейчас делаю так: private void...

Маска ввода для одного поля, но с разными параметрами
Здравствуйте! Подскажите пожалуйста, как сделать маску ввода для одного поля числового, но с разными количествами цифр (в зависимости...

16
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
26.05.2012, 16:14
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
что-то типа параметров с Shell передать можно?
Конечно:
Visual Basic
1
2
shell "notepad.exe d:\1.txt"
shell "notepad.exe d:\123.txt"
0
призрак
 Аватар для ikki
3266 / 894 / 119
Регистрация: 11.05.2012
Сообщений: 1,702
Записей в блоге: 2
26.05.2012, 16:19
м.б., я не понял, в чем вопрос...
судя по этому:
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
MACROBUTTON1.exe ....MACROBUTTON100.exe
вам нужно запустить разные приложения для разных кнопок?
тогда что мешает получить в одном макросе имя нажатой кнопки и сформировать соответствующую строку для Shell?

а судя по этому:
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
что-то типа параметров с Shell передать можно??
выходит. что вы хотите запускать одно и то же приложение с разными параметрами?
а это приложение поддерживает параметры, переданные в командной строке?
если да -
тогда что мешает получить в одном макросе имя нажатой кнопки и сформировать соответствующую строку для Shell?
0
1712 / 579 / 76
Регистрация: 10.04.2009
Сообщений: 9,327
26.05.2012, 16:23  [ТС]
а смысл этого?
надо в
Visual Basic
1
Shell "D:\РабочаяПапка\MACROBUTTON1.exe", vbNormalFocus
а затем когда его там я открою там в процедуре
Sub Main()
я должен задавать условия, если ... то ... иначе ...

Добавлено через 1 минуту
Цитата Сообщение от ikki_cf Посмотреть сообщение
тогда что мешает получить в одном макросе имя нажатой кнопки и сформировать соответствующую строку для Shell?
ничего не мешает, незнаю как??
0
призрак
 Аватар для ikki
3266 / 894 / 119
Регистрация: 11.05.2012
Сообщений: 1,702
Записей в блоге: 2
26.05.2012, 16:29
гм. ну, я больше знаком с VBA для Excel.
там есть свойство Application.Caller
оказывается, в VBA для Word точно такого - нет.
но, думаю, есть аналогичное.
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18033 / 7736 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
26.05.2012, 21:27
Может Вам нужно что-то вроде класса.
Мне давал код kuklp, успешно реализован - конец темы Нужно вызвать форму и скрыть кнопки, номера которых указаны в массиве
только не уверен подойдет ли для ворда.

Не по теме:

Что-то странное часть сообщений в той теме пропало :(



а здесь он применен Вызов диалогового окна выбора цвета (Excel)

Не по теме:

ПС. Ципихович Эндрю, уточнил - кликайте.

1
1712 / 579 / 76
Регистрация: 10.04.2009
Сообщений: 9,327
26.05.2012, 21:31  [ТС]
думаю, что нет, но можно поточней
Цитата Сообщение от Diskretor Посмотреть сообщение
конец темы
с какого поста (ещё не смотрел)
0
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
26.05.2012, 21:56
Надо определить, из какого поля (кнопки) вызван макрос?
Попробуйте на все кнопки навесить такой макрос:
Visual Basic
1
2
3
Sub bb()
MsgBox Selection.Fields(1).Index
End Sub
Он выдает номер поля, из которого вызван макрос.
1
1712 / 579 / 76
Регистрация: 10.04.2009
Сообщений: 9,327
26.05.2012, 22:07  [ТС]
ну узнал, например 78, как в шелл передать 78??
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
затем когда его там я открою там в процедуре
Sub Main()
я должен задавать условия, если ... то ... иначе ...
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18033 / 7736 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
26.05.2012, 22:13
Ну так и передать:
Visual Basic
1
shell "notepad.exe d:\" & Selection.Fields(1).Index & ".txt"
0
1712 / 579 / 76
Регистрация: 10.04.2009
Сообщений: 9,327
26.05.2012, 22:18  [ТС]
переводим на русский язык
Visual Basic
1
2
3
4
'номер выделенного поля, кстати зря лучше по имени
n=Selection.Fields(1).Index
'открыть текстовый документ в зависимости то того какое поле нажато
shell "notepad.exe d:\" & n & ".txt"
у меня никаким текстовым файлом и блокнотом и не пахнет
0
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
26.05.2012, 23:18
Эндрю,
переведи на русский язык свой вопрос!
Что делает этот экзешник, какой параметр ему надо передать?
0
1712 / 579 / 76
Регистрация: 10.04.2009
Сообщений: 9,327
26.05.2012, 23:27  [ТС]
всё очень просто в Ворде есть разные поля типа Macrobutton
на них на все повешена одна строка
Shell "D:\РабочаяПапка\MACROBUTTON.exe", vbNormalFocus
а уже там этот экзешник - молодца, работает
Visual Basic
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
Sub Main()
 
    Set ObjectWord = GetObject(, "Word.Application")
 
    'отключаем дёргание экрана при выполнении кода
    ObjectWord.ScreenUpdating = False
 
    Dim SelectionFieldsCode As String
    'удаляем "MACROBUTTON"
    'в ВБА, разница в отсутствии Selection
    'SelectionFieldsCode = Trim$(Replace$(ObjectWord.Fields(1).Code, "MACROBUTTON", ""))
    'в ВБ6, разница в присутствии Selection
    SelectionFieldsCode = Trim$(Replace$(ObjectWord.Selection.Fields(1).Code, "MACROBUTTON", ""))
 
    'первый пробел в коде выделенного поля
    'Dim SpaceSelectionFieldsCode As Long
    'SpaceSelectionFieldsCode = InStr(SelectionFieldsCode, " ")
 
    Dim NameMacros As String
    'Mid$(String,Start,[Length])
    NameMacros = Mid$(SelectionFieldsCode, 1, InStr(SelectionFieldsCode, " ") - 1)
 
    If NameMacros = "Ссылка"  Then
'делаю что хочу
End If
а как быть с кнопками???
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18033 / 7736 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
27.05.2012, 01:33
VB6, VBA, EXE, Shell, кнопки - что у Вас есть, и что с чем взаимосвязано, и как по-вашему должно работать.
Вы меня еще больше запутали.

Давайте тогда переходить уже на какие-то примеры, картинки что-ли.
0
1712 / 579 / 76
Регистрация: 10.04.2009
Сообщений: 9,327
27.05.2012, 08:26  [ТС]
сейчас есть Ворд, в нём например множество полей типа MACROBUTTON, не просто что их много, а их много и они разные, например {MACROBUTTON Ссылка1 skaa}....{MACROBUTTON Ссылка100 арар}
так вот в обработчике событий этих полей имеется одна и та же строка
Visual Basic
1
Shell "D:\РабочаяПапка\MACROBUTTON.exe", vbNormalFocus
этот экзешник сделан в ВБ6 и там он в своём коде
Visual Basic
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
Sub Main()
 
    Set ObjectWord = GetObject(, "Word.Application")
 
    'отключаем дёргание экрана при выполнении кода
    ObjectWord.ScreenUpdating = False
 
    Dim SelectionFieldsCode As String
    'удаляем "MACROBUTTON"
    'в ВБА, разница в отсутствии Selection
    'SelectionFieldsCode = Trim$(Replace$(ObjectWord.Fields(1).Code, "MACROBUTTON", ""))
    'в ВБ6, разница в присутствии Selection
    SelectionFieldsCode = Trim$(Replace$(ObjectWord.Selection.Fields(1).Code, "MACROBUTTON", ""))
 
    'первый пробел в коде выделенного поля
    'Dim SpaceSelectionFieldsCode As Long
    'SpaceSelectionFieldsCode = InStr(SelectionFieldsCode, " ")
 
    Dim NameMacros As String
    'Mid$(String,Start,[Length])
    NameMacros = Mid$(SelectionFieldsCode, 1, InStr(SelectionFieldsCode, " ") - 1)
 
    If NameMacros = "Ссылка1"  Then
'делаю что хочу
End If
End Sub
выясняет какой именно MACROBUTTON нажат и действует по разному в зависимости от того что нажато
А по аналогии точно также можно сделать с кнопками или с макросами запускемыми по сочетанию клавиш, то есть нажали CTRL+А на это сочетание нажатых клавиш клавиатуры навешен макрос, например Макрос1, и там у него тоже прописываем только одну строку кода
Visual Basic
1
Shell "D:\РабочаяПапка\MACROBUTTON.exe", vbNormalFocus
но как экзешник поймёт что надо сделать??
хотя если сочетание нажатых клавиш клавиатуры, может и можно в ВБ6 отработать что нажато?, как?
а вот с кнопками в документе Ворд как быть?, чтобы на них повесить только одну строку кода
Visual Basic
1
Shell "D:\РабочаяПапка\MACROBUTTON.exe", vbNormalFocus
как экзешник поймёт что надо сделать??
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18033 / 7736 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
28.05.2012, 01:20
А ну теперь понятно:

Вам нужно в скомпилированной на VB6 программе получить значение переданного через командную строку аргумента. Т.е. вопрос по теме VB6.

VB6 не знаю. Но это обязано работать:
Visual Basic
1
2
If Len (Command) Then MsgBox Command, , "Command line parameters" _
 Else MsgBox "Не передано никаких параметров командной строки!", , "Error"
Посмотрите темы:
Функция Command
Не уверен обратно ли совместимо: MSDN Visual Studio My.Application.CommandLineArgs Property

Есть еще способы передать сторонней программе значение, но более "тяжелые":
1) через реестр;
2) глобальную переменную среды;
3) временный файл;
...
0
1712 / 579 / 76
Регистрация: 10.04.2009
Сообщений: 9,327
28.05.2012, 17:58  [ТС]
ответили по соседству:Сделать анализ первого параметра в Shell
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.05.2012, 17:58
Помогаю со студенческими работами здесь

Как вывести данные в один и тот же текстовый инпут, если необходимо использовать функции onClick с разных кнопок?
Задача: "Интернет-магазин" продаёт рамки для фотографий. Для заказа пользователь щёлкает на кнопку «в корзину», при этом в верхнем правом...

Как сделать для кнопок в MainMenu одну и ту же команду?
Как сделать для кнопок в MainMenu одну и туже команду?

Как сделать функцию для многократного запуска другой функции с разными параметрами первой
Здравствуйте. У меня есть функция: void MainWindow::StrategyCod() //код стратегии { //long long bar=0; //счетчик свечек ...

Где найти плагин для меню в сайдбаре с разными дочерними пунктами для разных раздедов сайта
В главном меню имеются подменю в некоторых пунктах, нужно чтобы при нажатии на родительский пункт меню из главного в сайдбаре появлялось...

Можно ли использовать команду TASKILL для потоков?
Друзья, коллеги и знатоки, нужен ваш совет. Ситуация такая. Есть процесс. Пусть он называется sacrifice.exe. После обновления...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru