錄製 Excel VBA 格式化條件的儲存格格式巨集指令後,重新呼叫時無法使用?

我透過錄製巨集得到的格式變更VBA程式碼如下:

Selection.FormatConditions(1).StopIfTrue = False

Range("B4:B999").Select

Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _

"=IF($A4<>"""",TRUE,)"

Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority

ExecuteExcel4Macro "(2,1,""""●""@"")"

With Selection.FormatConditions(1).Font

.Bold = True

.Italic = False

.TintAndShade = 0

End With

Selection.FormatConditions(1).StopIfTrue = False

但我重新呼叫巨集指令時,此段時程式碼會出現錯誤提醒:

ExecuteExcel4Macro "(2,1,""""●""@"")"

工作表的情況說明如下:

巨集指令存放在「模組」底下,但該格式變更是出現在特定的工作表,例如:SheetABC

網路上查詢過類似問題,似乎 ExecuteExcel4Macro 只能在自己的工作表中執行巨集指令?

那麼我應該如何撰寫「工作表、模組」之間的巨集呢?

因為主要執行巨集指令的是在 Sheet456 的工作表,會透過巨集指令來變更「SheetABC、Sheet456」兩個工作表的格式。

還請 Excel 專家們指導該如何修改,才能讓此段程式碼順利修改?

已更新項目:

@威遠

換上這個切換了工作表之後, 還是出現一樣的錯誤。

2 個已更新項目:

@威遠

不好意思, 我大概懂您的意思了, 但因為我透過巨集錄製下來的, 整個在「格式化條件」中, 修改儲存格格式的巨集就是長這樣, 而出錯的那一段, 其實我只是想要把格式變成下面這樣:

原文字: ABCDEF

經過格式化條件判定符合條件的文字,會被格式化為:

格式化文字:● ABCDEF

也就是原本文字前面會多出「●」+「 (空格)」

所以我不太確定這一段巨集指令若要單獨被放到 Sheet456 工作表

和模組之間的關係該怎麼寫才對?

目前這一段, 全都還放在模組中, 我試著把全部放到 Sheet456 工作表直接呼叫, 也是一樣有錯誤。

若是要指定工作表的話, 我不知道該怎麼改寫那一小段, 我自己改完的, 都會出現型態錯誤。

1 個解答

評分
  • 3 年前
    最佳解答

    用這切換當前工作表吧

    Worksheets("SheetABC").Activate

    Worksheets("Sheet456").Activate

    更:

    ExecuteExcel4Macro

    你是要呼叫自訂的巨集嗎

    自訂的要帶上工作表的名稱

    https://msdn.microsoft.com/zh-tw/library/office/ff...

    上面網址中的註解

    Microsoft Excel 4.0 巨集沒有從目前活頁簿或工作表的環境中取得數值。也就是說所有的參照都應該是外部參照,而且需要明確指定活頁簿名稱。舉例來說,要在 Book1 中執行 Microsoft Excel 4.0 巨集 "My_Macro",必須使用 [Book1!My_Macro()]。如果不指定活頁簿名稱,此方法將會失敗。

    更2:

    Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _

    "=IF(A4="""",,TRUE)"

    Selection.FormatConditions(1).NumberFormat = """● "" @"

    With Selection.FormatConditions(1).Font

    .Bold = True

    .Italic = False

    .TintAndShade = 0

    End With

    你把

    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority

    ExecuteExcel4Macro "(2,1,""""●""@"")"

    換成

    Selection.FormatConditions(1).NumberFormat = """● "" @"

    試試看 我這樣子跑是可以的

還有問題?馬上發問,尋求解答。