0
Sub test(sToken As String)
    Cells.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, Formula1:=sToken
    Cells.FormatConditions(Cells.FormatConditions.Count).SetFirstPriority
    With Cells.FormatConditions(1).Interior
        .Pattern = xlPatternLightVertical
        .PatternColorIndex = 4
        .ColorIndex = 10
    End With
    Cells.FormatConditions(1).StopIfTrue = False
End Sub

上記のコードの問題は、Call test("a")を使用すると(たとえば)、"a" と "A" で書式設定されたセルが取得されるが、"a" だけが必要なことです。
助言がありますか?

PS: VBA と英語のスキルがありません。殺さないでください =)


わかりました、ここで問題をよりよく理解するための完全なマクロです(私のくだらないコーディングスキル =P を使用)

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

マクロは仕事をしますが、「t」および「T」トークンでは機能しません

4

3 に答える 3

1

Upper CaseLower Caseフォーマットを明示的に指定します。

チェックする条件を追加し、

if UCase(range.value) = UCase(sToken) then 
// do formatting
end if

編集

これは機能します:

Cells.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, _
Formula1:="=EXACT($B1,""a"")"

しかし、これはしません:

sToken = "=EXACT($A1, """"" & sToken & """"")"
Cells.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, _
Formula1:=sToken
于 2012-12-24T20:10:09.173 に答える
0

使用する: Formula1:= "=EXACT(A1;""" & sToken & """)"

または:

Formula1:="=EXACT(" & Cells(1, 1).Address(False, False, xlA1) & ";""" & sToken & """)"

サブレンジに適用する場合は、その部分を変更するだけです。

于 2012-12-24T23:06:57.227 に答える
0

さて、いくつかのフォーラムを深く読んだ後、必要なものを見つけました。
カスタム イベント ハンドラーを設定する =) VBA からイベント
を設定するための手順: 1. イベント ハンドラーとなるクラス モジュールを作成します (私の場合は名前を付けます) 2. 彼をコーディングします:Worksheet
clsWorksheetEventHandler

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

3. 作業モジュールで、処理を初期化および終了するサブルーチンを追加します。

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

4.?????????????????????
5.利益!!!!!!

楽しんでいただければ幸いです =)


PS: ここに私を大いに助けてくれたいくつかのリンクがあり
ます Excel でアプリケーションレベルのイベントハンドラーを作成する方法
ユーザーフォームで複数のテキストボックスを制御する

于 2012-12-28T00:17:11.857 に答える