Vba 需要区分大小写的格式(Excel)

Vba 需要区分大小写的格式(Excel),vba,excel,Vba,Excel,上面代码的问题是,当我使用调用测试(“a”)(例如)时,我会使用 “a”和“a”,但我只想要一个“a”。 有什么建议吗 PS:不精通VBA和英语,请不要杀掉=) 好的,这里是更好理解问题的完整宏(用我糟糕的编码技巧=p) 宏执行此任务,但不使用“t”和“t”标记明确指定大写,小写格式 添加要检查的条件 Sub FormatTokens() Call FormatReset 'Clear formatting Call SetFormatting("d", xlPattern

上面代码的问题是,当我使用调用测试(“a”)(例如)时,我会使用 “a”和“a”,但我只想要一个“a”。
有什么建议吗

PS:不精通VBA和英语,请不要杀掉=)


好的,这里是更好理解问题的完整宏(用我糟糕的编码技巧=p)


宏执行此任务,但不使用“t”和“t”标记

明确指定
大写
小写
格式

添加要检查的条件

Sub FormatTokens()
    Call FormatReset   'Clear formatting
    Call SetFormatting("d", xlPatternNone, 1, 44)
    Call SetFormatting("h", xlPatternCrissCross, 46, 44)
    Call SetFormatting("t", xlPatternLightVertical, 4, 10) ' Here the 1st conflict token 
    Call SetFormatting("p", xlPatternNone, 1, 10)
    Call SetFormatting("T", xlPatternNone, 4, 10) ' And here another
    Call SetFormatting("v", xlPatternGray16, 49, 24)
' Blah, blah, blah in the same style...
End Sub
Private Sub SetFormatting(sToken As String, oPat As XlPattern, iPatCol As Integer, iCol As Integer)
    Cells.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, Formula1:=sToken
    Cells.FormatConditions(Cells.FormatConditions.Count).SetFirstPriority
    With Cells.FormatConditions(1).Interior
        .Pattern = oPat
        .PatternColorIndex = iPatCol
        .ColorIndex = iCol
    End With
    Cells.FormatConditions(1).StopIfTrue = False
End Sub
编辑

这项工作:

if UCase(range.value) = UCase(sToken) then 
// do formatting
end if
但这并不是:

Cells.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, _
Formula1:="=EXACT($B1,""a"")"
使用:
公式1:=“=精确(A1;”“&sToken&”“”)

或:

Formula1:=“=精确(&Cells(1,1)。地址(False,False,xlA1)&”;“&sToken&”


如果你想申请某个子范围,你可以简单地更改该部分。

好吧,在深入阅读了几个论坛之后,我找到了我需要的。
这里的解决方案适用于许多不同的情况:设置自定义事件处理程序=)
从VBA设置
工作表
事件的步骤:
1.创建类模块,它将是您的事件处理程序(在我的例子中名为
clsWorksheetEventHandler
) 2.给他编码:

sToken = "=EXACT($A1, """"" & sToken & """"")"
Cells.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, _
Formula1:=sToken
三,。在工作模块中,添加子例程以初始化和终止处理:

Option Explicit

Public WithEvents WorksheetEvents As Worksheet 'As an object whose events should be handled

Private Sub WorksheetEvents_Change(ByVal Target As Range) 'Event to handle
    'Some code You need to handle this event
End Sub
4
5.利润

我希望你喜欢()


PS:以下是一些对我帮助很大的链接


如果您想格式化所有单元格,其中数据大小写与斯托克郡的大小写以及值匹配,是否正确?对。此外,最后一个例程需要一些额外的参数(不同的格式),并多次按内容自动突出显示单元格。。。请参阅我的评论和udpate。仅出于测试目的,将来的重构……可能会有所帮助,但这将是一个巨大的挑战(谷歌翻译=))。因为我需要使用“a”和“a”(但不同)格式化单元格。你的第一个代码是格式化“a”和“a”<代码>代码(A1)=97
精确(A1,“a”)
工作。但是,当通过字符串传递给公式时,它不起作用……第一个和第二个代码通过一种格式同时格式化“t”和“t”(第二个代码只是通过调用SetFormatting(“t”,XLPatternOne,4,10)”来重写“t”格式)
),但我需要为“t”和“t”值设置不同的格式。
Cells.FormatConditions.Add类型:=xlCellValue,运算符:=xlEqual,公式1:=sToken出现问题,因为它在两个代码中都不区分大小写。很抱歉,问题的解释不清楚。嗯,is
Cells.FormatConditions.Add类型:=xlCellValue,运算符:=xlEqual,uu公式1:=“=EXACT($B1”,“a”)”
需要B1中的常量进行匹配吗?如果是,这是不可接受的,我无法修改用户工作表…@user1927236在这种情况下,最好使用
code()
检查您的
sToken
案例,然后运行两个不同的条件1。小写字母为2。这是大写字母。通过这种方式,它可以保持代码的整洁:)这并不是我所要求的,但在我的情况下,这才是真正的解决方案。像拐杖一样思考;)
Option Explicit

Public WithEvents WorksheetEvents As Worksheet 'As an object whose events should be handled

Private Sub WorksheetEvents_Change(ByVal Target As Range) 'Event to handle
    'Some code You need to handle this event
End Sub
Option Explicit

Dim oWorksheetEventHandler As clsWorksheetEventHandler 'Ref for Your class
Dim colWorksheetEventHandlers As Collection 'For all referrals

Sub WorksheetEventHandlers_initialize()
    'Create new Collection to store ours handlers
    Set colWorksheetEventHandlers = New Collection 
    'Loop through worksheets
    For Each Worksheet In Worksheets
        'Create new instance of the event handler class
        Set WorksheetEventHandler = New clsWorksheetEventHandler 
        'Set it to handle events in worksheet
        Set WorksheetEventHandler.WorksheetEvents = Worksheet
        'And add it to our collection
        colWorksheetEventHandlers.Add WorksheetEventHandler
    Next Worksheet
End Sub

Sub WorksheetEwentHandlers_terminate()
    'Loop through our collection
    For Each WorksheetEventHandler In colWorksheetEventHandlers
    'Clear event handler
    Set WorksheetEventHandler = Nothing
Next WorksheetEventHandler
'And finally clear memory
Set colWorksheetEventHandlers = Nothing
End Sub