Интересный вариант с сортировкой, даже не думал в этом направлении. Но, почему подумал про словарь. Когда страницы не добавляются, а удаляются, то в первой колонке остается метка удаленного листа. Думал, что удаляя из словаря ключ, можно как-то удалить за собой и элемент ему соответствующий или наоборот. Возможно ли это при сортировке, пока не знаю. Удалить сортировкой конечно же нет, после нее имеется ввиду. При повторной сортировке также соответствие слетает.
Не соображу что-то. Если код такой, куда это смещение добавить?
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Cells(1).Address = "$B$2" Then
If ActiveSheet.Range("3:6").EntireRow.Hidden = True Then
ActiveSheet.Range("3:6").EntireRow.Hidden = False
Else
If ActiveSheet.Range("3:6").EntireRow.Hidden = False Then
ActiveSheet.Range("3:6").EntireRow.Hidden = True
End If: End If: End If
End Sub
Получится ли реализовать это, чтобы не надо было выделять какую-нибудь другую ячейку, чтобы произошло переключение? Вариант vikttur, если правильно понял подразумевает дополнительное выделение другой ячейки: нажал В2 = действие1, выделил другую ячейку, нажал еще раз B2 = действие2.
Всем добрый день. Пытаюсь сделать некую альтернативу группировки строк (открыть/скрыть) через выделение определенной ячейки. Это получилось сделать если выделять разные ячейки: нажал на A2 строки скрылись, нажал на B2 - строки открылись.
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Cells(1).Address = "$A$2" Then
ActiveSheet.Range("3:6").EntireRow.Hidden = True
[A2].Value = "+"
Else
If Target.Cells(1).Address = "$B$2" Then
ActiveSheet.Range("3:6").EntireRow.Hidden = False
[A2].Value = "-"
End If
End If
End Sub
Как сделать так чтобы скрытие/открытие строк происходило при выделении только одной ячейки? Нажал раз на B2 - строки скрылись, нажал повторно - строки открылись.
И еще вопрос. Листов, где планируется это сделать будет много. Можно ли этот код определить не в модуль листа, а в общий модуль? Если да, то что необходимо добавить?
Возникла одна проблема. Мне нужно заменить в столбце все запятые "," на пусто "". В одной ячейке оказалось слишком много символов (более 1500, это результат работы макроса по протоколированию изменений в ячейках). Поиск-замена (макросом) говорит, что слишком сложная формула. Можно ли из общего количества символов в ячейке не найти-заменить, а просто удалить символ (запятую). Если это тоже не поможет (скорее всего), то что можно сделать в этом случае?
Добрый день. Запутался в элементарном. Как на другом листе заменить символ в колонке не выделяя и переходя на него, без Selecta. На активном листе заменяю так:
Код
Sub ЗаменаСимвола()
[A:A].Replace "1", "2"
End Sub
А если с листа Лист1 запускаю этот макрос, уже не получается:
Код
Sub ЗаменаСимвола()
ThisWorkbook.Sheets("Лист2"). Range([A1], [A100].End(xlUp)).Replace "1", "2"
End Sub
Листов будет относительно много, не менее 100 шт. Ярлыки всех листов видны не будут. По этой и другим причинам переходить к последним изменениям (чаще) или на лист с оглавлением (реже) будет весьма удобно (скорее всего:).
А вопрос решил так: 1. В Private Sub Workbook_BeforeClose(Cancel As Boolean) вставил
2. Создаем гиперссылку по имени листа (можно с пробелами в названии) и переходим по ней.
Код
Private Sub Гиперссылка()
ActiveSheet.Hyperlinks.Add Anchor:=ThisWorkbook.Sheets("ИмяЛиста").Range("A1"), _
Address:="", _
SubAddress:="'" & ThisWorkbook.Sheets("ИмяЛиста").Range("A1").Value & "'!A1", _
TextToDisplay:=ThisWorkbook.Sheets("ИмяЛиста").Range("A1").Value
ThisWorkbook.Sheets("ИмяЛиста").Range("A1").Hyperlinks(1).Follow NewWindow:=False, AddHistory:=True
End Sub
3. На кнопку или в автозагрузку вешаем выбор.
Код
Private Sub Переход()
On Error Resume Next
If MsgBox("Вернуться на место где остановились?!" & vbLf & _
"Да - переходим на лист " & [A1] & vbLf & _
"Нет - переходим к оглавлению", vbYesNo) = 6 Then
Call Гиперссылка
Else
Sheets("Оглавление").Select
End If
End Sub
Все работает как задумывалось. Спасибо всем за помощь.
Разобрался. Отдельный лист "Лог" (sLog) являлся последним изменяемым и он при закрытии (и открытии) становился очень скрытым. Спасибо за помощь!!!
Особенность только в том, что этот макрос автоматически перемещает изменяемый лист и делает его последним в закладках. Когда листов много это неудобно. Все путается.
У меня при закрытии книги есть код который протоколирует активность пользователя (время входа-выхода)
Код
Dim LastRow As Integer
LastRow = ThisWorkbook.Sheets(sLog).Range("A10000").End(xlUp).Row 'ищем последнюю занятую строчку в логах
If LastRow > 1 Then ThisWorkbook.Sheets(sLog).Cells(LastRow, 3) = Now 'заносим дату-время выхода из файла
Если с этим кодом - ошибка при выходе про неверное завершение Move появляется. Если этот код убрать - выходит нормально. В чем особенность?
Если вместо неравно ставлю = не ругается при открытии закрытии, но потом при выборе - да, ошибка 1004.
Пробую методом исключений пока сам. Чего ему не понравилось.
В коде точно оставить один из вариантов: или Private Sub Workbook_SheetActivate(ByVal Sh As Object) или Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) ?!
В примере все получилось как надо. Переходит! Перебросив в свой пример выдает ошибку при закрытии и открытии книги что Метод Move из класса Worksheet завершен неверно и подсвечивает эту строку кода
Код
Sh.Move After:=Sheets(Sheets.Count)
Весь код (модуль книги).
Код
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Sh.Name <> "Титул" Then
Sh.Move After:=Sheets(Sheets.Count)
Application.DisplayAlerts = False
ThisWorkbook.Save
Application.DisplayAlerts = True
End If
End Sub
В чем может быть дело? Модуль моя книга у меня не пустой. Может что-то там противоречит Move?!
Лист с содержанием есть. Последний редактируемый лист всегда разный. При открытии книги и авторизации пользователя, чтобы он не вспоминал на каком месте закончил нужен переход на последний редактируемый (активный при закрытии) лист
Файл при закрытии принудительно сохраняется. А при его открытии хочу сделать, чтобы появлялась выбрать действие: вернуться и продолжить или начать с оглавления.
В ячейку (например А1) при закрытии книги имя листа записывает, но как перейти на лист, имя которого записано в этой ячейке?
С созданием гиперссылки не получается. Что-то не так указываю. Пробовал с активацией ячейки (SendKeys "{F2}+{Enter}"+макрос в модуле листа) и переходом на лист. Тоже не выходит.
Как узнать имя листа, который был активным при закрытии книги? Это необходимо для предоставления выбора пользователю при открытии файла: перейти на начальную страницу или на последнюю редактируемую (просмотренную).
Ячеек много в разных местах листа. Листов тоже много. А условное форматирование добавляю макросом. Включаю и выключаю его для проверки.
Хотел выделить и именовать все проверяемые ячейки в разных частях листа и сверить их с так же расположеными ячейками в другой части листа (скрытой). Чтобы условное форматирование касалось только этих ячеек, а не всего диапазона (с левого верхнего угла, до правого нижнего).
Есть два равновеликих именованных диапазона со значениями (текст, число). Можно ли и как правильно, если да, использовать имена диапазонов в сравнении их значений используя условное форматирование (формулы)?
Добрый вечер. Подскажите, как можно сделать так, чтобы цвет заливки у фигуры (прямоугольника) менялся при нажатии на нее левой кнопки мыши? Один раз нажал - фигура поменяла цвет с исходного (например зеленый цвет) на синий, еще раз нажал - обратно поменяла на зеленый и т.д.
Есть заданный диапазон, который используется в нескольких процедурах модуля листа. Как правильно объявить переменную, чтобы не выдавало ошибок при его использовании в других макросах? Пробовал по разному, но выходит. Что-то упускаю.
Код
Dim v As Range
Set v = ActiveSheet.Range("A5:I5")
и далее его использование в другом макросе, который выдает ошибку, что невидно объекта.
Какие есть варианты, что бы можно регулярно выполнять действие (копирование например) на нескольких листах сразу названия которых меняются, но начинаются названия одинаково?