未獲得焦點時在 Excel 中顯示儲存格選擇

未獲得焦點時在 Excel 中顯示儲存格選擇

當視窗未獲得焦點時,Excel(2003 和 2007)不顯示所選的儲存格、行或列,這確實很煩人。我通常想在另一個應用程式中工作時引用當前單元格或行。

是否有任何解決方法或修復程序可以使單元格/行在未聚焦時突出顯示?我知道您可以複製單元格(Ctrl+C),但每次都這樣做有點煩人。

答案1

我認為有一個解決方法,但這實際上取決於您的情況!

您可以建立一個巨集,該巨集在選擇變更時觸發,而且它只是變更每個儲存格的背景。當您「離開」儲存格時,它將將該行的背景值重設為白色,然後選擇新行。

我將其添加到 Visual Basic 視窗中的 Sheet1 中。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Cells.Interior.ColorIndex = xlColorIndexNone
    ActiveCell.EntireRow.Interior.ColorIndex = 34
End Sub

此螢幕截圖是在應用程式失去焦點時拍攝的。

這可能很煩人,但您可以輕鬆添加一個按鈕來打開或關閉此功能!

底片是(從我的頭腦中:它將刪除您當前的任何突出顯示。因此,如果您的頁面上有突出顯示(彩色單元格),那麼最好不要使用它!此外,它可能會打印突出顯示的行!

在此輸入影像描述

答案2

這是@datatoo 程式碼的修改。它讀取先前的值以防止丟失當前的填滿顏色。它還會更改文字顏色以使其進一步突出。我將其新增至程式碼編輯器中的 Excel 工作表(Excel 中的 Alt-F11)。

點選這裡有關建立工作表更改事件的資訊。

'VBA code for Excel to show active cell in worksheet when worksheet is out of focus

Dim wasActive As String
Dim originalFillColor As String
Dim originalTextColor As String

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    'Set up colors on load
    If wasActive = Empty Then
        wasActive = "A1"
        originalFillColor = Range(wasActive).Interior.Color
        originalTextColor = Range(wasActive).Font.Color
    End If

    'Reset previous cell to original color values; If statement prevents removal of grid lines by using "0" for clear fill color when white
    If originalFillColor = 16777215 Then
        Range(wasActive).Interior.ColorIndex = "0"
        Range(wasActive).Font.Color = originalTextColor
    Else
        Range(wasActive).Interior.Color = originalFillColor
        Range(wasActive).Font.Color = originalTextColor
    End If

    'Set new colors and change active cell to highlighted colors (black fill with white text)
    originalFillColor = ActiveCell.Interior.Color
    originalTextColor = ActiveCell.Font.Color
    wasActive = ActiveCell.Address
    ActiveCell.Interior.ColorIndex = "1"
    ActiveCell.Font.ColorIndex = "2"

End Sub

答案3

如果需要的話,你可以做這樣的事情。雖然它可能是特定於表的

Dim wasActive As String

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If wasActive = Empty Then wasActive = "A1"
Range(wasActive).Interior.ColorIndex = "0"
ActiveCell.Interior.ColorIndex = "6"
wasActive = ActiveCell.Address
End Sub

這會將不活動的儲存格變更回白色,並將活動儲存格變更為黃色。當視窗不活動時仍然顯示。不確定這是最好的方法,但它有效

答案4

使用形狀突出顯示所選內容。

注意:僅當切換到另一個 Excel 視窗時才有效。作為解決方法,您可以開啟一個空的 Excel 視窗並切換到此窗口,然後再切換到另一個應用程式以保持突出顯示。

只需將其添加到您的 ThisWorkbook 代碼(您的工作簿,而不是工作表的代碼)。這適用於工作簿中的每張工作表。

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    DeleteSelectionHighlight
End Sub
Private Sub Workbook_WindowActivate(ByVal Wn As Window)
    DeleteSelectionHighlight
End Sub
Private Sub Workbook_WindowDeactivate(ByVal Wn As Window)
  On Error Resume Next
    Dim shp As Shape
    Application.ScreenUpdating = False

    Set shp = ActiveSheet.Shapes("SelectionHighlight")
    If Err.Number <> 0 Then
        Set shp = ActiveSheet.Shapes.AddShape(msoShapeRectangle, 1, 1, 1, 1)
        With shp 'Format shape to your preference
            .Name = "SelectionHighlight"
            .Line.ForeColor.RGB = RGB(226, 0, 0) ' Border color
            .Line.Weight = 1.5
            .Line.DashStyle = msoLineSolid
            .Fill.Visible = msoFalse 'No background
            '.Fill.ForeColor.RGB = RGB(0, 153, 0) 'Background color
            '.Fill.Transparency = 0.95 'Background transparency
        End With
    End If

    Dim oldZoom As Integer
    oldZoom = Wn.Zoom
    Wn.Zoom = 100 'Set zoom at 100% to avoid positioning errors
    With shp
        .Top = Wn.Selection.Top   'Tweak the offset to fit your desired line weight
        .Left = Wn.Selection.Left 'Tweak the offset to fit your desired line weight
        .Height = Wn.Selection.Height
        .Width = Wn.Selection.Width
    End With
    Wn.Zoom = oldZoom 'Restore previous zoom
    Application.ScreenUpdating = True
End Sub

Private Sub DeleteSelectionHighlight()
  On Error Resume Next
  Dim shp As Shape
    Set shp = ActiveSheet.Shapes("SelectionHighlight")
    shp.Delete
End Sub

您甚至可以透過調整程式碼來根據您的喜好設定形狀格式。

優點是:

  • 當 Excel 崩潰或斷電時,您不會遺失原始格式
  • 在另一個工作簿中使用 CTRL+[ 變更活動工作表時,您不會遺失原始格式
  • 與 CTRL+C 解決方案相比,對其他 Excel 視窗進行變更時不會遺失突出顯示

相關內容