首页 文章

Excel - 下拉列表选择中的样式格式

提问于
浏览
1

我正在使用APACHE POI生成一个excel文档 . 该文档中包含许多用于数据验证的下拉列表 . 在这些下拉列表中选择的数据始终是相同的类型:

标签(ID)

对于填写excel文档的人来说,ID不如LABEL _重要,但ID仍然是解析目的所必需的 . 我通过APACHE POI管理这些单元格的特定格式,以帮助用户专注于对他/她更有用的信息:

  • LABEL为黑色

  • (ID)为灰色

enter image description here

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

enter image description here

我的问题:是否可以在我的excel文档上设置一个监听器来完成以下工作:

  • on ANY cell

  • 填写 ANY 下拉列表

  • 在工作簿的 ANY 表上

  • 设置指定的单元格格式?

我已经有一个执行“样式格式”工作的函数,但我不知道如何将它插入这种监听器...

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

2 回答

  • 0

    感谢Determine if cell contains data 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
    
  • 0

    Excel表单控件不支持任何类型的字体和颜色格式 . ActiveX控件允许您更改字体和颜色,但不能更改单个字符 . 通过一些复杂的VBA和WinAPI调用,最有可能实现控件的自定义绘图部分 .

    我能想到的最接近的选择是一些大胆的extended Unicode characters

    enter image description here

相关问题