下拉列表selectExcel – 样式格式

我正在用APACHE POI生成一个excel文档。 该文件充满了许多下拉列表进行数据validation。 在下拉列表中select的数据总是相同的types:

标签(ID)

对于填写excel文档的人来说,ID不如LABEL _重要,但为了parsing目的,ID仍然是必需的。 我通过APACHE POI进行pipe理,将特定的格式放在这些单元格上,以帮助用户将重点放在对他/她更有用的信息上:

  • LABEL是黑色的
  • (ID)灰色

在这里输入图像说明

我的问题是:当用户通过下拉列表更改单元格中的值时,单元格上的样式格式会丢失。

在这里输入图像说明

我的问题是:是否可以在我的excel文档中设置一个侦听器来执行下列任务:

  • 任何单元格上
  • 通过任何下拉列表填写
  • 在工作簿的任何一页上
  • 设置指定的单元格格式?

我已经有一个function,做“风格格式”的工作,但我不知道如何插上这种听众…

Function formatStyle() Dim cellContent As String Dim valeurLength As Integer For Each currentCell In Selection.Cells cellContent = currentCell.Value For valeurLength = 1 To Len(cellContent) If Mid(cellContent, valeurLength, 1) = "(" Then Exit For End If Next valeurLength With currentCell.Characters(Start:=1, Length:=valeurLength - 1).Font .ThemeColor = xlThemeColorLight1 .TintAndShade = 0 End With With currentCell.Characters(Start:=valeurLength, Length:=Len(cellContent) - valeurLength + 1).Font .ThemeColor = xlThemeColorDark1 .Color = -4144960 End With Next End Function 

Excel表单控件不支持任何种类的字体和颜色格式。 使用ActiveX控件可以更改字体和颜色,但不能更改单个字符。 一些复杂的VBA和WinAPI调用可能会实现控件的自定义绘图部分。

我能想到的最接近的select是一些粗体Unicode字符 :

在这里输入图像说明

感谢确定如果单元格包含数据validation ,我已经设法做到我想要的:

 Private Sub Workbook_SheetChange(ByVal Sh As Object,ByVal Target As Range) Dim cell As Range, v As Long For Each cell In Selection.Cells v = 0 On Error Resume Next v = cell.SpecialCells(xlCellTypeSameValidation).Count On Error GoTo 0 If v <> 0 Then formatReferenceCell (Target) End If Next End Sub Function formatReferenceCell(cellContent) Dim X As Integer For X = 1 To Len(cellContent) If Mid(cellContent, X, 1) = "(" Then Exit For End If Next X With ActiveCell.Characters(Start:=1, Length:=X - 1).Font .ThemeColor = xlThemeColorLight1 .TintAndShade = 0 End With With ActiveCell.Characters(Start:=X, Length:=Len(cellContent) - X + 1).Font .ThemeColor = xlThemeColorDark1 .Color = -4144960 End With End Function