Страницы: 1
RSS
Автоматическое перелистывание всех не скрытых листов книги
 
Добрый день форумчане. Очередная просьба о помощи. Поиск применял, ничего найти не смог. Необходим макрос, который бы через заданное время перелистывал все не скрытые листы книги (при этом листы могут добавляться/удаляться/переименовываться). И еще один момент в книге уже используется один макрос, который запускает внешнее приложение и копирует оттуда данные каждую минуту - не будут ли они мешать друг другу. Заранее спасибо.
 
Показать имя видимого листа (по порядку):  
 
Sub VisibleSheet ()  
Dim shts As Worksheet  
   For Each shts In ThisWorkbook.Worksheets  
       If shts.Visible = xlSheetVisible Then  
MsgBox shts.Name  
End If  
   Next shts  
End Sub
 
> Необходим макрос, который бы через заданное время перелистывал все не скрытые листы книги  
Что значит "перелистывал"? Делал активным каждый лист на какое-то время?  
 
> в книге уже используется один макрос, который запускает внешнее приложение и копирует оттуда данные каждую минуту - не будут ли они мешать друг другу  
Зависит от того, как написан макрос. Если он работает с активным листом - будут мешать, если с каким-то определенным листом - не будут.
 
1) Да именно это и имеется в виду, поочередно показывал каждый лист книги с интервалом в 5-10 секунд.  
 
2) макрос сначала запускает внешний EXE файл, затем нажимает в нем кнопки, копирует данные, закрывает "EXE файл" и в открытой книге отображает скрытый лист и вставляет туда данные, затем переходит на заданный лист.  
 
сейчас соответственно необходимо, чтобы происходило попеременное отображение всех листов на короткий промежуток времени и при это не сбилось исполнение описанного выше макроса.  
 
Надеюсь все описал, но если еще нужны уточнения, то скажите.
 
vikttur, Ваш код я хочу опробовать, только подскажите как задать время на задержку исполнения For each shts.
 
Application.Wait Now + TimeValue("0:00:05")
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
ikki подскажите, если использовать данную команду, в этот момент ничего нельзя будет сделать (вставить данные, или изменить значение ячейки), или я неправ?    
И еще,  можно ли сделать остановку и возобновление исполнения макроса по кнопке? Объясню для чего, если в какой-то момент времени мне, например, понадобится внести изменения в какую-либо ячейку, я нажимаю на паузу, чтобы лист не менялся, вношу данные и запускаю кнопкой макрос на дальнейшее исполнение.
 
можно просто прервать такой макрос - нажав Esc.  
но возобновить с прерванной позиции...  
дополнительные телодвижения (команды в макросе) таки нужны.  
 
честно говоря, ваша задача мне кажется настолько абсурдной... (я не хочу вас задеть, то это действительно так - я не вижу в пролистывании никакого смысла).  
что вы хотите этим добиться?
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
Все просто. Данный файл демонстрируется на большом телевизоре в магазине и отражает разные статистические данные продаж на текущий момент, на одном листе отобразить всю информацию невозможно, вот и кручусь)
 
В таком случае для отображения нужен только один лист, куда будет подтягиваться интересующая в данный момент информация.
 
не знаю...  
была мысль - повесить вызов макроса не перелистывания, а показа следующего за активным листа на таймер...  
в макросе - проверять, не запущен ли макрос обновления данных из внешнего источника. если запущен - выход...  
но что тогда делать с таймером?.. время-то пройдёт.  
 
-48484-
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
vikttur: А как это сделать, учитывая что данные находятся в таблицах разного форматирования и содержания, да еще и одна из них должна обновляться с внешнего источника, о чем я писал выше? С первым конечно я думаю можно справиться с помощью вставки данных на лист в виде картинки, в которой будет меняться диапазон и адрес данных, а вот со вторым нюансом как?
 
ikki: у меня появился компромисс, как можно реализовать то, что мне нужно с помощью предложенного Вами хода. Если можно выложите код по открытию следующего после активного листа, но опять же исключая скрытые и чтобы с последнего листа он возвращал на первый. А далее все просто - буду подгонять таймеры друг под друга. То есть, например, после пролистывания 5 листов 3 раза запускается мой макрос на внешний источник, а по окончании его снова запускается Ваш макрос. А те данные которые я хотел вносить в ячейки, будут подтягиваться также из вне с другого файла excel. Если Вам не сложно, выложите код перехода на следующий лист по истечении скажем 10 секунд. Спасибо.
 
Вариант: запустить внутренний цикл с doevents  в цикле перебора листов и проверять в нем контрольное время с timer, или gettickcount. Так не понадобится ничего подбирать-подгонять и могут работать любые другие макросы. Даю только идею, сам реализовать не буду, лениво.
Я сам - дурнее всякого примера! ...
 
на скорую руку (возможно, есть вариант попроще)  
 
Sub nxsheet()  
 Dim idx%, f As Boolean  
 idx = ActiveSheet.Index: f = False  
 Do Until f  
   If idx = ThisWorkbook.Sheets.Count Then idx = 1 Else idx = idx + 1  
   If ThisWorkbook.Sheets(idx).Visible Then f = True  
 Loop  
 ThisWorkbook.Sheets(idx).Activate  
 Application.OnTime Now + 10 / 24 / 60 / 60, "nxsheet"  
End Sub  
 
вставляется в стандартный модуль этой же книги.  
запускается один раз вручную, затем автоматом каждые 10 секунд.
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
гм... при наличии нескольких открытых книг и ручном переключении между ними может глючить.  
лучше с проверкой:  
 
Sub nxsheet()  
Dim idx%, f As Boolean  
If ActiveSheet.Parent Is ThisWorkbook Then    
  idx = ActiveSheet.Index  
  Do Until f  
    If idx = ThisWorkbook.Sheets.Count Then idx = 1 Else idx = idx + 1  
    If ThisWorkbook.Sheets(idx).Visible Then f = True  
  Loop  
  ThisWorkbook.Sheets(idx).Activate  
End If  
Application.OnTime Now + 10 / 24 / 60 / 60, "nxsheet"  
End Sub  
 
а вообще-то вам PowerPoint не мешало бы освоить, имхо :)
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
KukLP: Спасибо, но с учетом ограниченности во времени буду пока так делать, а потом поковыряюсь в предложенном Вами решении, ибо указанные функции мне не знакомы)  
 
Ikki: спасибо, попробую, но уже завтра, ибо рабочий день закончился.
 
{quote}{login=shurenok}{thema=}{post}ибо рабочий день закончился.{/post}{/quote}  
гм... а в наших краях нынче воскресенье :)
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
> 2) макрос сначала запускает внешний EXE файл, затем нажимает в нем кнопки, копирует данные, закрывает "EXE файл" и в открытой книге отображает скрытый лист и вставляет туда данные, затем переходит на заданный лист.  
 
Чтобы вставить данные на лист, совершенно не нужно отображать его. Выложите код макроса, и мы покажем как.  
Таким образом, два макроса могут работать независимо, каждый по своему OnTime.
Страницы: 1
Читают тему
Наверх