Новости:

Из правил форума: Тема должна отражать суть вопроса, топики типа "help please" будут удаляться!

Главное меню

Возврат в предыдущий лист

Автор alexexcel, 11.10.2012, 19:38

« назад - далее »

alexexcel

Друзья, я бы очень хотел с помощью макроса переходить в предыдущий лист, в идеале независимо от того, в каком из открытых экселевских файлов этот лист находится, но если так нельзя, то тогда внутри одного файла. Макрос должен запоминать только последний посещенный лист, так что если я два раза подряд запустил бы макрос, я бы вернулся на исходный лист. Необходимое условие - макрос должен располагаться не в каждом файле, где я хочу иметь эту функциональность, я в Personal.xls, чтобы быть доступным для любых файлов.
Желательно возращаться к той же ячейке, с которой лист был покинут.

Это возможно?


sergo44441

Перед переходом на другой лист запоминайте предыдущий в переменной
dim predlist as worksheet
set predlist =activesheet
...............
.............
predlist.activate
Не торопись, и все успеешь намного быстрее

alexexcel

 Уважаемый sergo44441, с моим уровнем я не смогу воспользоваться вашей подсказкой.  Я нашел такой код из двух частей

Option Explicit

Private Sub Workbook_Open()
PreviousSheet = ActiveSheet.Name
CurrentSheet = ActiveSheet.Name
End Sub

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
PreviousSheet = CurrentSheet
CurrentSheet = ActiveSheet.Name
End Sub

Option Explicit
Public PreviousSheet$
Public CurrentSheet$

Sub BackToTheFuture()
Sheets(PreviousSheet).Activate
End Sub

Но его надо устанавливать в каждый файл и он насколько я понимаю, запоминают только внутри одного файла.
Может его можно переделать для моих нужд?

alexexcel

Помогите, пожалуйста.

Poltava

#4
Начал было писать макрос который будет ежесекундно проверять где мы находимся но наткнулся на то как можно отследить события в разных книгах. Вот накидал макрос
Option Explicit
Private WithEvents App As Application
Public Aws$, AWb$
Private Sub App_SheetDeactivate(ByVal Sh As Object)
   Aws = Sh.Name
   AWb = Sh.Parent.Name
End Sub
Private Sub App_WorkbookDeactivate(ByVal Wb As Workbook)
   AWb = Wb.Name
   Aws = Wb.ActiveSheet.Name
End Sub
Private Sub Workbook_Open()
   Set App = Application
End Sub
Sub PreviousSheet()
On Error Resume Next
Workbooks(AWb).Worksheets(Aws).Activate
If Err <> 0 Then Call MsgBox("Не удалось переключиться на лист " & Aws & " из книги " & AWb, vbInformation, Application.Name)
End Sub

Поместите его в модуль Эта Книга в PERSONAL назначите горячею клавишу и будет вам счастье :)
ps: Обнаружил небольшой баг при открытии файла а не запуске с ярлычка макрос вылетал. Убрал пару лишних строк кода все заработало
Не пытайтесь спорить с дебилом. Иначе вы опуститесь до его уровня. Где он задавит вас своим опытом.

alexexcel

Поместил, но при запуске он выдает ошибку Syntax error, выделяет слово "Attribute" (вся эта строка идет красным шрифтом). Кроме того, невозможно присвоить горячую клавишу, кнопка не активируется.

Poltava

Удалите эту строку вообще я ее случайно скопировал при  экспорте модуля
Не пытайтесь спорить с дебилом. Иначе вы опуститесь до его уровня. Где он задавит вас своим опытом.

alexexcel

Ок. Но из листа в лист не переходит, пишет в окошке:
"Не удалось переключиться на лист  из книги "
(листы я менял, чтобы создать историю)

Poltava

Вот этот макрос внедренный в книгу. Переключение будет работать пока запущена эта книга. Если записать в персонал то будет работать всегда.
Не пытайтесь спорить с дебилом. Иначе вы опуститесь до его уровня. Где он задавит вас своим опытом.

alexexcel

Спасибо большое, это очень круто!