2015-07-29 5 views
1

Я просто хочу, чтобы выбранный диапазон был желтым и возвращался к бесцветному, когда он был отменен. Код выглядит следующим образом:Выделить текущий выделение желтым

Option Explicit 
Public previouscell As Range 

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
    Selection.Interior.Color = vbYellow 
    previouscell.Interior.ColorIndex = xlNone 
    Set previouscell = Selection 
End Sub 

Проблема заключается в настройке предыдущей ячейки в первую очередь. Я попытался поместить его в Worksheet_Activate(), но он не сработает, как только я открою книгу (только когда я сменил лист, после этого он будет работать отлично).

Поэтому я попытался объявить его публичным в ThisWorkbook.Workbook_open, а также:

Option Explicit 
Public previouscell As Range 
Private Sub Workbook_Open() 
    Set previouscell = ActiveCell 
    ActiveCell.Interior.Color = vbYellow 
End Sub 

Но он не признает переменную previouscell то, потому что я считаю, что это не передается от ThisWorkbook (я закрыть и снова открыть книгу перед испытанием). Кто-нибудь знает, что мне нужно изменить для этой простой задачи?

+0

Где вы разместите код? Не помещайте его в свой модуль. Поместите его в лист, где вы хотите, чтобы он работал. – findwindow

ответ

2

(четвёртую редактировать)

Используйте этот код книги, с кодом листа удалены:

Option Explicit 
Public previousCells As Range 

Private Sub Workbook_Open() 
    SetSelectionYellow 
End Sub 

Private Sub Workbook_SheetActivate(ByVal Sh As Object) 
    SetSelectionYellow 
End Sub 

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) 
    SetSelectionYellow 
End Sub 

Private Sub SetSelectionYellow() 
    If Not previousCells Is Nothing Then previousCells.Interior.ColorIndex = xlNone 
    Set previousCells = Selection 
    previousCells.Interior.Color = vbYellow 
End Sub 
+0

Ницца! Это здорово, потому что он работает на каждом листе! –

1

Вы находитесь на правильном пути с первым блоком кода. Просто проверьте, установлено ли для previouscell что угодно, и если нет, установите его для текущего выбора (или того, что вы хотите сделать).

Option Explicit 
Public previouscell As Range 

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
    If previouscell Is Nothing Then 
     Set previouscell = Selection 
    End If 

    Selection.Interior.Color = vbYellow 
    previouscell.Interior.ColorIndex = xlNone 
    Set previouscell = Selection 
End Sub 
+0

Если вы переключите линии 'Selection.Interior.Color = vbYellow' и' previouscell.Interior.ColorIndex = xlNone', вы не будете пустым ячеек, когда новый выбор будет перекрывать предыдущий. – eykanal

2

Это похоже на работу, если вы поместите его в модуль кода рассматриваемого листа.

Sub Worksheet_SelectionChange(ByVal Target As Range) 
    Cells.Interior.ColorIndex = xlNone 
    ActiveCell.Interior.Color = vbYellow 
End Sub 
+1

Единственная проблема заключается в том, что если у вас есть ячейки, в которых вы хотите иметь внутренний цвет (например, заголовки), этот код будет устанавливать цвета внутренних элементов этих клеток в xlNone. – Tim

+0

Очень хорошая точка. – findwindow

0

В подразделах ThisWorkbook.Workbook_Open установите previouscell А1 (или какую-то по умолчанию ячейки, которая не имеет цвета интерьера). Затем в разделе Worksheet_SelectionChange сделайте свою вещь. У вас все правильно, но вам нужно было 2 части: 1) установка начального значения по умолчанию для предыдущей ячейки и 2) изменение внутренней части ячеек при изменении выбора. Вы сделали часть 2, но пропустил часть 1.

Смежные вопросы