Страницы: 1
RSS
Скрытие окна рабочей книги
 
Имеется процедура UserForm, которая загружается при выполнении определенного условия, например запуск книги.    
 
 Необходимо в код UserForm вставить процедуру скрытия всего окна рабочей книги, но UserForm должна остаться видимой и работать с той книгой в которой была запущена(имеются поля в которые заносятся значения для определенных ячеек: TextBox.value = Active.cell).    
 
 Пробовал процедуру скрытия книги: application.visible=false, но при скрытии активной книги, UserForm начинает работать с любой другой открытой книгой, что не очень хорошо.
 
в коде нужно указать книгу, с которой должен работать макрос, например, Workbooks("Книга2.xls").Worksheets("лист1").Cells(1, 1) = 1
 
В UserForm имеются много обьектов завязанных с различными обьектами рабочей книги. Как эта операция отразится на них?
 
{quote}{login=NIKOLASCS}{date=18.11.2008 08:50}{thema=Скрытие окна рабочей книги}{post}В UserForm имеются много обьектов завязанных с различными обьектами рабочей книги. Как эта операция отразится на них?{/post}{/quote}Артем Вам подсказал: нужно явное указание на книгу.  
Cells(1, 1) - это ячейка на активном листе  
Worksheets("лист1").Cells(1, 1) это ячейка на листе 1 активной книги  
Workbooks("Книга2.xls").Worksheets("лист1").Cells(1, 1) это ... думаю сами уже поняли.  
При этом, чтобы не заморачиваться с именем книги, которая может быть переименована, используйте объект ThisWorkbook. Переделать код достаточно просто:  
Например, у Вас было  
Worksheets("лист1").Cells(1, 1)=1  
Worksheets("лист1").Cells(1, 2)=2  
Чтобы точно указать на эту книгу:  
With ThisWorkbook  
.Worksheets("лист1").Cells(1, 1)=1  
.Worksheets("лист2").Cells(1, 2)=2  
End With  
 
Т.е. после Sub bb()  
пишем With ThisWorkbook  
перед End Sub  
пишем End With  
В нужных местах расставляем точки перед обращением к объектам книги.
Bite my shiny metal ass!      
 
{quote}{login=NIKOLASCS}{date=18.11.2008 07:11}{thema=Скрытие окна рабочей книги}{post}Имеется процедура UserForm, которая загружается при выполнении определенного условия, например запуск книги.    
 
 Необходимо в код UserForm вставить процедуру скрытия всего окна рабочей книги, но UserForm должна остаться видимой и работать с той книгой в которой была запущена(имеются поля в которые заносятся значения для определенных ячеек: TextBox.value = Active.cell).    
 
 Пробовал процедуру скрытия книги: application.visible=false, но при скрытии активной книги, UserForm начинает работать с любой другой открытой книгой, что не очень хорошо.{/post}{/quote}  
 
 
{quote}{login=NIKOLASCS}{date=18.11.2008 08:50}{thema=Скрытие окна рабочей книги}{post}В UserForm имеются много обьектов завязанных с различными обьектами рабочей книги. Как эта операция отразится на них?{/post}{/quote}  
 
все книги могут быть рабочими - что вы подразумеваете под этим термином?  
 
есть стандартная терминология: активная книга - она одна(или ни одной)  
далее, что такое скрытие?  
есть стандартный термин скрытая книга, но это явно не то, что Вы хотите. Это книга, у которой установлен спец атрибут, это , например, книга personal.xls, открыть для просмотра ее можно только спец командой - окно-отобразить..  
 
в общем хотелось бы большей определенности и примера
Живи и дай жить..
 
При запуске файла "Name.xls" ----> свернуть окно Excel  ----> скрыть рабочую книгу "Name.xls" (Книга в которой находится UserForm) ----> запустить UserForm с параметрами: поверх всех окон, Фокус должен менятся в зависимости от выбранного окна (в моем случае фокус не меняется, т.е. окно блокирует все) ----> при выходе из окна UserForm рабочая книга должна сохраниться и закрыться (желательно эту операцию использовать при нажатии клавиши "Esc").    
   
 В случае присутствия двух и более рабочих книг, то все обьекты на UserForm должны взаимодействовать c книгой "Name.xls" (оптимально использовать ресурсы).
 
А вот и пример. Файл не переименовываем.
 
{quote}{login=NIKOLASCS}{date=19.11.2008 06:26}{thema=Скрытие окна рабочей книги}{post}При запуске файла "Name.xls" ----> свернуть окно Excel  ----> скрыть рабочую книгу "Name.xls" (Книга в которой находится UserForm) ----> запустить UserForm с параметрами: поверх всех окон, Фокус должен менятся в зависимости от выбранного окна (в моем случае фокус не меняется, т.е. окно блокирует все) ----> при выходе из окна UserForm рабочая книга должна сохраниться и закрыться (желательно эту операцию использовать при нажатии клавиши "Esc").    
   
 В случае присутствия двух и более рабочих книг, то все обьекты на UserForm должны взаимодействовать c книгой "Name.xls" (оптимально использовать ресурсы).{/post}{/quote}  
 
Для того, чтобы можно было переводить фокус на другие книги, нужно изменить свойство UserForm ShowModal на false  
По поводу работы с разными книгами советую все таки попробывать осилить ответы (см.выше)  
По поводу кнопки Esc - настоятельно не советую, у многих она ассоцируется с кнопкой отмены, если все таки настаиваете, но поменяйте свойство "Cancel" кнопки "Сохранить" с false на true, после этого по нажатию кнопки Esc ,будет запускаться код кнопки "Сохранить"
 
Благодарю за ответ! С Modal окно заработало как задумывалось, но мне нужно чтобы окно Excel свернулось, а UserForm остался.
 
{quote}{login=NIKOLASCS}{date=19.11.2008 07:12}{thema=Скрытие окна рабочей книги}{post}Благодарю за ответ! С Modal окно заработало как задумывалось, но мне нужно чтобы окно Excel свернулось, а UserForm остался.{/post}{/quote}  
 
повесте на событие инициализации формы макрос  
Application.Visible = 0
 
При использовании Application.Visible=0, окно Excel скрывается, но не сворачивается и работать с другими документами невозможно.
 
Я с подобным сталкивался. Некоторые приложения при экспорте данных в книгу Excel формируют окно, которое является отдельным процессом. Т.е. при вызове диспечера задач у нас будет отображаться два разных процесса "EXCEL.EXE". Если можно это повторить с помощью процедуры на VBA, то в данном случае выражение Application.Visible = 0 будет иметь место.  
 
Вопрос знатокам; Как выделить рабочую книгу в отдельный процесс (окно Microsoft Excel)?
 
скорее все остальное надо в отдельный процесс..  
 
set exl2=new excel.application  
exl2.workbooks.open ..
Живи и дай жить..
 
А по подробней, или пример.
 
Кто нибудь. Помогите выделить в отдельный процесс рабочую книгу. См.выше.
 
Sub nn()  
Dim exl2 As Object  
Set exl2 = New Excel.Application  
exl2.Visible = True  
exl2.Workbooks.Add  
End Sub
 
а чего непонятного?  
 
я ж выще написал..  
 
создаете новый экземпляр приложения  
 
теперь exl2 у Вас является синонимом application, такой же, но меньше и другой :)  
 
к нему можете применять все методы, предусмотренные для application? в том числе и workbooks.open - т.е. открыть новую книгу  
 
далее можно написать exl2.run "имякниги!моймакрос"[, параметры](хотя имя книги и необязательно, так как возьмется из текущей, а ей является последняя открытая)
Живи и дай жить..
 
{quote}{login=}{date=23.11.2008 01:13}{thema=}{post}Sub nn()  
Dim exl2 As Object  
Set exl2 = New Excel.Application  
exl2.Visible = True  
exl2.Workbooks.Add  
End Sub{/post}{/quote}  
 
У меня ситуация немного сложнее. Необходимо чтобы было открыто 2 книги: та, из которой будем брать данные и та, в которую эти данные копирует макрос (во второй находится и сам макрос). Алгоритм такой:  
Открыты обе книги. Запускаем макрос и в определенный момент макрос "переходит" ко второй книге", копирует, возвращается и т.д. Есть еще одно условие: книга, к которой обращается макрос за данными должна иметь четко определенное имя, которое меняется (например, "Отчет Ноябрь 2010"). Т.е. вполне понятно, что в январе 2011 года ее название резко поменяется.    
 
В связи с этим не могу пока придумать как должен выглядеть код для макроса.    
Что после перехода в книгу задать Set ... = ActiveWorkbook - это ясно, но как указать макросу перейти в открытую книгу с переменным именем я не могу найти
 
Нашел! Пока ждал ответа)) Через GetObject, а имя задал как переменную с директорией!!!
 
Alex.DR "Нашел! Пока ждал ответа)) Через GetObject, а имя задал как переменную с директорией!!!"  
 
я столкнулся с такой же необходимостью.нужно,чтобы приложение екселя скрывалось с рабочей книгой по процедуре application.visible=false,при этом userform был виден,чтобы он работал только с той рабочей книгой,которая скрыта с приложением.  
 
но самое главное,чтобы была возможность работать с другими екселевскими файлами.  
 
может поделитесь Вашим решением,которое получилось?
 
{quote}{login=The_Prist}{date=09.02.2011 10:48}{thema=}{post}Так GetObject и есть решение....  
GetObject("C:\Test.xls")  
откроет книгу Test.xls в невидимом режиме. Т.е. видно её не будет.  
 
Еще для скрытия книги с глаз можно использовать:  
ThisWorkbook.Windows(1).Visible = False{/post}{/quote}  
 
Пробовал прописывать ThisWorkbook.Windows(1).Visible = False в коде рабочей книги.  
выбивает мне ошибку.после закрытия файла уничтожаются листы книги.  
 
попробую описать задачу подробнее.  
моя работа предполагает постоянное обращение к разным книгам екселя. то есть в течении рабочего дня в процессах может исеть до 5 разных кних,с которыми оператор все время работает.  
 
книга,на которую я пишу макрос представляет собой 4 листа с разными данными, у которых есть свой срок действия и которые удаляются при открытии файла автоматически,если теряют актуальность (этот код прописан в "Эта книга".  
 
User form представляет собой форму поиска по одному из критериев, в результате поиска я имею возможность открыть по гиперссылке файл связанный с этим данным.  
для удобства работы,я сделал,чтобы эта форма сворачивалась в панель задач  
 
суть задачи заключается в том,чтобы эта форма работала только с данной книгой (назовем ее database.xls),при этом,чтобы книга была невидимой.  
 
то есть в итоге мне нужно получить якобы просто приложение ВБА,которое работает с одной конкретной книгой,не смотря на то,что развернутой может быть и другая книга  
 
к сожалению,на работе установлен определенный пакет программ,в который не входит MS visual studio, поэтому делается через ексель.
 
{quote}{login=}{date=12.02.2011 10:46}{thema=Re: }{post}{quote}{login=The_Prist}{date=09.02.2011 10:48}{thema=}{post}Так GetObject и есть решение....  
GetObject("C:\Test.xls")  
откроет книгу Test.xls в невидимом режиме. Т.е. видно её не будет.  
 
Еще для скрытия книги с глаз можно использовать:  
ThisWorkbook.Windows(1).Visible = False{/post}{/quote}  
 
Пробовал прописывать ThisWorkbook.Windows(1).Visible = False в коде рабочей книги.  
выбивает мне ошибку.после закрытия файла уничтожаются листы книги.  
 
попробую описать задачу подробнее.  
моя работа предполагает постоянное обращение к разным книгам екселя. то есть в течении рабочего дня в процессах может исеть до 5 разных кних,с которыми оператор все время работает.  
 
книга,на которую я пишу макрос представляет собой 4 листа с разными данными, у которых есть свой срок действия и которые удаляются при открытии файла автоматически,если теряют актуальность (этот код прописан в "Эта книга".  
 
User form представляет собой форму поиска по одному из критериев, в результате поиска я имею возможность открыть по гиперссылке файл связанный с этим данным.  
для удобства работы,я сделал,чтобы эта форма сворачивалась в панель задач  
 
суть задачи заключается в том,чтобы эта форма работала только с данной книгой (назовем ее database.xls),при этом,чтобы книга была невидимой.  
 
то есть в итоге мне нужно получить якобы просто приложение ВБА,которое работает с одной конкретной книгой,не смотря на то,что развернутой может быть и другая книга  
 
к сожалению,на работе установлен определенный пакет программ,в который не входит MS visual studio, поэтому делается через ексель.{/post}{/quote}  
интересно чем бы Вам помогла Visual studio / если конечно Вы сами приложение не напишите.    
как мне кажется при открытии любого файла excel ваша книга станет видимой, если конечно вы не будете ее "глушить" как нибудь
 
чем бы вижуал студио не помогло мне,это не актуально,потому что единственное в чем я могу решить нужную задачу, это msexcel за неимением другого.  
 
пожалуйста, помогите закончить этот завершающий штрих.
 
{quote}{login=The_Prist}{date=13.02.2011 01:06}{thema=}{post}И какая у Вас ошибка при скрытии окна книги? У меня нет никаких ошибок. У Вас может книга защищена? И уж тем более мне непонятно, как скрытие окна может уничтожить листы...{/post}{/quote}  
 
я завтра скопирую код и выложу здесь.  
ну и с ошибкой.
 
{quote}{login=}{date=13.02.2011 02:20}{thema=Re: }{post}{quote}{login=The_Prist}{date=13.02.2011 01:06}{thema=}{post}И какая у Вас ошибка при скрытии окна книги? У меня нет никаких ошибок. У Вас может книга защищена? И уж тем более мне непонятно, как скрытие окна может уничтожить листы...{/post}{/quote}  
 
я завтра скопирую код и выложу здесь.  
ну и с ошибкой.{/post}{/quote}  
Оказывается,что при выполнении данной команды книга на самом деле скрывается,однако макрос не может с этой книгой работать.поэтому и выбивает ошибку. Поэтому как же все-таки сделать так,чтобы не было видно эту таблицу,но чтобы с ней работал макрос,и чтобы макрос работал именно с данной книгой,а не с другими открытыми?
 
{quote}{login=The_Prist}{date=16.02.2011 02:02}{thema=}{post}Макрос мы не видим, поэтому можем лишь гадать. Мое предположение: у Вас в коде идет обращение к ActiveCell,ActiveSheet,Activeworkbook....Может напрямую к Cells или Range. А Вам надо обращаться именно к книге с макросом. что делается через ThisWorkbook.Sheets("ИмяЛиста").Range{/post}{/quote}  
 
вот то,над чем работаю
 
Не знаю, как к Вам обратиться, но тему, видимо, придётся закрыть: Вы полагаете, что мы должны сами подобрать пароль к Вашему архиву?
 
я искренне извиняюсь.перезалил файл  
<EM><STRONG>Файл удален</STRONG> - велик размер - [<STRONG>МОДЕРАТОРЫ</STRONG>]</EM>
 
вот еще раз загружаю архив уже без пароля.еще раз приношу извинения
Страницы: 1
Читают тему
Наверх