У меня есть кусок макроса, который определяет какой макрос выполнить макрос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 Но такой вид конечно не работает, а какой вид должен быть подскажите?
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. Задача такая : у меня в excel есть список видеофайлов, пути к которым указаны в отдельных ячейках. В частности сейчас пока нужно так - макрос у меня с именем "Sub поиск_и_передача_окну_видеоплеера_Potplayer_адреса_видеофайла()" будет копировать адрес к файлу из ячейки A2 и делать активным уже запущенное ранее окно видеоплеера PotPlayer и вставлять в него скопированный адрес файла путём передачи сочетания клавиш Ctrl+V. Окно плеера делается активным, но вот вставить данные не могу. А в этом видеоплеере если что по нажатию клавиш Ctrl+V вставляется путь к файлу из буфера обмена и начинается его проигрывание !
на форуме я нашёл тему с решением похожей задачи, что и у меня 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)
У меня есть лист, где я удаляю старые строки или добавляю новые строки с данными по мере поступления данных. После этого на листе происходит изменение положения разрыва страниц и в итоге кол-во страниц может быть 1шт, а может быть и более. Для наглядности я прикладываю файл с примером..... Так вот мне нужно чтобы после добавления или удаления строк я нажимал на кнопку и макрос определял и вводил в ячейки следующие данные : на листе в ячейке L2 - сколько стало страниц, а в ячейке L3 - сколько строк на последней странице (если кол-во страниц более 1 шт / или же на первой странице, если кол-во страниц 1шт). ПОМОГИТЕ, ПОДСКАЖИТЕ команды макроса как это можно сделать ?!?!?!?!
прикладываю файл для наглядности, где после нажатия на кнопку выделяется ячейка Н6 и нажимается клавиша numpad5 (т.е. это клавиша справа, где цифры и стрелки, которые завязаны на NumLock), так вот почему не работает команда Application.SendKeys "{NUMPAD5}" ????????
Вот нашёл такой макрос вроде он должен проверять при появлении формы состояние включён или нет NumLock и если он выключен, то включает его. адрес http://www.cyberforum.ru/post7348199.html
я прикладываю пример, который я создал файл 111.xlsm, проверяйте в нём, нажимаете на синюю кнопку и появляется форма после чего должна идти проверка состояния NumLock и т.д. описываю последовательно свои действия, а создал форму и в её коде прописал, то что указано на скриншоте 1, и как видно сразу начал ругаться на надпись "Option Compare Database" (выделяя её красным), если я её удалю, что по-моему уже неправильно, то вроде всё нормально в коде, но когда я вызываю форму по кнопке, то он опять ругается только на "Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer" (см. скриншот 2).
ПОМОГИТЕ !!!! Я не понимаю что я деляю не так ???? Где нужно что прописывать ???? Или же этот код вообще здесь не прокатит ???
Private Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszName As String, ByVal dwFlags As Long) As Long Private Declare Function mciExecute Lib "winmm.dll" (ByVal lpstrCommand As String) As Long
Sub музыка() Call sndPlaySound("D:\песня.wav", 1) End Sub
и мне нужно, чтобы эта песня проигрывалась постоянно с повтором, т.е. когда песня доиграла до конца, то она опять должна играть сначала. И ещё если это важно, то мне это нужно для создания фоновой музыки, т.е. в процессе воспроизведения этой музыки с повтором я могу ещё также запускать и другие звуковые файлы wav. А когда мне нужно остановить фоновую музыку, то я запускаю этот макрос :
Sub остановка_музыки() Call sndPlaySound("", 4) End Sub
Как мне нужно прописать код для повтора проигрывания wav файла ???
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) If SaveAsUI Then MsgBox "Предупреждение...", 16, "Внимание" End Sub
т.е. если мы нажимаем команду "сохранить как", то появляется это сообщение. Но на одном листе есть кнопка на которую поставлен макрос :
Sub окно_сохранения_документа() Application.Dialogs(xlDialogSaveAs).Show End Sub
Этим макросом я как раз и запускаю команду "сохранить как", но мне не нужно чтобы при этом появлялось то вышеуказанное сообщение. Как это сделать не подскажите ?????
подскажите пожалуйста, мне нужно чтобы макрос выводил сообщение типа : MsgBox "Внимание осторожно...", 64, "Предупреждение" после того, если я нажал на команду "сохранить как". Т.е. если я нажимаю на "сохранить как", то до появления окна сохранения должно показываться это сообщение, а затем уже появляется само окно сохранения.
но потом, когда я исправил ошибки, мне нужно убрать заливку с этих ячеек, т.е. сделать их без заливки. И у меня на листе есть также ячейки с постоянной заливкой другими цветами, кроме красного с кодом ColorIndex = 3. Мне нужно выделить именно с этим кодом заливки ячейки без ошибок и убрать с них заливку. Как это сделать не пойму, подскажите пожалуйста..........
У меня есть книга в которой много листов, книга не находится в режиме "только для чтения" все листы кроме одного с названием "старт" очень скрыты (параметр 2) у меня стоит защита при открытии книги появляется на листе "старт" окно ввода пароля и логина чтобы предоставить доступ к разрешенным листам. Так вот при закрытии книги она не спрашивает сохранять ли изменения или нет и сразу сохраняет всё что изменилось и закрывается. А мне нужно чтобы она при закрытии спрашивала сохранять или нет изменения, как это сделать я не понял! помогите мне пожалуйста. У меня в коде на книге введён такой код : см.ниже (сначала у меня еще есть лист "Лог действий" в который все изменения вносятся, пишется код для него а потом последние 2 кода прописаны как раз на закрытие книги и скрытие всех листов) ----------------------------------------------------------------------------------
Option Explicit Public sValue As String Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) If Sh.Name = "Лог действий" Then Exit Sub Dim sLastValue As String Dim lLastRow As Long On Error Resume Next If Err.Number <> 0 Then Err.Clear: Exit Sub
With Sheets("Лог действий") lLastRow = .Cells.SpecialCells(xlLastCell).Row + 1 If lLastRow = Rows.Count Then Exit Sub Application.ScreenUpdating = False: Application.EnableEvents = False .Cells(lLastRow, 1) = CreateObject("wscript.network").ComputerName .Cells(lLastRow, 2) = Format(Now, "dd.mm.yyyy HH:MM:SS") .Cells(lLastRow, 3) = Sh.Name .Cells(lLastRow, 4) = Target.Address(0, 0) .Cells(lLastRow, 5) = sValue If Target.Count > 1 Then Dim rCell As Range For Each rCell In Intersect(Target, Sh.UsedRange) If Not IsError(Target) Then sLastValue = sLastValue & "," & rCell Else sLastValue = sLastValue & "," & "Err" Next rCell sLastValue = Mid(sLastValue, 2) Else If Not IsError(Target) Then sLastValue = Target.Value Else sLastValue = "Err" End If .Cells(lLastRow, 6) = sLastValue End With Application.ScreenUpdating = True: Application.EnableEvents = True End Sub
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) If Sh.Name = "Лог действий" Then Exit Sub If Target.Count > 1 Then Dim rCell As Range For Each rCell In Intersect(Target, Sh.UsedRange) If Not IsError(rCell) Then sValue = sValue & "," & rCell Else sValue = sValue & "," & "Err" Next rCell sValue = Mid(sValue, 2) Else If Not IsError(Target) Then sValue = Target.Value Else sValue = "Err" End If
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean) Application.ScreenUpdating = False Dim wsSh As Worksheet Sheets("старт").Visible = -1 For Each wsSh In ThisWorkbook.Sheets If wsSh.Name <> "старт" Then wsSh.Visible = 2 Next wsSh Application.ScreenUpdating = 1 ThisWorkbook.Save End Sub
Private Sub Workbook_Open() Application.ScreenUpdating = False ThisWorkbook.Sheets("старт").Visible = -1 Application.ScreenUpdating = 1 End Sub
Смотрите что мне требуется : на первом листе "список" у меня есть список с введенными значениями, а на втором листе "вывод значения" у меня должно в указанной ячейке выводиться последнее введенное значение в списке на первом листе. Причем значения вводятся сверху вниз в списке, т.е. следующие значения, если в верхней ячейке уже введено что-то, будут вводиться в нижней следующей ячейке и так далее. Т.е. старые значения уже не меняются, а только дополняются ниже новыми значениями.
Подскажите пожалуйста какой макрос здесь можно применить или формулу ??? и если можно выложите пример с этим макросом или формулой !!!???
не знаю почему, но вначале все работало нормально, а потом когда я запускаю макрос появляется ошибка overflow, я нажимаю "End" и потом сразу же нажимаю опять на запуск макроса и тогда он выполняется... и я заметил что это происходит именно из-за макроса лога действий, который введен в тексте самой книги. я приложил пример, где на листе1 находится кнопка с макросом, а на листе "Лог действий" показывается весь лог действий в этой книге.... посмотрите и подскажите, почему так происходит, может нужно что-то подкорректировать ????
Описываю свою проблему : мне дали макрос, который ведёт лог всех действий в книге ,выглядит так :
Option Explicit Public sValue As String Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) If Sh.Name = "LOG" Then Exit Sub Dim sLastValue As String Dim lLastRow As Long
With Sheets("LOG") lLastRow = .Cells.SpecialCells(xlLastCell).Row + 1 If lLastRow = Rows.Count Then Exit Sub Application.ScreenUpdating = False: Application.EnableEvents = False .Cells(lLastRow, 1) = CreateObject("wscript.network").UserName .Cells(lLastRow, 2) = Target.Address(0, 0) .Cells(lLastRow, 3) = Format(Now, "dd.mm.yyyy HH:MM:SS") .Cells(lLastRow, 4) = Sh.Name .Cells(lLastRow, 5) = sValue If Target.Count > 1 Then Dim rCell As Range For Each rCell In Intersect(Target, Sh.UsedRange) If Not IsError(Target) Then sLastValue = sLastValue & "," & rCell Else sLastValue = sLastValue & "," & "Err" Next rCell sLastValue = Mid(sLastValue, 2) Else If Not IsError(Target) Then sLastValue = Target.Value Else sLastValue = "Err" End If .Cells(lLastRow, 6) = sLastValue End With Application.ScreenUpdating = True: Application.EnableEvents = True End Sub
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) If Sh.Name = "LOG" Then Exit Sub If Target.Count > 1 Then Dim rCell As Range For Each rCell In Intersect(Target, Sh.UsedRange) If Not IsError(rCell) Then sValue = sValue & "," & rCell Else sValue = sValue & "," & "Err" Next rCell sValue = Mid(sValue, 2) Else If Not IsError(Target) Then sValue = Target.Value Else sValue = "Err" End If End Sub
Получается в первом столбце он выводит имя учетной записи того пользователя, который сделал изменения где-то. Но сейчас у меня имя учетной записи введено "Максим" и он его ипоказывает ,но мне необходимо его поменять и я зашел в Windows XP - Пуск - Настройка - Панель управления - Учетные записи пользователей и там сменил имя было написано "Максим" а я сменил его на другое имя, но почему-то в excel макрос все равно выдавал старое имя "Максим".... Может я что-то не там поменял ??? подскажите пожалуйста где что нужно изменить, чтобы было правильно....
Задача такая : я приложил файл для наглядного примера того, что мне нужно. На Лист1 в ячейке B2 я могу вводить всякие значения (цифровые), т.е. я ввожу какое-то значение и нажимаю Enter и у меня ниже в списке изменений значений должно отобразиться дата и время когда это произошло. Или же я могу удалить введённое ранее значение и тогда в ячейке В2 будет пусто и этот момент тоже должен быть отображён в списке изменений значений.
В файле я описал для примера какие значения и когда я вводил в ячейку В2, т.е. он уже имеет окончательный вид, но только без формул и макросов.
Как это можно сделать в excel кто-нибудь знает ??? подскажите пожалуйста....
описываю что мне нужно : на листе1 в ячейке В5 введена формула "=А1+Лист2!А1" и мне нужно скопировать эту формулу на Лист3 в ячейку С7, но с условием чтобы эта формула не менялась, т.е. после копирования на листе3 в ячейке С7 должна появиться формула "=А1+Лист2!А1". подскажите пожалуйста макрос для этого действия....
проблема такая : у меня на листе1 в ячейке А1 введена формула "=А5+Лист2!А1+Лист3!В1" и мне нужно на листе 4 в ячейку В2 скопировать эту формулу без изменений, т.е. чтобы было также "=А5+Лист2!А1+Лист3!В1". мне дали такой макрос: Sheets("Лист4").Range("B2").Formula = Sheets("Лист1").Range("A1").Formula но у меня он не работает именно в таком виде, может здесь что-то нужно дописать ,чтобы такой макрос заработал или же подскажите другой макрос
я раньше создал похожую тему, но почему-то у меня перестала отображаться в браузере эта страница, поэтому я создаю новую и немного другую тему.
смотрите допустим у меня на Листе в ячейке В5 введена формула "=А1+В1+Лист3!А1" , и если эта формула редактировалась, т.е. удалялась, добавлялись какие-то данные, т.е. она перестала быть равной "=А1+В1+Лист3!А1" и имеет другой вид, то на этом же Листе в ячейке В10 отобразилось значение 2. а если формула равна "=А1+В1+Лист3!А1", то отобразилось бы значение 1.
все просто.... но как это сделать с помощью формулы или макроса подскажите пожалуйста...
Смотрите какая ситуация у меня : Excel 2007, в книге есть 2 листа "лист1" и "лист2" и допустим на листе1 в ячейке В5 введена формула неважно какая (т.е. =.....), а на листе2 мне нужно в ячейке С5 видеть, стиралась или изменялась ли эта формула или нет. Т.е. если формула не стиралась, на листе2 в ячейке С5 мне нужно значение 1 ; если формула изменялась (т.е. что-то добавилось или ссылки на данные изменились),то на листе2 в ячейке С5 мне нужно значение 2 ; а если формула вообще стерта (т.е. ничего не введено "пусто" или же введено какое-то значение без знака равно), то на листе2 в ячейке С5 мне нужно значение 3.
Желательно сделать это с помощью формулы, а если нет такой возможности то тогда уж макросом.
Подскажите пожалуйста как мне можно определить одну вещь : Например: У меня на Листе1 в ячейке В2 введена формула =С4+Е4 , а на Листе2 допустим в ячейке В3 мне нужно, чтобы показывалось что введено на Листе1 в ячейке В2. Т.е. если в ней введена формула =С4+Е4 , то тогда на Листе2 в ячейке В3 мне к примеру показывалось бы 1, или если же эта формула стерта и в ячейке пусто или введено какое-то значение даже если это 0 (т.е. "0" или "=0" или 1 или "=1") тоесть формула там которая была введена стерта или же изменена, т отогда мне бы показывалось 2 к примеру. Вот как это можно сделать чтобы распознать ???
Скажите как мне нужно прописать в макросе, чтобы после проверки моего условия макрос перешёл на лист3 в заданную ячейку. у меня прописано сейчас так: Then Application.Goto Reference:="R135C47" но этот макрос переходит в заданную ячейку на этом листе, а у меня этот литс другой, мне нужно перейти на Лист3 в заданную ячейку. как это прописать ???
В excel 2007 в книге у меня есть несколько листов, в одном листе в нужной мне ячейке, если мне надо я могу ввести какое-то значение или вообще ничего не вводить. И если в этой ячейке введено что-то, то можно ли в другом листе вывести сообщение-предупреждение с текстом, который я введу. Чтобы внизу сообщения была кнопка "ОК" чтобы его закрыть...
У меня в книге excel 2007 есть уже рабочий макрос, который скрывает все пустые строки, (т.е. те строки, значение в первой ячейке в первом столбце у которых равно 0):
Application.ScreenUpdating = False For x = 1 To Columns("A:A").SpecialCells(xlLastCell).Row If Cells(x, 1) = 0 Then Rows(x).Hidden = True Next x Application.ScreenUpdating = True
Так вот это процесс занимает определенное время для выполенния и я сделал макрос, который в начале переходит на ячейку, где я написал просто примерное время выполения процесса и сделал пояснения , что нужно подождать (так сказать экран ожидания выполнения процесса).
макрос такой:
Application.Goto Reference:="R158C1"
И мне захотелось сделать чтобы во время выполнения этого процесса показывался индикатор выполнения процесса (т.е. нарисованная линия с постепенным появлением 10 квадратиков - от 10% до 100%) и я сделал несколько таких экранов ожидания с этим индикатором, и в нужных ячейках ввел значения 10, 20, 30 ... 100 (т.е. проценты как-бы выполнения). и когда процесс скрытия строк определяет, что значение допутим равно 10, то переходит на ячейку где у меня экран ожидания с индикатором выполенния на 10% и так далее, вот что у меня получилось, но это не работает правильно :
Application.ScreenUpdating = False For x = 1 To Columns("A:A").SpecialCells(xlLastCell).Row If Cells(x, 1) = 0 Then Rows(x).Hidden = True If Cells(x, 1) = 10 Then Rows(x).Hidden = True Application.ScreenUpdating = True Application.Goto Reference:="R160C1" Application.ScreenUpdating = False If Cells(x, 1) = 20 Then Rows(x).Hidden = True Application.ScreenUpdating = True Application.Goto Reference:="R162C1" Application.ScreenUpdating = False If Cells(x, 1) = 30 Then Rows(x).Hidden = True Application.ScreenUpdating = True Application.Goto Reference:="R164C1" Application.ScreenUpdating = False If Cells(x, 1) = 40 Then Rows(x).Hidden = True Application.ScreenUpdating = True Application.Goto Reference:="R166C1" Application.ScreenUpdating = False If Cells(x, 1) = 50 Then Rows(x).Hidden = True Application.ScreenUpdating = True Application.Goto Reference:="R168C1" Application.ScreenUpdating = False If Cells(x, 1) = 60 Then Rows(x).Hidden = True Application.ScreenUpdating = True Application.Goto Reference:="R170C1" Application.ScreenUpdating = False If Cells(x, 1) = 70 Then Rows(x).Hidden = True Application.ScreenUpdating = True Application.Goto Reference:="R172C1" Application.ScreenUpdating = False If Cells(x, 1) = 80 Then Rows(x).Hidden = True Application.ScreenUpdating = True Application.Goto Reference:="R174C1" Application.ScreenUpdating = False If Cells(x, 1) = 90 Then Rows(x).Hidden = True Application.ScreenUpdating = True Application.Goto Reference:="R176C1" Application.ScreenUpdating = False If Cells(x, 1) = 100 Then Rows(x).Hidden = True Application.ScreenUpdating = True Application.Goto Reference:="R178C1" Application.ScreenUpdating = False Next x Application.ScreenUpdating = True
Подскажите что я ввел не так ??? Или может быть есть другой вариант чтобы показывался индикатор выполнения процесса ??? помогите кто знает, спасибо !!!
Помогите кто знает !? Есть такая формула =ЯЧЕЙКА("имяфайла") ,но она выдаёт не только диск,папку и название самого файла, но и название листа, в котором введена эта формула. А мне нужно чтобы выводилось без названия листа где введена эта формула например: я создал файл с названием "расчет для цены 1.xlsm на диске С в папке "Расчеты" если я ее введу на листе "Предложение" в этом файле, то формула мне выдаст С:\Расчеты\[расчет для цены 1.xlsm]Предложение а мне нужно чтобы было С:\Расчеты\[расчет для цены 1.xlsm]
не подскажете как-то в excel можно сделать чтобы колонтитулы для первой и последующих страниц были одни , а для последней страницы были другие ??? у меня excel 2007 там есть галочка "Особый колонтитул для первой страницы" , а вот блин почему-то для последней страницы такой нет !!!
здравствуйте, помогите пожалуйста, я немного знаю язык VB в excel, но тут у меня что-то не получается, пример я приложил к сообщению, там всё подробно показано, что надо показать и что получается не так... Макрос работает неправильно и скрывает совершенно другие строки...