вот пожалуйста для эксперимента выкладываю пример с макросом и там на листе1 в ячейке B4 задайте текущее время и к нему прибавляется + 1минута, которая уже введена в соседней ячейке C4, чтобы макрос выполнялся по времени до наступления текущего времени на 1 минуту большего. И на Листе2 нажмите на кнопку, чтобы проверить как работает макрос, он с периодичностью в 1 секунду переходит на листе2 с ячейки F6 на ячейку F7 и наоборот. И в макросах за это отвечает код:
Код
Sub проба()
проверка True, [B4].Value + [C4].Value
End Sub
Если запустить макрос "проба" на Листе1, то он будет работать, так как значения из ячеек B4 и C4 он увидит в этом листе ! Вот и проверьте свои предложенные варианты! Они не пашут! Жду очень правильного решения....
У меня есть кусок макроса, который определяет какой макрос выполнить макрос1 или макрос2, и как видно из кода выполнение макроса1 происходит до суммарного времени, которое получается при сложении значений времени из ячеек D4 и D5 в активном листе, в которых введено время в формате 00:00:00
Код
Sub транслировать_видео_из_текущего_плейлиста()
If Sheets("лист1").Range("A5").Value = ЛОЖЬ Then
макрос1 True, [D4].Value + [D5].Value
Else
макрос2 False
End If
End Sub
Так вот вопрос мой такой - как мне прописать адреса ячеек D4 и D5 не из активного листа, а из другого с его названием? Т.е. я так понимаю должно быть что-то типа макрос1 True, [Лист2!D4].Value + [Лист2!D5].Value Но такой вид конечно не работает, а какой вид должен быть подскажите?
vikttur, предложенный способ я и сам знаю, но он мне не подходит, так как код самого цикла имеет очень большой размер !!! поэтому я и хотел узнать - есть ли способ чтобы не писать 2 раза огромные коды циклов, а сразу определить по какому условию работать циклу и написать его огромный код только 1 раз !!! ну раз так нельзя, то значит буду 2 раза свой огромный цикл прописывать !!!
vikttur написал: Вы описывали не ЗАДАЧУ, а придуманный ПУТЬ РЕШЕНИЯ какой-то ЗАДАЧИ!
а другого пути и нет для моей задачи. Так как у меня есть огромный список из ссылок на видео файлы на компьютере и также в соседнем столбце есть время продолжительности этих фалов. И мне надо их транслировать постоянно, но иногда в разных режимах: 1) я ввожу значение "1" в ячейке А5 и ввожу в ячейку D4 время окончания трансляции, после этого нажимаю на кнопку запуска трансляции и в это время из ячейки D4 цикл транслирования прекращается 2) я удаляю значение в ячейке А5, после этого нажимаю на кнопку запуска трансляции и цикл транслирования не прекращается никогда, так как время трансляции я сам по факту определяю, нажав Ctrl+Break, так как другого способа остановить бесконечный цикл нет Вот такая у меня задача. И что вам теперь это даст ?
вот задача: я её уже описывал как видно из кода - я хочу чтобы до начала цикла определялось бы условие для него! Т.е. если на листе1 в ячейке А5 введено значение "1", то цикл бы выполнялся с условием Do Until TimeValue(Now) >= Range("D4").Value (или другими словами до наступления указанного времени в ячейке D4) а если бы на листе1 в ячейке А5 было бы не введено значение "1", то цикл бы выполнялся с условием Do Until TimeValue(Now) <> TimeValue(Now) (или другими словами бесконечно, пока вручную не оставишь цикл, нажав Ctrl+Break)
vikttur написал: Вот это вообще бессмыслица - время не равно само себе:Код ? 1TimeValue(Now) <> TimeValue(Now)
ну скажите как нужно написать выбор условия для цикла когда надо работать бесконечно, а когда до указанного в ячейке времени !! а не писать что отдельно какие-то куски кода неверные. я и сам понимаю что здесь много есть ошибок и спрашиваю как надо правильно писать
vikttur написал: go1 сразу получает булево значение (True, False), его Вы и передаете в циклSet - это присвоение объекта переменой, здесь вообще не к месту.
так вот такой код также не работает как нужно
Код
Dim go1
If Sheets("ÏÓÍÊÒ ÓÏÐÀÂËÅÍÈß").Range("A5").Value = ËÎÆÜ Then
go1 = TimeValue(Now) >= Range("D4").Value
Else
go1 = TimeValue(Now) <> TimeValue(Now)
End If
Do Until go1
Range("D12").Select
Application.Wait Time:=Now + TimeValue("00:00:01")
Range("D13").Select
Application.Wait Time:=Now + TimeValue("00:00:01")
Loop
и всегда для цикла определяется условие бесконечно работать Do Until TimeValue(Now) <> TimeValue(Now)
Sub проба()
Dim go1
If Sheets("Лист1").Range("A5").Value = 1 Then
Set go1 = TimeValue(Now) >= Range("D4").Value
Else
Set go1 = TimeValue(Now) <> TimeValue(Now)
End If
Do Until go1
Range("D12").Select
Application.Wait Time:=Now + TimeValue("00:00:01")
Range("D13").Select
Application.Wait Time:=Now + TimeValue("00:00:01")
Loop
End Sub
как видно из кода - я хочу чтобы до начала цикла определялось бы условие для него! Т.е. если на листе1 в ячейке А5 введено значение "1", то цикл бы выполнялся с условием Do Until TimeValue(Now) >= Range("D4").Value (или другими словами до наступления указанного времени в ячейке D4) а если бы на листе1 в ячейке А5 было бы не введено значение "1", то цикл бы выполнялся с условием Do Until TimeValue(Now) <> TimeValue(Now) (или другими словами бесконечно, пока вручную не оставишь цикл, нажав Ctrl+Break)
Но проблема в том, что такой код будет всегда задавать условие для цикла работать бесконечно (Do Until TimeValue(Now) <> TimeValue(Now))
Я так понимаю, что проблема кроется или в объявлении переменной Dim go1 или выборе выражения для условия окончания цикла в зависимости от значения в ячейке А5. Подскажите в чём моя проблема? Как здесь правильно будет задание переменной и определение выражения для цикла?
вставить скопированные данные из excel в окно видеоплеера или запустить видеофайлы из excel ?, как можно вставить скопированные данные из excel в окно видеоплеера или как запустить видеофайлы из excel ?
этот код открывает видеофайл, путь к которому указан в активной ячейке в excel, с помощью указанной программы Potplayer. всё решение найдено, всем спасибо!!!
и пробел в указании пути к программе между PotPlayerMini64.exe и кавычками \PotPlayerMini64.exe " - ОБЯЗАТЕЛЕН !!!! иначе не работает !!!
вставить скопированные данные из excel в окно видеоплеера или запустить видеофайлы из excel ?, как можно вставить скопированные данные из excel в окно видеоплеера или как запустить видеофайлы из excel ?
прикладываю свой файл для просмотра моего кода excel. Задача такая : у меня в excel есть список видеофайлов, пути к которым указаны в отдельных ячейках. В частности сейчас пока нужно так - макрос у меня с именем "Sub поиск_и_передача_окну_видеоплеера_Potplayer_адреса_видеофайла()" будет копировать адрес к файлу из ячейки A2 и делать активным уже запущенное ранее окно видеоплеера PotPlayer и вставлять в него скопированный адрес файла путём передачи сочетания клавиш Ctrl+V. Окно плеера делается активным, но вот вставить данные не могу. А в этом видеоплеере если что по нажатию клавиш Ctrl+V вставляется путь к файлу из буфера обмена и начинается его проигрывание !
Public Function GetDuration(sHref$) As Single
Dim oFile As Object
On Error Resume Next
Set oFile = GetDesktop.parsename(sHref)
GetDuration = TimeValue(oFile.Parent.getdetailsof(oFile, 27))
Set oFile = Nothing
End Function
Private Function GetDesktop()
Static Desktop As Object
If Desktop Is Nothing Then
Set Desktop = CreateObject("shell.application").Namespace(0)
End If
Set GetDesktop = Desktop
End Function
и вставил формулу в ячейку В2 =GetDuration(A2)
НО НИЧЕГО НЕ РАБОТАЕТ !! пишет ошибку в формуле #ИМЯ?
может кто-то сделать готовый вариант в excel и выложить тут, а то не сильно разбираюсь если мне отдельно какие-то кусочки пазла дают, а что куда надо вставлять ещё кроме этого я не знаю.. мне надо полностью расписать что и куда писать, а лучше как я сказал приложить файл в excel !!
на форуме я нашёл тему с решением похожей задачи, что и у меня https://www.planetaexcel.ru/forum/index.php?PAGE_NAME=message&FID=1&TID=123761&a... но там рассматривается вариант, при котором надо указывать папку на компьютере, в которой находятся нужные видеофайлы, для получения их данных. И при чём ещё и ограниченно выбираются расширения файлов ("*.avi;*.mp4;*.wmv;*.vob"), а если у меня есть и другие форматы видео, то как быть ??? Я создал и приложил свой вариант для наглядности, чтобы вы понимали как я хочу получать длительность видеофайлов.
Там создан список где указаны пути к каждому видеофайлу отдельно, типа \\Максим-пк\2- музыка\2- Клипы и концерты\- Зарубежные исполнители\The Dream Academy - Life In A Northern Town.mp4 но путь также может быть и другим, например
D:\2- музыка\2- Клипы и концерты\- Зарубежные исполнители\The Dream Academy - Life In A Northern Town.mp4
И я создал типа кнопку синюю, при нажатии на которую, выполнялся бы макрос для получения только длительности каждого видеофайла из моего списка и длительность бы вставлялась напротив пути к файлу справа в столбце В. И ещё у меня список в примере небольшой из 8 файлов, а может быть очень большим порядка 5000 файлов и мне надо чтобы макрос понимал и проверял есть ли в следующей нижней ячейке в столбце А путь к файлу, и если есть, то вставлял бы продолжительность файла, а если пути нет и ячейка пустая, то макрос бы перестал работать и остановился бы.
Для понятия или сравнения я скопировал из вышеуказанной темы на форуме один рабочий вариант получения нескольких данных файлов из указанной папки. Но мне не нужно указывать папку с файлами, у меня уже есть созданный список файлов и мне нужно узнать только продолжительность это я так понял данные в коде objFolder.GetDetailsOf(File, 27)
Sub PagesCount()
With ActiveSheet
.Range("L2") = .HPageBreaks.Count + 1
fRow = .HPageBreaks(.HPageBreaks.Count).Location.Cells.Row
lRow = .Cells(.Rows.Count, 2).End(xlUp).Row
.Range("L3") = lRow - fRow + 1
End With
End Sub
Да нормально, но есть один минус, если скрываем к примеру все строки на последней странице, то макрос выдает ошибку !!!!!! Можно подкорректировать с учетом этого ?! Я забыл добавить, что некоторые строки я могу не удалять а еще и скрывать !!!
Получается у меня 1 страница и на ней 37 строк, но макрос не хочет эти данные давать !!!!
Да нормально, но есть один минус, если скрываем к примеру все строки на последней странице, то макрос выдает ошибку !!!!!! Можно подкорректировать с учетом этого ?! Я забыл добавить, что некоторые строки я могу не удалять а еще и скрывать !!!
Получается у меня 1 страница и на ней 37 строк, но макрос не хочет эти данные давать !!!!
У меня есть лист, где я удаляю старые строки или добавляю новые строки с данными по мере поступления данных. После этого на листе происходит изменение положения разрыва страниц и в итоге кол-во страниц может быть 1шт, а может быть и более. Для наглядности я прикладываю файл с примером..... Так вот мне нужно чтобы после добавления или удаления строк я нажимал на кнопку и макрос определял и вводил в ячейки следующие данные : на листе в ячейке L2 - сколько стало страниц, а в ячейке L3 - сколько строк на последней странице (если кол-во страниц более 1 шт / или же на первой странице, если кол-во страниц 1шт). ПОМОГИТЕ, ПОДСКАЖИТЕ команды макроса как это можно сделать ?!?!?!?!
я хочу видеть что в ячейке ввелось в итоге, если Numlock был включен, то в ячейке введется цифра 5, а если Numlock был выключен, то в ячейке ничего не введется и от этого уже дальше отталкиваться !
нет это не то !!!!! это вы таким образом просто пишите символ 5 в ячейку, а мне нужно чтобы нажималась именно клавиша "5" справа где стрелки !!! (т.е. На numpad)
Слэн написал: написал как понял сам, так? ps ничего не проверяет, просто включает намлук
Прикрепленные файлы 111.xlsm (16.6 КБ)
Изменено: Слэн - 29 Июн 2015 11:26:02
Живи и дай жить..
не подходит - включать я и сам знаю как NumLock, и если Numlock был включен до срабатывания макроса, то после его выполнения Numlock наоборот выключается, т.е. команда работает не только как включение, но и как выключение в случае повторного выполнения, А мне нужно именно включать Numlock если он при этом не включен, а как это проверить незнаю !!!!! Может есть какая команда работающая только на включение Numlock и повторно не выключающая его ?????
я к людям обращаюсь за помощью - пока её не получил, что ещё надо-то ???? как кто-то поможет я его ОЧЕНЬ ОТБЛАГОДАРЮ !!!!!, что мне теперь на каждый неподходящий совет отвечать неподходит ????
прикладываю файл для наглядности, где после нажатия на кнопку выделяется ячейка Н6 и нажимается клавиша numpad5 (т.е. это клавиша справа, где цифры и стрелки, которые завязаны на NumLock), так вот почему не работает команда Application.SendKeys "{NUMPAD5}" ????????