Страницы: 1
RSS
VBA Как переключать окна/книги?
 
Добрый вечер!  
Задаю листы.  
Set wb = ThisWorkbook  
Sheets(a).Select  
Sheets(a(i)).Columns("E:F").Cut  
Columns("A:A").Select  
Selection.Insert Shift:=xlToRight  
Set nb = Workbooks.Add  
Set ws = nb.Sheets(1)  
With ws  
.Select  
.Name = "Результат"  
.Rows("1:4").Select  
ActiveWindow.FreezePanes = True  
End With  
lastrow = sh.Cells(8, 5).End(xlDown).Row  
k = 4 'заполнение под "шапкой"  
For RowFind_ll = 8 To lastrow ' цикл по ТП  
RowFind_l = RowFind_ll  
n = 1 'порядковый номер  
Range(Cells(RowFind_l, 4), Cells(lastrow, 4)).Select ' ---> Здесь почему то стопорится из-за того что не переключается на другую книгу. Подскажите пжл, как исправить.  
Selection.Find(What:="", After:=ActiveCell, LookAt:=xlPart).Select  
RowFind_ll = Selection.Row  
next RowFind_ll    
 
//  
Пробовал указывать перед этой строчкой sh.select - тоже не переключается  
Windows("Лист1").Activate - Можно как-нибудь обойтись без этой строчки, т.к. надо будет вытаскивать имя книг и т.п. Мне казалось что это проще делает.  
 
P.S.Заранее спасибо за любой совет, решение.
 
Я дико извиняюсь, но можно ли узнать, что вообще этот код делает?  
И очень непонятно вот это: Set wb = ThisWorkbook. И где эта "wb" используется?
There is no knowledge that is not power
 
а вот эта строка у вас нормально срабатывает?  
 
lastrow = sh.Cells(8, 5).End(xlDown).Row
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
lastrow = sh.Cells(8, 5).End(xlDown).Row  
 
Что за переменная "sh"?
There is no knowledge that is not power
 
{quote}{login=Johny}{date=05.05.2011 05:06}{thema=Re: VBA Как переключать окна/книги?}{post}Я дико извиняюсь, но можно ли узнать, что вообще этот код делает?  
И очень непонятно вот это: Set wb = ThisWorkbook. И где эта "wb" используется?{/post}{/quote}  
Извиняюсь пару строчек забыл захватить. Я писал. И вся используется. И хотелось бы что бы когда я писал sh.select - становилась активной книга ThisWorkbook, а не получается - не переключается на окно этой книги, остается в новой книге и выдает ошибку.  
lastrow = sh.Cells(8, 5).End(xlDown).Row - это мои опыты, чтобы производил операции с листом sh (книге где находиться макрос). Работает. Но если задавать sh.cells(...)... - то выдает ошибку на подобии вышеописанного.  
 
 
Set wb = ThisWorkbook  
Sheets(a).Select  
Sheets(a(i)).Columns("E:F").Cut  
Columns("A:A").Select  
Selection.Insert Shift:=xlToRight  
Set nb = Workbooks.Add  
Set ws = nb.Sheets(1)  
With ws  
.Select  
.Name = "Результат"  
.Rows("1:4").Select  
ActiveWindow.FreezePanes = True  
End With  
 
For Each sh In wb.Worksheets    
Set sh = wb.Sheets(a(i))  
lastrow = sh.Cells(8, 5).End(xlDown).Row  
k = 4 'заполнение под "шапкой"  
For RowFind_ll = 8 To lastrow ' цикл по ТП  
RowFind_l = RowFind_ll  
n = 1 'порядковый номер  
Range(Cells(RowFind_l, 4), Cells(lastrow, 4)).Select ' ---> Здесь почему то стопорится из-за того что не переключается на другую книгу. Подскажите пжл, как исправить.  
Selection.Find(What:="", After:=ActiveCell, LookAt:=xlPart).Select  
RowFind_ll = Selection.Row  
next RowFind_ll    
next sh
 
имхо, здесь имеем довольно дикую смесь результатов работы макрорекодера и каких-то (не очень понятных) попыток их доработки.  
много мусора - те же ActiveWindow.FreezePanes = True, .Rows("1:4").Select и др.  
 
возможно, проще озвучить саму задачу?
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
{quote}{login=The_Prist}{date=05.05.2011 05:25}{thema=}{post}Вот эта строка:  
ActiveWindow.FreezePanes = True  
 
будет работать только с активным листом. Так что если нужно закрепление областей, то активировать лист все равно придется.  
Но самое интересное, что вы спрашиваете про строку Windows("Лист1").Activate, которая напрочь отсутствует в коде.{/post}{/quote}  
 
Блин. Хорошо. Как сделать активным этот лист? А потом другой лист из другой книги (ThisWorkbook)?
 
ikki, Согласен полностью.  
russia, попытайтесь ещё раз описать, для чего нужен сей макрос?
There is no knowledge that is not power
 
{quote}{login=russia}{date=05.05.2011 05:32}{thema=Re: }{post}  
Блин. Хорошо. Как сделать активным этот лист? А потом другой лист из другой книги (ThisWorkbook)?{/post}{/quote}  
Зачем активировать листы? Запиши нужные листы в переменные - и обращайся к ним.
There is no knowledge that is not power
 
{quote}{login=ikki}{date=05.05.2011 05:29}{thema=}{post}имхо, здесь имеем довольно дикую смесь результатов работы макрорекодера и каких-то (не очень понятных) попыток их доработки.  
много мусора - те же ActiveWindow.FreezePanes = True, .Rows("1:4").Select и др.  
 
возможно, проще озвучить саму задачу?{/post}{/quote}  
 
Задача. Мне необходимо создать Новую книгу для помещения туда результатов, переключиться на неё и заполнить в ней Шапку(действие1). Далее переключиться в книгу "This" и выполнить действие2. Результаты действия 2 занести в новую книгу.
 
{quote}{login=Johny}{date=05.05.2011 05:39}{thema=Re: Re: }{post}{quote}{login=russia}{date=05.05.2011 05:32}{thema=Re: }{post}  
Блин. Хорошо. Как сделать активным этот лист? А потом другой лист из другой книги (ThisWorkbook)?{/post}{/quote}  
Зачем активировать листы? Запиши нужные листы в переменные - и обращайся к ним.{/post}{/quote}  
Так и делал! Стопорится на том моменте что указал в теме.
 
Так именно в этой строке ссылки на лист нет.  
Если бы было типа так:  
sh.Range(sh.Cells(RowFind_l, 4), sh.Cells(lastrow, 4)).Select  
вот это было бы "так и делал".  
Но тогда селект уже не нужен, разве что как финальное действие - показать юзеру результат.
 
{quote}{login=Hugo}{date=05.05.2011 06:11}{thema=}{post}Так именно в этой строке ссылки на лист нет.  
Если бы было типа так:  
sh.Range(sh.Cells(RowFind_l, 4), sh.Cells(lastrow, 4)).Select  
вот это было бы "так и делал".  
Но тогда селект уже не нужен, разве что как финальное действие - показать юзеру результат.{/post}{/quote}  
Пробовал:  
Range(sh.Cells(RowFind_l, 4), sh.Cells(lastrow, 4)).Select  
и  
sh.Range(Cells(RowFind_l, 4), Cells(lastrow, 4)).Select  
//  
Пойду проверять.
 
Ну значит недопробовали:)  
Только я в Вашем примере нигде не видел, где эта sh определяется...
 
{quote}{login=Hugo}{date=05.05.2011 06:21}{thema=}{post}Ну значит недопробовали:)  
Только я в Вашем примере нигде не видел, где эта sh определяется...{/post}{/quote}  
Сообщение от 05.05.2011, 17:28  
в середине указывается.
 
Да, там я не вникал.  
Но вот это как понимать?  
For Each sh In wb.Worksheets    
Set sh = wb.Sheets(a(i))
 
{quote}{login=russia}{date=05.05.2011 06:51}{thema=Re: }  
Range(Cells(RowFind_l, 4), Cells(lastrow, 4)).Select ' ---> Здесь почему то стопорится из-за того что не переключается.{/post}{/quote}  
Здесь имеется ввиду активный лист.
There is no knowledge that is not power
 
Range(Cells(RowFind_l, 4), Cells(lastrow, 4)).Select ' ---> Здесь почему то стопорится из-за того что не переключается
There is no knowledge that is not power
 
{quote}{login=Hugo}{date=05.05.2011 07:28}{thema=}{post}Да, там я не вникал.  
Но вот это как понимать?  
For Each sh In wb.Worksheets    
Set sh = wb.Sheets(a(i)){/post}{/quote}  
Это были эксперименты запустить макрос :)  
А так он должно быть:  
Set sh = wb.Sheet(a)  (наверное)  
 
Хотел чтобы этот цикл по листам книги прошелся, поэтому написал это:  
For Each sh In wb.Worksheets  
 
Проверил - лист один только берет.  
Может нужно так написать?  
For i = 0 To UBound(a)  
ind = 0  
For Each sh In wb.Worksheets
 
{quote}{login=}{date=05.05.2011 09:01}{thema=Re: }{post}{quote}  
For i = 0 To UBound(a)  
For Each sh In wb.Worksheets{/post}{/quote}
 
хотел написать  
{quote}{login=}{date=05.05.2011 09:01}{thema=Re: }{post}  
For i = 0 To UBound(a)  
For Each sh In wb.Worksheets{/post}{/quote}
 
Это уже ближе.  
Но ведь если  
For Each sh In wb.Worksheets  
то в sh уже есть ссылка на лист, и  
Set sh = wb.Sheets(a(i))  
совершенно лишнее, и даже вероятно только мешает.  
Или одно, или другое.
 
{quote}{login=Hugo}{date=05.05.2011 09:08}{thema=}{post}Это уже ближе.  
Но ведь если  
For Each sh In wb.Worksheets  
то в sh уже есть ссылка на лист, и  
Set sh = wb.Sheets(a(i))  
совершенно лишнее, и даже вероятно только мешает.  
Или одно, или другое.{/post}{/quote}  
Да я тоже об этом думал, но просто макрос не работал, вот я и подумал, что может нужно задать.  
Спасибо, Hugo!
 
Возвращаясь к переключению между книгами:  
Windows("Нужная_Книга.xls").Activate
Страницы: 1
Читают тему
Наверх