Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
СЛУЧМЕЖДУ() вызывает ошибку, При быстром потоке данных перестает работать.
 
Цитата
Максим Зеленский написал:
Вместо второй строки поставьте генератор случайных чисел.
Спасибо разобрался!
Изменено: CabancheG - 14.10.2015 21:17:22
СЛУЧМЕЖДУ() вызывает ошибку, При быстром потоке данных перестает работать.
 
Цитата
Апострофф написал:
ontime
Спасибо. Начинаю немного понимать. Есть у меня такой макрос, он показывает время, как его можно переделать, чтобы он генерировал числа в заданном диапазоне (каждую секунду или через 2)?
Код
Sub vremya()
Application.OnTime Now + TimeSerial(0, 0, 1), "vremya"
ActiveSheet.Range("N5").Value = Format(Time, "hh:mm:ss")

End Sub
Изменено: CabancheG - 14.10.2015 20:48:49
СЛУЧМЕЖДУ() вызывает ошибку, При быстром потоке данных перестает работать.
 
Цитата
Sanja написал:
формулой нет. Макросом?
Вот я и хотел спросить, как это сделать, то есть увидеть пример. (сам не оч. силен в программировании)
СЛУЧМЕЖДУ() вызывает ошибку, При быстром потоке данных перестает работать.
 
Здравствуйте! Пытаюсь создать звуковой "сигнализатор", который реагирует на определенную конфигурацию данных поступающих через DDE. И для того, чтобы один и тот же звук "не доставал", решил разбавить его несколькими. К примеру совпали условия и должен проиграть один из 3х звуков. Номер звука определяется случайно. Но беда в том, что у меня достаточно плотный поток данных и случайный генератор чисел вызывает ошибку, так как он реагирует на каждое изменение.
Использую  СЛУЧМЕЖДУ().  Без DDE потока работает норм., но если включить dde то возникает ошибка #ИМЯ.   Пробовал и такой вариант ЕСЛИ(A2=1;СЛУЧМЕЖДУ(1;3);0) Всё равно вызывает ошибку, так как за то время, что действует условие (A2=1), а это пара секунд, генератор (из-за быстрого потока данных) выходит из строя.

Господа знатоки! Может есть такой способ, при котором числа генерируются строго раз в секунду или "по требованию", а не реагируют на каждое изменение в ячейках или в книге?
Изменено: CabancheG - 14.10.2015 20:35:46
Оптимизация и ускорение работы Excel c DDE., Несколько вопросов.
 
Здравствуйте! Хочется услышать от вас несколько советов и ответов на вопросы по оптимизации и ускорению работы Excel.
Ситуация следующая:  
В файл  поступают данные (через DDE) из 2х разных источников. Для каждого источника выделена своя страница. Данные занимают немного (одни и те же ячейки пару раз в секунду меняют значения) Всё занимает примерно 1/2 экрана. Имеет ли смысл перевести оба источника на один лист?
Далее самые важные исходные данные с обоих листов поступают на "основной" лист, где проводятся вычисления, в основном сравнения, (к примеру если > то... ) т.е. никаких супер формул, максимум только сложение-вычитание, все просто. Но таблицы с данными разбросаны у меня по экрану (для удобства восприятия), между ними расстояние в 1 столбец или в 1-2 ряда, всё вместе занимает 1.5 экрана. Имеет ли смысл скомпоновать эти таблицы "впритык"? Имеет ли смысл убрать всякие закрашивания, рамочки и т.п.?  Имеет ли смысл и данные с обоих источников и вычисления разместить на одном листе? Ускорит ли это работу хотя бы на пол секунды?  
Ну и в целом, хотелось бы услышать советы и хитрости если таковые имеются.

P.S. Excel 2003.
"Самопроверка" макроса на предыдущее срабатывание.
 
Спасибо огромное!
"Самопроверка" макроса на предыдущее срабатывание.
 
Добрый день! Имеется макрос, который проигрывает звук при определенных условиях. Условия эти действуют 1-2 секунды, но за это время он успевает включить звук несколько раз . Как сделать так, чтобы макрос после первого пересчета и срабатывания, оставлял о себе след в таблице, например в ячейку [A1] вносил цифру 1. В условиях он проверяет эту ячейку и если она больше ноля, условия не выполняются и следовательно повторно звук не будет включен.
Подскажите пожалуйста, какие строки нужно добавить, чтобы в ячейку [A1] он поставил 1.

Код
Sub NextTime()
    Application.OnTime Now + TimeSerial(0, 0, 1), "NextTime"
  
      
     If [A2] > 0 And [A1] < 1 Then
          Call PlayMusic(Sound1)
' ставим 1 в ячейку [A1]
    End If
 End Sub
[ Закрыто] Как остановить на пару секунд макрос?, Чтобы он не включал по нескольку раз подряд звуковой сигнал.
 
И снова здравствуйте! Как мне показалось я нашел способ решения данной проблемы. Скорее всего макрос со звуком срабатывал несколько раз, так как время работы условий было 1-2 секунды и он успевал пересчитать всё 2 раза и соответственно 2 раза включить звук.  Вот я и подумал, что после первого пересчета, когда он 1 раз запускает плеер, сразу после этого макрос должен "дать о себе знать" самому себе.   То есть поставить в определенную  ячейку цифру. И если в момент следующего пересчета он "увидит" её, то условия будут не выполнены и музыка 2ой раз не включится.
Вопрос только в том, как это реализовать?  Какие строки вставить?

Код
Sub NextTime()
    Application.OnTime Now + TimeSerial(0, 0, 1), "NextTime"
 
     
     If [A2] > 0 And [A1] < 1 Then
          Call PlayMusic(Sound1)
'И вот тут мы ставим 1 в ячейку [A1]
    End If
 End Sub
Изменено: CabancheG - 09.10.2015 11:08:50
Макрос записи цифры в ячейку при условии
 
Цитата
The_Prist написал:
и предложите такое
Ок. давайте удалим тему, а я продолжу в одной из своих старых, где и описание проблемы и парочка советов как её решить, которые мне не подошли (ибо тупой я как пробка)
Макрос записи цифры в ячейку при условии
 
Цитата
vikttur написал:
Предложите новое название темы
Простите, а что не так?   В названии максимально лаконично и точно описана проблема.  В поиске не нашел ответа на свой вопрос.
Макрос записи цифры в ячейку при условии
 
Здравствуйте!  Как доработать данный макрос, чтобы он при выполнении условий ставил цифру в ячейку?
Код
Sub NextTime()
    Application.OnTime Now + TimeSerial(0, 0, 1), "NextTime" 

     If [A2] > 0 And [A1] < 1 Then
          Call PlayMusic(Sound1)
'И вот тут мы ставим 1 в ячейку [A1]
    End If
 End Sub
Изменено: CabancheG - 09.10.2015 15:08:49
Чем же так плохи итерации и зацикленные ячейки?, Объясните, пожалуйста, несведущему.
 
Спасибо!   Я так понял, что если формулы не сложные а на уровне  =ЕСЛИ(I18<>J4;I18;I17), то от того, что ПК посчитает это 10 раз ничего страшного не случится.  Ну а параллельно несколько книг я не открываю, значит и риск отключения/включения итераций снят.  К тому же конкретно в моем случае на пиковых нагрузках Excel съедает всего 10-25 мб оперативной памяти. Значит всё норм.? И можно не парится?
Изменено: CabancheG - 08.10.2015 10:36:30
Чем же так плохи итерации и зацикленные ячейки?, Объясните, пожалуйста, несведущему.
 
Здравствуйте! Работаю с данными поступающими через DDE.  В программировании не особо силен, поэтому вместо макросов и текстбоксов использую систему зацикленных ячеек, например для хранения последних 5-10 значений  изменяющейся ячейки или для фиксации времени получения новых данных. Всего таких зацикленных и взаимосвязанных ячеек около 50.  Но тут на форуме весьма не однозначное отношение к такому способу хранения инф. В связи с чем у меня ряд вопросов.  Чем этот способ так плох?
Влияет ли это на скорость выполнения операций? На производительность и загруженность ПК?  
Макрос автонажатия alt + f4, Как реализовать?
 
Здравствуйте!  Подскажите пожалуйста, как можно преобразовать данный макрос (см. внизу). Что бы он если выполнены условия, автоматом нажимал alt+f4 чтобы закрылась программа, которая открыта (не excel, excel свернут) .
Код
 Sub NextTime()
    Application.OnTime Now + TimeSerial(0, 0, 1), "NextTime" 'вызов каждую 5 секунд

   If [A2] > 0 Then
         ' нажать альт+ф4
    End If
 End Sub
[ Закрыто] Как остановить на пару секунд макрос?, Чтобы он не включал по нескольку раз подряд звуковой сигнал.
 
Цитата
Hugo написал:
Попробуйте так.
Зачем там это vremja?
Здравствуйте! При ручном вводе отлично работает, однако же через DDE молчит как партизан.  А vremja для того, чтобы сравнивать текущее время с продолжительностью действий условий. То есть чтобы 0 стала 1, а затем обратно 0.
[ Закрыто] Как остановить на пару секунд макрос?, Чтобы он не включал по нескольку раз подряд звуковой сигнал.
 
 Вот файлик, хотя вряд ли он будет полезен без источника ДДЕ.  Но здесь хотя бы виден алгоритм.
В общем есть ли в Екселе функция sleep ?  Чтобы макрос при первом срабатывании засыпал на 1-2 секунды?
Изменено: CabancheG - 06.10.2015 22:34:47
[ Закрыто] Как остановить на пару секунд макрос?, Чтобы он не включал по нескольку раз подряд звуковой сигнал.
 
Цитата
Hugo написал:
Подозреваю что одновременно с этим макросом срабатывает и макрос отслеживающий событие изменения ячейки. Что хотите вообще сделать? Ну и давайте файл.
У меня все данные идут через DDE. То есть сам файл наверно смысла не имеет.  Все макросы, которые записаны в модуле (других в пинципе нет, так как Privat sub через DDE не робят)  вот они (внизу)       А задумка была в следущем, через DDE поступают данные и если совокупность данных соответсвует заданным критериям, то в ячейке меняется 0 на 1 и звучит сигнал.
Код
Dim mp As Object
Const SoundFile = "C:\Temp\1.wav"

Sub vremya()
Application.OnTime Now + TimeSerial(0, 0, 1), "vremya"
ActiveSheet.Range("N5").Value = Format(Time, "hh:mm:ss")

End Sub


 Sub NextTime()
    Application.OnTime Now + TimeSerial(0, 0, 1), "NextTime"
       If [A1] > 0 Then
          Call PlayMusic(SoundFile)
    End If
 End Sub

Sub PlayMusic(Filename)
  On Error Resume Next
  Dim f As String, i
  f = Trim(Filename)
  If Len(f) = 0 Or Len(Dir(f)) = 0 Then
    ' Файл не найден - воспроизводим, что найдем
    i = Int(9 * Rnd + 1)
    f = "C:\Temp\11" & i & ".wav"
  End If
  mp.stop
  Set mp = CreateObject("MediaPlayer.MediaPlayer")
  mp.AutoStart = True
  mp.Open f
End Sub

' ZVI:2008-10-25 Останов воспроизведения звука
Sub StopMusic()
  On Error Resume Next
  mp.stop
  Set mp = Nothing
End Sub



Изменено: CabancheG - 06.10.2015 12:32:28
[ Закрыто] Как остановить на пару секунд макрос?, Чтобы он не включал по нескольку раз подряд звуковой сигнал.
 
Цитата
Hugo написал:
Там всё не так
Исправил.  Теперь всё, как я описал. Но поверьте, за эту секунду успевает по 2-3 раза включить звуковой файл.  1ый раз не до конца, так как тут же включает 2ой и вот уже во второй заход мелодия играет полностью.  
Изменено: CabancheG - 06.10.2015 12:15:44
[ Закрыто] Как остановить на пару секунд макрос?, Чтобы он не включал по нескольку раз подряд звуковой сигнал.
 
Здравствуйте!  Имеется макрос, который при изменении 0 на 1 (буквально на секунду) , начинает проигрывать звуковой сигнал.  Но проблема в том, что за эту секунду он успевает включить его несколько раз.  Может есть способ сделать так, что бы звук играл только один раз? (самый простой наверное сделать "тишину" вначале самого звукового файла) Но может есть нечто  вроде функции sleep или т.п. ?
Код
Sub NextTime()
    Application.OnTime Now + TimeSerial(0, 0, 1), "NextTime" 

        If [A1] > 0 Then
          Call PlayMusic(SoundFile)
    End If
 End Sub
Изменено: CabancheG - 06.10.2015 12:11:01
Преобразовать значение ИСТИНА на 0 или 1
 
Спасибо!
Преобразовать значение ИСТИНА на 0 или 1
 
Здравствуйте!  Почему не преобразовывается значение функции? Да и вообще никак не хочет взаимодействовать.    Например в A1:A4 стоят цифры, а в B2 стоит ЕЧЁТН(A1), а в C1  =ЕСЛИ(B1="ИСТИНА";1;0).   Но почему то в любом случае, независимо истина или нет, в С1 всегда ноль. Как это исправить?
Как Privat Sub'ы перевести в обычные макросы с названиями?, чтобы потом вызывать их через RUN или CALL
 
Цитата
Hugo написал: Так и так можно его вызвать:
А как заставить их работать при машинном вводе?   У меня такие работают только при ручном вводе. А вот макрос
Sub NextTime()  (пример вверху)  пересчитывается каждую секунду.
Изменено: CabancheG - 01.10.2015 17:18:02
Как Privat Sub'ы перевести в обычные макросы с названиями?, чтобы потом вызывать их через RUN или CALL
 
Ну вот к примеру приват саб
Код
Private Sub Worksheet_Change(ByVal Target As Range)
      
    For Each cell In Target   'проходим по всем измененным ячейкам
       If Not Intersect(cell, Range("J1:J2")) Is Nothing Then  'если изменененная ячейка попадает в диапазон A2:A100
            With cell.Offset(0, 1)         'вводим в соседнюю справа ячейку дату
               .Value = Now
               .EntireColumn.AutoFit  'выполняем автоподбор ширины для столбца B, чтобы дата умещалась в ячейке
           End With
             
       End If
    Next cell
 
End Sub

А мне нужно чтобы из модуля можно было его вызвать, как наприер этот с названием
Код
Sub NextTime()
    Application.OnTime Now + TimeSerial(0, 0, 5), "NextTime" 'вызов каждую 5 секунд
    iP = [N1]
    iG = [N2]
     iK = [K14]
    iE = [K15]
        If iP > iG And iK > iE Then
          Call PlayMusic(SoundFile)
    End If
'        If [p5] > [g2] Then
'          Call Звук
'    End If
 End Sub
Изменено: CabancheG - 01.10.2015 16:32:46
Как Privat Sub'ы перевести в обычные макросы с названиями?, чтобы потом вызывать их через RUN или CALL
 
Здравствуйте! У меня на самом деле много вопросов и большинство ответов я нашел в поиске. Но есть одно жирное НО. Почти всё, что нужно мне сделать в Excel делается через Privat sub макросы. Мне такой вариант не подходит, так как работаю через DDE и отсутствует ручной ввод данных, да и пересчет нужных ячеек нужно делать раз в 1-2 секунды. И что бы не создавать по несколько тем, я решил сократить кол-во вопросов до одного. (надеюсь, что решение данного вопроса, поможет мне решить все остальные)
Как Privat sub'ы перевести в обычные макросы с названиями ?  
Макрос "время последнего изменения в ячейке", Сил больше нет...
 
Цитата
Юрий М написал:
В таком случае теперь поищите, какие неприятности таят в себе циклические ссылки )
Я правильно понимаю, что они порождают процесс "бесконечных" вычислений? И ограничив число итераций  10  я устраню эти "неприятности"? Или есть еще другие подводные камни?
Изменено: CabancheG - 27.09.2015 12:00:07
Макрос "время последнего изменения в ячейке", Сил больше нет...
 
Спасибо большое! И прошу прощения за то, что невнимательно пользовался поиском. Нашел элегантное и простое решение моего вопроса с помощью циклических ссылок и ТДАТА(). Вот в этой теме  http://planetaexcel.ru/forum/index.php?PAGE_NAME=message&FID=1&TID=51338&TITLE_SEO=51338&MID=425960&...
Изменено: CabancheG - 27.09.2015 11:00:42
Макрос "время последнего изменения в ячейке", Сил больше нет...
 
Цитата
Юрий М написал:
Я бы использовал (спасибо ZVI) скрытый ТекстБокс на листе, связав его с ячейкой. И отслеживал бы событие Change этого ТекстБокса.
Вот тут то у меня начинаются проблемы. Так как я ни черта не понимаю в программировании, терминах и операторах.   Но я так понял, вместе с изменением в ячейке, в другую ячейку вводится время изменения. Как это реализовать?
Макрос "время последнего изменения в ячейке", Сил больше нет...
 
Юрий М   Да, вы правы, данные поступают через DDE, затем пару формул и "буферизация в ячейке" То есть несмотря на изменения внешних данных число остается прежним, пока внешние данные не будут соответствовать условиям, вот тот момент, когда сложатся обстоятельства и ячейка примет другое значение, хочется зафиксировать во времени.  То есть нужны не все даты/время изменений, а только 1  последнее.
Есть ячейка куда макросом каждые 5 секунд прописывается текущее время. Сейчас думаю как это можно заюзать
Макрос "время последнего изменения в ячейке", Сил больше нет...
 
Юрий М Спасибо, исправил. Но хотелось бы увидеть ответ, если вас не затруднит.
Макрос "время последнего изменения в ячейке", Сил больше нет...
 
Здравствуйте! Уже несколько дней никак не могу решить проблему.  Имеются 2 ячейки, в которыx периодически (наверное раз в 5-10 минут) меняются числа. В результате кучи операций и формул.  Не в ручную!
Имеется код.  

 
Код
Private Sub Worksheet_Change(ByVal Target As Range)
     
    For Each cell In Target   'проходим по всем измененным ячейкам
       If Not Intersect(cell, Range("J1:J2")) Is Nothing Then  'если изменененная ячейка попадает в диапазон A2:A100
            With cell.Offset(0, 1)         'вводим в соседнюю справа ячейку дату
               .Value = Now
               .EntireColumn.AutoFit  'выполняем автоподбор ширины для столбца B, чтобы дата умещалась в ячейке
           End With
            
       End If
    Next cell

End Sub


Но он считывает изменения только при ручном вводе!   Как сделать чтобы данный макрос учитывал "не ручной" ввод и пересчитывался каждые 5 секунд? И в соседней ячейке писал время последнего изменения.

И еще такой вот вопрос. Как перевести эти безымянные Private Sub  в обычные макросы с именем, которые можно вызывать (из других макросов например).

как здесь например:
Код
Sub NextTime()
    Application.OnTime Now + TimeSerial(0, 0, 5), "NextTime" 'вызов каждую 5 секунд
    iP = [N1]
    iG = [N2]
     iK = [K14]
    iE = [K15]
        If iP > iG And iK > iE Then
          Call PlayMusic(SoundFile)
    End If
'        If [p5] > [g2] Then
'          Call Звук
'    End If
 End Sub


P.S.:  Excel 2003
Изменено: CabancheG - 26.09.2015 23:43:56
Страницы: 1
Наверх