Sokl, На самом деле в моём примере ассоциация не важна и в этом можно убедиться воочию, а те кто действительно хотят открыть файл нужным приложением могут использовать функцию WinAPI - ShellExecute
Что же касается Вашего вопроса девушке, то Вы обоздали как минимум на один год
Автоматический запуск файла в Excel по условию
Модератор: Naeel Maqsudov
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 буду вам очень признателен...
Порекомндуйте пожалуйста какую - нибудь литературу для чайника, что бы хоть как-то разобраться во всём этом (а то и научиться делать нечто подобное...),а то всё мое "програмирование" ограничивается поверхностным изучением паскаля в среднеё школе....
Спасибо большое!
Но появился ряд вопросов...Если мне надо не текстовой файл запустить, а звуковой..в частности вавник...
Тогда я меняю некотрые места в коде:
-----------------------------------------------------------------------------
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 буду вам очень признателен...
Порекомндуйте пожалуйста какую - нибудь литературу для чайника, что бы хоть как-то разобраться во всём этом (а то и научиться делать нечто подобное...),а то всё мое "програмирование" ограничивается поверхностным изучением паскаля в среднеё школе....
Спасибо большое!
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
pashulka,Спасибо большое, всё работает!
Но если можно, есть ещё пара вопросов....
Если в той же книге создать второй лист и скопировать алгоритм, то сигнал включается при любом значении А1 (больше оно или меньше)...и при Б1...Почему7...
Уокенбаха реально нарыть в инете на халяву7...А то я полазил-везде только продажа..книга плюс сиди...
Но если можно, есть ещё пара вопросов....
Если в той же книге создать второй лист и скопировать алгоритм, то сигнал включается при любом значении А1 (больше оно или меньше)...и при Б1...Почему7...
Уокенбаха реально нарыть в инете на халяву7...А то я полазил-везде только продажа..книга плюс сиди...
Обозначился один немаловажный вопрос...
Сигнал не включается если мы меняем не саму ячейку, а ссылку...т.е. есть имеем ячейки А1 и Б1...Если мы вручную меняем значение ячейки А1 и оно становится больше значения Б1, то включается сигнал...Но если мы делаем ссылки - допустим А1=А2 и Б1=Б2 и меняем уже значения А2 и Б2 , то сигнала не происходит... Что можно сделать7..., это рушит все мои планы)....
Помогите пожалуйста...
Спасибо...
Сигнал не включается если мы меняем не саму ячейку, а ссылку...т.е. есть имеем ячейки А1 и Б1...Если мы вручную меняем значение ячейки А1 и оно становится больше значения Б1, то включается сигнал...Но если мы делаем ссылки - допустим А1=А2 и Б1=Б2 и меняем уже значения А2 и Б2 , то сигнала не происходит... Что можно сделать7..., это рушит все мои планы)....
Помогите пожалуйста...
Спасибо...
Что касается второго листа, то при правильном копировании описанной проблемы не будет, впрочем, в данном случае гораздо проще внести небольшие изменения, чем раз'яснять возможную причину, поэтому пример с двумя листами можно скачать здесь. Ссылка на книгу Дж.Уокенбаха наличествовала на этом форуме.
Что касается ссылки, то нужно сразу определиться с приоритетами и при проверке указывать адреса ячеек, которые служат источником данных, или заменить событие Worksheet_Change() на Worksheet_Calculate() (но использование этого события имеет свои особенности - минусы)
Что касается ссылки, то нужно сразу определиться с приоритетами и при проверке указывать адреса ячеек, которые служат источником данных, или заменить событие Worksheet_Change() на Worksheet_Calculate() (но использование этого события имеет свои особенности - минусы)
У меня ситуация следующая:есть ячейка А1, в которой значение периодически обнавляется через инет...
Необходимо подать сигнал, если значение А1 больше какого-то определённого (>Б1)...
Проблема в том, что при обновлении сигнал не возникает (как в случае с ручным вводом)...
Необходимо подать сигнал, если значение А1 больше какого-то определённого (>Б1)...
Проблема в том, что при обновлении сигнал не возникает (как в случае с ручным вводом)...
Поэтому ваш вариант на втором листе отпадает...(
Надо сразу об'яснять поставленную задачу, в таком случае не будет искусственно замученого топика. Что касается решения, то - Worksheet_Calculate()
Извените...Надо сразу об'яснять поставленную задачу
Worksheet_Calculate( ЧТО ЗДЕСЬ НАПИСАТЬ7) Если оставить "ByVal Target As Range", то он пишет что мол заявленная процедура не совпадает с коментарием...ну, или что-то типа того...