简体   繁体   中英

Excel VBA function to make a cell text 'BOLD' won't work

Public Function highlight_text(Search)
  Dim rng As Range
  Dim cell As Range
  Set rng = Range("A2:H32")

  For Each cell In rng
      If cell.text = Search Then
          cell.Font.ColorIndex = 3
          cell.Font.Name = "Arial"
          cell.Font.Size = 14
          cell.Font.Bold = True
      Else
          cell.Font.Bold = False
          cell.Font.Size = 11
          cell.Font.ColorIndex = 1
      End If
  Next cell
End Function

The above function is called on 'mouseover' a cell, it manages to set the proper cells to RED color but it won't make the text bold

You cannot call a function from the worksheet and change the format of a cell.

(The fact that even the color is changing is perplexing)

As this does not need to be a function, it does not return anything and you cannot use it from the worksheet, we can make it a sub:

Public Sub highlight_text(Search)
  Dim rng As Range
  Dim cell As Range
  Set rng = Range("A2:H32")

  For Each cell In rng
      If cell.Text = Search Then
          cell.Font.ColorIndex = 3
          cell.Font.Name = "Arial"
          cell.Font.Size = 14
          cell.Font.Bold = True
      Else
          cell.Font.Bold = False
          cell.Font.Size = 11
          cell.Font.ColorIndex = 1
      End If
  Next cell
End Sub

Use a Worksheet_Change Event(or some other event) to call the sub:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("A2:H32")) Is Nothing Then
    highlight_text (Target.Text)
End If
End Sub

Put both of these in the worksheet code in which you want the code to run.

This will now highlight the like cells as you click on any cell in the range.

在此处输入图片说明

This is a good solution in this case. But I am confused by the statement that you cannot change to format of a cell in a function. Tried this to confirm. It works fine.

Function boldit() As String
Dim theCell As String  

theCell = "Q8"
Range(theCell).Value = "XorY"
Range(theCell).Font.Color = RGB(255, 0, 0)
Range(theCell).Font.Bold = True

End Function

The reason I'm interested is that in a real function I have written the same .Font.Bold statement does not work (while the .Font.Color does) Any other idea why .Font.Bold=True might not work

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM