簡體   English   中英

Excel - 下拉列表選擇中的樣式格式

[英]Excel - Style format on drop down list selection

我正在使用APACHE POI生成一個excel文檔。 該文檔中包含許多用於數據驗證的下拉列表。 在這些下拉列表中選擇的數據始終是相同的類型:

標簽(ID)

對於填寫excel文檔的人來說,ID不如LABEL _重要,但ID仍然是解析目的所必需的。 我通過APACHE POI管理這些單元格的特定格式,以幫助用戶專注於對他/她更有用的信息:

  • LABEL是黑色的
  • (身份證)是灰色的

在此輸入圖像描述

我的問題:當用戶通過下拉列表更改單元格中的值時,單元格上的樣式格式會丟失。

在此輸入圖像描述

我的問題:是否可以在我的excel文檔上設置一個偵聽器來完成以下工作:

  • 任何細胞上
  • 通過任何下拉列表填寫
  • 任何工作簿上
  • 設置指定的單元格格式?

我已經有一個執行“樣式格式”工作的函數,但我不知道如何將它插入這種監聽器...

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調用,最有可能實現控件的自定義繪圖部分。

我能想到的最接近的替代方案是一些粗體擴展的Unicode字符

在此輸入圖像描述

感謝確定單元格是否包含數據驗證 ,我已成功完成了我想要的操作:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM