แสดงการเลือกเซลล์ใน Excel เมื่อไม่ได้อยู่ในโฟกัส


26

มันน่ารำคาญจริง ๆ ที่ Excel (2003 และ 2007) ไม่แสดงเซลล์แถวหรือคอลัมน์ที่เลือกเมื่อหน้าต่างไม่ได้อยู่ในโฟกัส โดยทั่วไปฉันต้องการอ้างถึงเซลล์หรือแถวปัจจุบันขณะทำงานในแอปพลิเคชันอื่น

มีวิธีแก้ปัญหาหรือแก้ไขที่จะทำให้เซลล์ / แถวถูกเน้นเมื่อไม่อยู่ในโฟกัสหรือไม่? ฉันรู้ว่าคุณสามารถคัดลอกเซลล์ (Ctrl + C) แต่มันน่าเบื่อที่จะทำเช่นนั้นทุกครั้ง


2
Cntrl + C ไม่ดีเนื่องจากฉันต้องการเก็บเนื้อหาคลิปบอร์ดของฉัน
Keltari


คำตอบ:


4

ฉันคิดว่ามันมีวิธีแก้ไข แต่มันขึ้นอยู่กับสถานการณ์ของคุณจริงๆ!

คุณสามารถสร้างมาโครที่ยิงเมื่อการเลือกเปลี่ยนแปลงและเพียงแค่เปลี่ยนพื้นหลังของแต่ละเซลล์ เมื่อคุณ 'ออก' เซลล์จะรีเซ็ตค่าพื้นหลังของแถวเป็นสีขาวแล้วเลือกแถวใหม่

ฉันเพิ่มสิ่งนี้ลงใน Sheet1 ของฉันในหน้าต่าง Visual Basic

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

ภาพหน้าจอนี้ถ่ายขณะที่แอปพลิเคชันไม่โฟกัส

สิ่งนี้อาจน่ารำคาญ แต่คุณสามารถเพิ่มปุ่มที่สามารถเปิดหรือปิดคุณสมบัตินี้ได้อย่างง่ายดาย!

เชิงลบคือ (จากด้านบนของหัวของฉัน: มันจะลบไฮไลท์ที่คุณมีอยู่ในปัจจุบันดังนั้นหากคุณมีการเน้นบนหน้าของคุณ (สีของเซลล์) แล้วที่ดีที่สุดไม่ได้ใช้สิ่งนี้! นอกจากนี้มันอาจจะพิมพ์ด้วยแถว

ป้อนคำอธิบายรูปภาพที่นี่


2

คุณสามารถทำสิ่งนี้ถ้าคุณต้องการ แม้ว่ามันอาจจะเป็นแผ่นเฉพาะ

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

สิ่งนี้จะเปลี่ยนสิ่งที่ไม่แอ็คทีฟกลับเป็นสีขาวและเปลี่ยนแอคทีฟเซลล์เป็นสีเหลือง และยังคงแสดงเมื่อหน้าต่างไม่ทำงาน ไม่แน่ใจว่านี่เป็นวิธีที่ดีที่สุด แต่ใช้งานได้


2

นี่คือการแก้ไขโค้ดจาก @datatoo มันอ่านค่าก่อนหน้าเพื่อป้องกันการสูญเสียสีเติมปัจจุบัน นอกจากนี้ยังเปลี่ยนสีข้อความเพื่อให้โดดเด่นยิ่งขึ้น ฉันเพิ่มลงในแผ่นงาน Excel ในเครื่องมือแก้ไขรหัส (Alt-F11 จาก Excel)

คลิกที่นี่สำหรับข้อมูลเกี่ยวกับการทำกิจกรรมการเปลี่ยนแผ่นงาน

'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

1

ใช้รูปร่างเพื่อเน้นการเลือก

หมายเหตุ: ใช้งานได้เฉพาะเมื่อสลับไปที่หน้าต่าง Excel อื่น คุณสามารถเปิดหน้าต่าง Excel ที่ว่างเปล่าและสลับไปที่หน้าต่างนี้ก่อนที่จะสลับไปยังแอปพลิเคชันอื่นเพื่อคงการเน้นไว้

เพียงเพิ่มสิ่งนี้ลงใน ThisWorkbookcode (สมุดงานของคุณไม่ใช่รหัสชีตของคุณ) สิ่งนี้จะใช้ได้กับทุกแผ่นงานในสมุดงานของคุณ

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 + [จากสมุดงานอื่นที่เปลี่ยนแผ่นงานที่ใช้งานอยู่
  • คุณจะไม่สูญเสียไฮไลต์เมื่อทำการเปลี่ยนแปลงกับหน้าต่าง excel อื่น ๆ เมื่อเทียบกับโซลูชัน CTRL + C

0

ใน Excel 2003 ที่อยู่ของเซลล์ที่เลือกในปัจจุบันจะปรากฏที่ด้านซ้ายบน แม้ว่าเซลล์จะไม่ถูกไฮไลต์ แต่คุณจะได้รับส่วนหนึ่งจากที่นั่น


0

ไม่มีวิธีแก้ไขปัญหานี้อย่างถาวร

วิธีแก้ปัญหา(อาจทำให้เกิดความรำคาญในขณะที่)จะเป็นการเปลี่ยนการเน้นของเซลล์ที่เลือกในขณะที่พวกเขาได้รับการคัดเลือกและเลือกพวกเขาอีกครั้งเพื่อลดสี

ติดรหัสนี้ในรหัส 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

0

วิธีแก้ไขปัญหาแบบง่ายๆ ที่กำหนดสีของเซลล์เมื่อการเลือกเปลี่ยนแปลง

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)

    ' This is optional formatting to make the cells look more like they're actually selected
    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ในโพสต์นี้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.