2011/07/29

令人崩潰的分頁預覽範圍…

Excel VBA中有個 RefersToRange屬性,可以正確得到可列印的最大範圍,MSDN是這樣寫的:
' RefersToRange 屬性範例
' 此範例顯示作用中工作表列印範圍中的列數和欄數。

p = Names("Print_Area").RefersToRange.Value
MsgBox "Print_Area: " & UBound(p, 1) & " rows, " & _
    UBound(p, 2) & " columns"


Delphi Excel Component要怎麼寫?

一樣,沒人知道,只好自己踹………開始無盡的Eden雜念雜念雜念.........................
===============
Names為應用程式或活頁簿中所有 Name 物件的集合。每個 Name 物件代表一個定義在儲存格範圍上的名稱。名稱可為內建名稱 (如 Database、Print_Area 和 Auto_Open) 或自訂名稱。
{ 此範例顯示作用中工作表列印範圍中的列數和欄數。 }
IntToStr(VarArrayHighBound(Worksheet.Names.Item('Print_Area',EmptyParam,EmptyParam).RefersToRange.Value[EmptyParam],1));
IntToStr(VarArrayHighBound(Worksheet.Names.Item('Print_Area',EmptyParam,EmptyParam).RefersToRange.Value[EmptyParam],2));


又一次見鬼的語法…能不能不要再來了 >"<

(2014/04/16 更新)
按照「在VBA中取得Excel Worksheet的最後一欄或最後一列」這篇的內容,重點就是他說的第一點:
ActiveSheet.UsedRange.Rows.Count
這個用法的好處是很容易記,使用直覺;但缺點是如果新增資料在某些情況下,UsedRange不會被立即更新
通常在儲存檔案後會被更新,再不行可以偷偷列印ActiveSheet.UsedRange.Address屬性值來強制更新


於是我又有了新的體悟:
Delphi 語法如下:
{ ExcelXP Components }
ExcelWorksheet1.UsedRange[_LCID].Address[EmptyParam,EmptyParam,xlR1C1,EmptyParam,EmptyParam];
ExcelWorksheet1.UsedRange[_LCID].Rows.Count;







沒有留言:

張貼留言