2013-02-07 55 views
4

我有問題使用早期德爾福XE2設置條件格式與Excel結合2010Delphi和Excel.FormatConditions

我試圖重現宏如下:

Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlGreater, _ 
    Formula1:="=6" 
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority 
With Selection.FormatConditions(1).Interior 
    .PatternColorIndex = xlAutomatic 
    .ThemeColor = xlThemeColorAccent6 
    .TintAndShade = 0 
End With 
Selection.FormatConditions(1).StopIfTrue = False 

嘗試,因爲我我似乎無法訪問的​​相當於工作

我已經達到最接近的是用下面的代碼:

XR := Xlapp.Range(...) 
XR.FormatConditions.Delete; 
XR.FormatConditions.Add(xlCellValue, xlGreater, '=6', EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam); 

哪個有效。當我嘗試並定義顏色我有問題

FC := XR.FormatConditions[1]; 
FC.SetFirstPriority; 
with FC.Interior do 
begin 
    PatternColorIndex := xlAutomatic; 
    ThemeColor := xlThemeColorAccent6; 
end; 

然而,這總是告訴我,XR.FormatConditions(1)和IDispatch,因此不符合的FormatCondition分配

我在做什麼錯?

+0

你能說清楚是什麼錯誤。運行時還是編譯時間?哪條線。什麼是精確的錯誤信息。使用複製/粘貼給我們。選擇消息的文本,然後一起按CTRL和C。將其複製到剪貼板。然後編輯問題並一起按CTRL和V.這貼。 –

回答

4

您需要使用Selection作爲ExcelRange。 Excel中XP還需要第二個和第三個參數是OleVariant,所以這應該工作(彙編,反正):

var 
    Sel: ExcelRange; 
    Op, Formula: OleVariant; 
    Condition: FormatCondition; 
begin 
    Sel := ExcelApplication1.Selection[1] as ExcelRange; 
    Op := xlGreater; 
    Formula := '=6'; 
    Sel.FormatConditions.Add(xlCellValue, Op, Formula, EmptyParam); 
    Condition := Sel.FormatConditions[1] as FormatCondition; 
    Condition.Interior.PatternColorIndex := xlAutomatic; 
    // Do whatever else 
end; 
+0

XR是一個ExcelRange。 .Add編譯,這是nextblinesvthatvareva問題。 –

+1

我以爲你可以從'as ExcelRange'例子推斷出來。我添加了另一個'Sel.FormatConditions [0]作爲FormatCondition;'。這是相同的概念 - 通過在'IDispatch'上使用'as'運算符來檢索所需的實際接口。 –

+0

我錯過了你的例子中的「as」。強制演員陣容做我需要的東西 –