Страницы: 1
RSS
доработал программу случайного выбора файлов
 
выбирает случайные файлы из указанной папки( с подкаталогами) по заданной маске(расширению) до общего заданного объема.  
 
складывает в выбранную папку(с очисткой ее при необходимости).  
 
любителям музыки и фотографий посвящается..(можно, конечно, и другие назначения придумать)
Живи и дай жить..
 
Здравствуйте.  
 
Не просветите что означает этот кусок кода.Не понял про какие книги речь(For Each w):  
 
For Each w In Workbooks  
       If w.IsAddin Then  
       Else  
           fotopic.Show  
           Exit Sub  
       End If  
   Next
 
Непонятно на самом деле вот чего.Для чего нужен этот код при открытии книги.Ведь только появилась форма,еще не выбрана папка.Кроме текущего файла ничего нет.А программа уже (при открытии) перебирает какие-то книги
 
Возможно w - это надстройка
 
{quote}{login=qw}{date=06.03.2011 06:11}{thema=}{post}Непонятно на самом деле вот чего.Для чего нужен этот код при открытии книги.Ведь только появилась форма,еще не выбрана папка.Кроме текущего файла ничего нет.А программа уже (при открытии) перебирает какие-то книги{/post}{/quote}  
Проверил у себя (2003) - пока не задал все условия программа никакие файлы самостоятельно не перебирает.
 
Юрий, этот код в Private Sub Workbook_Open(), так что перебирает.  
Но мне кажется, что это остатки алгоритма, который уже изменён.  
Можно и так сделать - тогда будут скрываться все другие открытые книги:  
 
Private Sub Workbook_Open()  
'    Dim w As Workbook  
'    For Each w In Workbooks  
'        If w.IsAddin Then  
'        Else  
'            fotopic.Show  
'            Exit Sub  
'        End If  
'    Next  
Application.DisplayAlerts = False  
Application.Visible = False  
   fotopic.Show  
End Sub  
 
или так:  
 
Private Sub Workbook_Open()  
'    Dim w As Workbook  
'    For Each w In Workbooks  
'        If w.IsAddin Then  
'        Else  
           fotopic.Show  
           Exit Sub  
'        End If  
'    Next  
'Application.DisplayAlerts = False  
'Application.Visible = False  
'    fotopic.Show  
End Sub  
 
 
Но слэну конечно виднее.
 
С другой стороны если закоментировать эти непонятные строки    
 
For Each w In Workbooks  
If w.IsAddin Then  
Else  
fotopic.Show  
Exit Sub  
End If  
Next    
 
то программа по прежнему работает и без них.
 
Я вижу так - если есть открытые книги - то Application не прячем, открываем форму.  
Если открыты только надстройки - Application прячем, открываем форму.
 
Проверил: w = Nothing. Так что цикл сразу прерывается, никакого перебора книг не вижу :-)
 
Но например у меня в автозагрузке книги, которые не видны, но которые не надстройки.  
Сейчас, если запускать такой код, то форма открывается на сером фоне, что некрасиво.  
Тогда надо бы кроме w.IsAddin ещё проверить и на видимость окна этой книги.
 
Например, так:  
 
Private Sub Workbook_Open()  
   Dim w As Workbook  
   For Each w In Workbooks  
       If w.IsAddin Then  
       Else  
       If w.Windows(1).Visible Then fotopic.Show: Exit Sub  
       End If  
   Next  
Application.DisplayAlerts = False  
Application.Visible = False  
   fotopic.Show  
End Sub  
 
Но нужно ещё подкрутить и при закрытии книги - теперь при открытии серого окна нет, а после закрытия появляется.
 
Так что ли? У меня вроде наладилось:  
 
Sub ext()  
   On Error Resume Next  
   Unload fotopic  
   Dim w As Workbook  
   For Each w In Workbooks  
       If w.IsAddin Then  
       Else  
       If w.Windows(1).Visible Then  
           Application.Visible = True  
           ThisWorkbook.Close  
           Exit Sub  
            End If  
       End If  
   Next  
   Application.DisplayAlerts = False  
   Application.Quit  
End Sub
 
Про уже открытые книги я не подумал.  
 
Получается код перебирает уже открытые книги,  
чтобы не скрывать их?
 
Открыл пару книг, открыл "главную" книгу - никто их не перебирает :-) Где Вы видите перебор этих открытых книг?
 
"Где Вы видите перебор этих открытых книг?"  
 
Вот здесь:  
 
For Each w In Workbooks
 
И я здесь смотрю. При трёх изначально открытых книгах ни одной итерации. Где перебор?
 
"Где перебор?"  
 
- не знаю )))  
 
Но Hugo наверное ответил на вопрос для чего этот код:  
 
"Я вижу так - если есть открытые книги - то Application не прячем, открываем форму.  
Если открыты только надстройки - Application прячем, открываем форму."
 
Юрий, у Вас вероятно на первой книге срабатывает условие - не надстройка.
 
Я же реагировал на эту Вашу фразу: "А программа уже (при открытии) перебирает какие-то книги".
 
{quote}{login=Hugo}{date=07.03.2011 12:39}{thema=}{post}Юрий, у Вас вероятно на первой книге срабатывает условие - не надстройка.{/post}{/quote}  
Ну да! Обычные три книги открыты. Перебора их не происходит. Вот об этом я и говорю. А qw утверждает, что происходит перебор... :-)
 
А у меня перебирает, если открыт только этот файл. Перебирает Personal.xls, MyFuncs.xls, NumberLat.xls - это не надстройки, но с моей коррекцией нет выхода из кода, т.к. из окна невидимы.
 
{quote}{login=qw}{date=06.03.2011 02:24}{thema=}{post}Здравствуйте.  
 
Не просветите что означает этот кусок кода.Не понял про какие книги речь(For Each w):  
 
For Each w In Workbooks  
       If w.IsAddin Then  
       Else  
           fotopic.Show  
           Exit Sub  
       End If  
   Next{/post}{/quote}  
 
 
суть вот в чем..  если у вас уже были открытые книги до запуска этого файла, то программа просто показывает свое окно , а если нет видимых книг, то окно иксель скрывается, остается только форма..  
 
Private Sub Workbook_Open()  
   Dim w As Workbook  
   For Each w In Workbooks  
       If w.IsAddin Then  
       Else  
           fotopic.Show  
           Exit Sub  
       End If  
   Next  
Application.DisplayAlerts = False  
Application.Visible = False          '  вот тут скрывается окно иксель  
   fotopic.Show  
End Sub  
 
 
так же и призакрытии программы - если есть видимые книги, то иксель не закрывается..
Живи и дай жить..
 
слэн, мою поправку одобряете? Про невидимые, но не надстройки.
 
нет, думаю надо чуть по-другому..  
 
щас
Живи и дай жить..
 
думаю надо повесить все на загрузку, а в конце проверять лишь видимость самого приложения - если невидимо, то выгружать его, иначе выгружать только программу..  
 
поправил еще зацикливание(или лишний вызов, так как от настоящего зацикливания спасало on error) при закрытии формы.  
 
также лишняя строка exit sub после вызова формы при загрузке - никогда до нее не доходит, - или все же может дойти?
Живи и дай жить..
 
а в общем-то, щас вчитался, да, Hugo, так, как у вас, при открытии-то :)
Живи и дай жить..
Страницы: 1
Наверх