- Вопрос или проблема
- Простое решение которое устанавливает цвет ячейки при изменении выделения
- Сложное решение которое изменяет цвет ячейки только при потере фокуса
- Ответ или решение
- 1. Использование VBA для выделения ячеек
- 2. Использование сторонних приложений
- 3. Использование плагинов для Excel
- 4. Визуальные отметки
- 5. Используйте встроенные возможности
- Заключение
Вопрос или проблема
Связанный с этим вопрос: Показать выделение ячеек в Excel, когда он не в фокусе, только в моем случае это касается Microsoft Word.
Когда я выделяю текст или колонку/строку в Microsoft Word или Excel (2003, 2007, 2010 или 2013), он отображается выделенным вот так в Word:
и в Excel:
Однако, когда я переключаю фокус на другую программу, выделенный текст больше не выделен.
Я обычно работаю с 2 мониторами, где один монитор содержит документ/таблицу с данными, которые мне нужно прочитать, а второй монитор – это то место, где я фактически выполняю работу. Я выделю какой-то текст (или ячейки), чтобы выделить его среди множества страниц данных, а затем переключаю программы, но выделенный текст больше не виден.
Существует ли постоянное решение этой проблемы?
Быстрый способ устранить половину вашей проблемы (при переключении с Excel на Word) – это скопировать текст. Когда вы нажимаете Ctrl + c, ячейки продолжают быть отмеченными (подсветка исчезла, но вокруг текста остается пунктирная линия).
Недостаток этого в том, что текст будет отмечен только до тех пор, пока вы держите ячейки скопированными. Это означает, что вы не можете копировать что-то другое, иначе выделение исчезнет. К сожалению, это не сработает с Word на Excel.
Это похоже на эксклюзивную “функцию” Microsoft. Для большинства проектов мне нужен только доступ только для чтения, и форматирование в моем случае не имеет значения, поэтому я перешел на OpenOffice, который не проявляет такого поведения.
Нет постоянного решения этой проблемы.
Рабочий обход (может стать раздражающим через некоторое время) может заключаться в изменении выделения выбранных ячеек, пока они выбраны, и повторном выделении их снова, чтобы убрать цвет.
Вставьте этот код в код Sheet1, а затем перейдите к своей таблице и выберите некоторые ячейки, выберите другие, затем повторно выберите первые, чтобы убрать цвет
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim cell As Range
For Each cell In Target.Cells
If cell.Interior.Color = RGB(60, 150, 230) Then
cell.Interior.Pattern = xlNone
Else
cell.Interior.Color = RGB(60, 150, 230)
End If
Next
End Sub
Этот VBa сделает это, но предполагает, что вы НЕ используете подсветку. Если вы это сделаете, ваша подсветка будет испорчена, так что не используйте ее.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
ActiveCell.Worksheet.Cells.Interior.ColorIndex = xlNone
ActiveCell.EntireRow.Interior.ColorIndex = 19
End Sub
Как крупный обход (если подсветка вам не подходит), вы можете использовать что-то вроде JRuler (послушайте меня 🙂 !!), так как это позволит вам оставить линейку на экране с нужной строкой над ней, чтобы, когда ваши глаза вернутся на этот экран, вы могли видеть, где вы были (так что вы можете увидеть, я потерял свою подсветку, но, по крайней мере, я вижу, что смотрел на строку 3)!
Не поймите меня неправильно, это утомительно и больно, если вы делаете это часто, но, возможно, этого будет достаточно для любой программы (Word и Excel).
После десяти лет, когда эта проблема сводила меня с ума, я наконец нашел решение, которое работает для меня. К сожалению, это не бесплатно… Actual Window Manager имеет функцию “Игнорировать деактивацию”, которую можно включить для конкретных приложений. Это заставляет окно думать, что оно все еще в фокусе, даже когда это не так. Я включил это для всех офисных приложений, и теперь я все еще могу видеть выделенный выбор, даже когда другое окно в фокусе. У меня не было никаких негативных побочных эффектов. Я также использую несколько мониторов, и эта программа имеет множество других полезных инструментов для работы с несколькими мониторами, что сделало ее стоящей для меня. Я установил пробную версию, затем удалил ее, и она предложила мне скидку в 30%. Возможно, есть бесплатная программа, которая делает это, но я не смог найти такую… Надеюсь, это поможет кому-то так же, как и мне!
Я долго боролся с этой же проблемой. Я тоже теряюсь в плотных файлах Excel, когда работаю на нескольких экранах.
В интернете есть огромная коллекция плагинов для Excel. Я выяснил, что расширение Kutools Excel (бесплатная версия) имеет один щелчок для включения/выключения выделения, которое остается видимым, даже если Excel не в фокусе. У Kutools также, кажется, много дополнительных функций, но это определенно не единственный доступный вариант.
Вот снимок экрана выделения Kutools в действии:
Я знаю, что некоторые люди боятся плагинов или инструментов сторонних производителей, но использование их, вероятно, самый быстрый и простой вариант.
Вставьте текстовое поле, которое растягивается на длину ячеек. Напишите строку из ******* подобных символов, чтобы заполнить текстовое поле. Вы можете перемещать текстовое поле вниз по странице, как линейку или лист бумаги на бумажной копии. Удалите, когда закончите.
Простое решение которое устанавливает цвет ячейки при изменении выделения
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Selection.Interior.ColorIndex = xlColorIndexNone
Selection.Interior.Color = RGB(204, 204, 204)
End Sub
Сложное решение которое изменяет цвет ячейки только при потере фокуса
В стандартном модуле:
Option Explicit
Public s As Range
На листе(ах), где вы хотите, чтобы это работало:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Set s = Selection
End Sub
В ThisWorkbook
:
Private Sub Workbook_Deactivate()
If s Is Nothing Then
Set s = Selection
Exit Sub
End If
s.Interior.ColorIndex = xlColorIndexNone
s.Interior.Color = RGB(204, 204, 204)
' Это необязательное форматирование, чтобы ячейки выглядели так, будто они действительно выбраны
s.Borders.Color = RGB(130, 130, 130)
s.BorderAround _
Color:=RGB(30, 130, 37), Weight:=xlThick
End Sub
Private Sub Workbook_Activate()
If s Is Nothing Then
Set s = Selection
Exit Sub
End If
s.Interior.ColorIndex = xlColorIndexNone
s.Borders.ColorIndex = xlColorIndexNone
End Sub
Цитаты: Простое решение основано на ответе от @Dave; Сложное решение было собрано из множества источников, особенно с помощью @JohnColeman в эта публикация.
Очень простой способ сделать это – использовать условное форматирование и VBA.
Просто добавьте это в ваш код ThisWorkbook:
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
If Application.CutCopyMode = False Then
Application.Calculate
End If
End Sub
и выполните следующий код только один раз, чтобы создать правила условного формата:
Sub CreateConditionalFormats()
Dim y As FormatCondition
For Each ws In ThisWorkbook.Worksheets
DoEvents
'При желании удалите все существующие условные форматы
'ws.Cells.FormatConditions.Delete
' Выделение выбора
Set y = ws.Cells.FormatConditions.Add(Type:=xlExpression, Formula1:="=AND(ROW()=CELL(""row""), COLUMN()=CELL(""col""))")
With y.Borders(xlTop)
.LineStyle = xlSolid
.Color = -16776961
.TintAndShade = 0
.Weight = xlThin
End With
With y.Borders(xlBottom)
.LineStyle = xlSolid
.Color = -16776961
.TintAndShade = 0
.Weight = xlThin
End With
With y.Borders(xlLeft)
.LineStyle = xlSolid
.Color = -16776961
.TintAndShade = 0
.Weight = xlThin
End With
With y.Borders(xlRight)
.LineStyle = xlSolid
.Color = -16776961
.TintAndShade = 0
.Weight = xlThin
End With
y.StopIfTrue = False
y.SetFirstPriority
' Выделение строки
Set y = ws.Cells.FormatConditions.Add(Type:=xlExpression, Formula1:="=ROW()=CELL(""row"")")
With y.Borders(xlTop)
.LineStyle = xlDash
.Color = -16776961
.TintAndShade = 0
.Weight = xlThin
End With
With y.Borders(xlBottom)
.LineStyle = xlDash
.Color = -16776961
.TintAndShade = 0
.Weight = xlThin
End With
y.StopIfTrue = False
' Выделение колонки
Set y = ws.Cells.FormatConditions.Add(Type:=xlExpression, Formula1:="=COLUMN()=CELL(""col"")")
With y.Borders(xlLeft)
.LineStyle = xlDash
.Color = -16776961
.TintAndShade = 0
.Weight = xlThin
End With
With y.Borders(xlRight)
.LineStyle = xlDash
.Color = -16776961
.TintAndShade = 0
.Weight = xlThin
End With
y.StopIfTrue = False
Next
End Sub
Использование вставки формы/прямоугольника – это простой обход. Выберите опцию “Без заливки”, а затем вы можете даже редактировать ячейки через него.
Посмотрите на изображение здесь:
Это безумие, что этот вопрос вообще пришлось задавать, но поскольку Microsoft, похоже, не собирается это исправлять, вот решение, которое так же глупо, как и проблема.
RDP (удаленный рабочий стол) на другой ПК и запустите “исходную” копию Excel/Word — ту, где вы хотите, чтобы выделение оставалось видимым — там. Запустите другой экземпляр локально на своем ПК.
Хотя выделение в удаленном экземпляре не будет скрыто, когда вы переключаете фокус с удаленного на локальное окно (просто убедитесь, что окно Word/Excel остается активным внутри сеанса RDP), вы все равно можете использовать буфер обмена и т. д.
Вы можете воспользоваться функцией совместного использования диска RDP, чтобы дать удаленной машине доступ к файлу, который вы хотите открыть, прямо на своем локальном компьютере.
Ответ или решение
К сожалению, в Microsoft Word и Excel нет встроенной функции или постоянного решения, позволяющего сохранять выделение текста или ячеек при переключении фокуса на другое приложение. Это связано с особенностями работы интерфейса самих программ, где выделение теряется, как только окно приложения теряет фокус. Тем не менее, существуют некоторые обходные решения, которые могут помочь в вашем случае, особенно если вы часто работаете с двумя мониторами.
1. Использование VBA для выделения ячеек
Вы можете воспользоваться макросами VBA, чтобы временно выделить ячейки в Excel, что может помочь визуально обозначить выделенные значения даже при переключении между программами. Ниже представлен пример кода, который может быть вставлен в код листа (Sheet1):
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim cell As Range
For Each cell In Target.Cells
If cell.Interior.Color = RGB(60, 150, 230) Then
cell.Interior.Pattern = xlNone
Else
cell.Interior.Color = RGB(60, 150, 230)
End If
Next
End Sub
Этот код цветного выделения внутри выбранных ячеек. Однако имейте в виду, что код может повлиять на существующее форматирование.
2. Использование сторонних приложений
Если вам нужно более гибкое решение, вы можете рассмотреть покупку сторонних программ. Например, Actual Window Manager имеет функцию "Игнорировать деактивацию", которая позволяет приложению продолжать отображаться, даже когда оно теряет фокус. Вы сможете видеть выделение текста в Microsoft Office, даже когда переключаетесь на другие задачи. Это решение имеет свои плюсы и минусы, но оно эффективно, если вас устраивает использование стороннего ПО.
3. Использование плагинов для Excel
Существуют плагины для Excel, такие как Kutools, которые могут предоставить дополнительные возможности, включая возможность отображения выделенного текста даже при потере фокуса. Этот инструмент имеет разнообразные функции для упрощения работы с Excel.
4. Визуальные отметки
Другой методу могут служить простые визуальные отметки. Например, вы можете вставить текстовое поле или фигуру, которая будет фиксироваться на экране, чтобы вы могли следить за местоположением текста или ячеек, над которыми работали. Это можно сделать следующим образом:
- Перейдите во вкладку Вставка.
- Выберите Фигуры и нарисуйте например, прямоугольник.
- Установите его цвет в "Нет заполнения" – это будет служить ориентиром.
5. Используйте встроенные возможности
Вы также можете воспользоваться функцией "Буфер обмена". Например, если вы выделите текст или ячейки и нажмете Ctrl + C
, это создаст обводку вокруг последнего выделения, хотя и не будет окрашивать его. Это является временным решением, позволяющим видеть выделение, пока элементы находятся в буфере обмена.
Заключение
Как вы видите, вопрос о сохранении выделения текста или ячеек при переключении фокуса в Microsoft Word и Excel требует применения различных обходных решений и подходов. Обдумайте ваши потребности и выберите тот метод, который подходит именно вам. Хотя полноценного решения в рамках Microsoft Office нет, использование описанных выше методов может значительно упростить вашу работу и помочь избежать путаницы в процессе.