Автоматический запуск файла в Excel по условию

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

pashulka
Сообщения: 831
Зарегистрирован: 24 ноя 2004, 03:46
Контактная информация:

19 июл 2006, 12:21

Sokl, На самом деле в моём примере ассоциация не важна и в этом можно убедиться воочию, а те кто действительно хотят открыть файл нужным приложением могут использовать функцию WinAPI - ShellExecute

Что же касается Вашего вопроса девушке, то Вы обоздали как минимум на один год :D
breeze
Сообщения: 23
Зарегистрирован: 18 июл 2006, 21:32

19 июл 2006, 13:45

pashulka, Спасибо большое!!!
Но появился ряд вопросов...Если мне надо не текстовой файл запустить, а звуковой..в частности вавник...
Тогда я меняю некотрые места в коде:
-----------------------------------------------------------------------------
Private Sub Worksheet_Change(ByVal Target As Excel.Range)

If Target.Count > 1 Then Exit Sub

If Target.Address = "$A$1" Or Target.Address = "$B$1" Then
If [Start] = True Then
iFullName$ = ThisWorkbook.Path & "\1.wav"
If Dir(iFullName$) <> "" Then
Shell "wmplayer.exe " & iFullName$, vbMaximizedFocus
Else
MsgBox "Никак не найду вавник", _
vbCritical + vbSystemModal, "Юзер!"
End If
End If
End If

End Sub
-------------------------------------------------------------------
Создаю в папке с примером файл 1.wav...
И переношу медиа плеер в корневую папку винды...
И всё бы ничего, только он вкупе с нужным файлом (1.wav) запускает ещё какие-то (которые в папке с примером не находятся)....и всё это дло не проигрывается....
что я не так делаю7...
И ещё:if у вас есть возможность (и желание) и вы можете написать прогу для трёх пар ячеек с такими же условиями, then буду вам очень признателен...
Порекомндуйте пожалуйста какую - нибудь литературу для чайника, что бы хоть как-то разобраться во всём этом (а то и научиться делать нечто подобное...),а то всё мое "програмирование" ограничивается поверхностным изучением паскаля в среднеё школе....
Спасибо большое!
pashulka
Сообщения: 831
Зарегистрирован: 24 ноя 2004, 03:46
Контактная информация:

19 июл 2006, 15:05

Breeze, Есть предложение: для проигрывания звуковых файлов, в частности .wav, использовать возможности WinAPI, например, что-то вроде нижеопубликованного кода :

Код: Выделить всё

Private Declare Function PlaySound Lib "winmm.dll" _
                Alias "PlaySoundA" ( _
                ByVal lpszName As String, _
                ByVal hModule As Long, _
                ByVal dwFlags As Long) As Long

Private Sub Worksheet_Change(ByVal Target As Range)
...
...
...
If Dir(iFullName$) <> "" Then
   PlaySound iFullName$, 0&, &H1
Else
   MsgBox "Никак не найду вавник", _
   vbCritical + vbSystemModal, "User!"
End If
...
...
...
End Sub
Что касается трёх пар ячеек, то Вы можете написать мне напрямую, что же касается литературы, то лично мне хватает справки, а вообще все хвалят Дж.Уокенбаха
breeze
Сообщения: 23
Зарегистрирован: 18 июл 2006, 21:32

19 июл 2006, 18:31

pashulka,Спасибо большое, всё работает!
Но если можно, есть ещё пара вопросов....
Если в той же книге создать второй лист и скопировать алгоритм, то сигнал включается при любом значении А1 (больше оно или меньше)...и при Б1...Почему7...
Уокенбаха реально нарыть в инете на халяву7...А то я полазил-везде только продажа..книга плюс сиди...
breeze
Сообщения: 23
Зарегистрирован: 18 июл 2006, 21:32

19 июл 2006, 20:51

Обозначился один немаловажный вопрос...
Сигнал не включается если мы меняем не саму ячейку, а ссылку...т.е. есть имеем ячейки А1 и Б1...Если мы вручную меняем значение ячейки А1 и оно становится больше значения Б1, то включается сигнал...Но если мы делаем ссылки - допустим А1=А2 и Б1=Б2 и меняем уже значения А2 и Б2 , то сигнала не происходит... Что можно сделать7..., это рушит все мои планы)....
Помогите пожалуйста...
Спасибо...
pashulka
Сообщения: 831
Зарегистрирован: 24 ноя 2004, 03:46
Контактная информация:

20 июл 2006, 01:00

Что касается второго листа, то при правильном копировании описанной проблемы не будет, впрочем, в данном случае гораздо проще внести небольшие изменения, чем раз'яснять возможную причину, поэтому пример с двумя листами можно скачать здесь. Ссылка на книгу Дж.Уокенбаха наличествовала на этом форуме.

Что касается ссылки, то нужно сразу определиться с приоритетами и при проверке указывать адреса ячеек, которые служат источником данных, или заменить событие Worksheet_Change() на Worksheet_Calculate() (но использование этого события имеет свои особенности - минусы)
breeze
Сообщения: 23
Зарегистрирован: 18 июл 2006, 21:32

20 июл 2006, 01:15

У меня ситуация следующая:есть ячейка А1, в которой значение периодически обнавляется через инет...
Необходимо подать сигнал, если значение А1 больше какого-то определённого (>Б1)...
Проблема в том, что при обновлении сигнал не возникает (как в случае с ручным вводом)...
breeze
Сообщения: 23
Зарегистрирован: 18 июл 2006, 21:32

20 июл 2006, 01:17

Поэтому ваш вариант на втором листе отпадает...(
pashulka
Сообщения: 831
Зарегистрирован: 24 ноя 2004, 03:46
Контактная информация:

20 июл 2006, 01:28

Надо сразу об'яснять поставленную задачу, в таком случае не будет искусственно замученого топика. Что касается решения, то - Worksheet_Calculate()
breeze
Сообщения: 23
Зарегистрирован: 18 июл 2006, 21:32

20 июл 2006, 01:51

Надо сразу об'яснять поставленную задачу
Извените...

Worksheet_Calculate( ЧТО ЗДЕСЬ НАПИСАТЬ7) Если оставить "ByVal Target As Range", то он пишет что мол заявленная процедура не совпадает с коментарием...ну, или что-то типа того...
Ответить