2009-10-21 229 views
1

在MS Project 2003中使用VBA我創建一個Excel工作表並向其中寫入數據。 那之後,我想改變我創建的表的SetPrintArea和方向,所以我寫了無法從MS Project中設置PageSetup.Orientation = xlLandscape

with xlsheet       '// Defined being an Excel.Worksheet 
    For i = 1 To .UsedRange.Columns.Count 
     .Columns(i).EntireColumn.AutoFit 
    Next i 
    txtPrintArea = txtPrintArea & "$" & xlCol.Row '// I created the range to print before 
    With .PageSetup 
     .Orientation = xlLandscape 
     .PrintArea = xlSheet.UsedRange.Address 
    End With 
End With 

它崩潰的.Orientation聲明。 如果我評論說它在.PrintArea行崩潰。 我的結論是它不能設置.PageSetup的任何屬性

如何指定PrintArea?

+0

如果您逐步瀏覽代碼,您是否可以在監視窗口中看到xlSheet.PageSetup上的PrintArea和Orientation屬性? – dendarii 2009-10-21 14:23:20

+0

另外,您不需要代碼中的循環來設置列寬。您可以使用下面的一行:.UsedRange.Columns.EntireColumn.AutoFit – dendarii 2009-10-21 14:24:02

+0

.UsedRange.Columns.EntireColumn.AutoFit確實比較好。但在我的「真實代碼」中,我只需要.UsedRange的一部分,所以我只是從循環中刪除了起始列,以簡化我在此發佈的代碼。 – user191093 2009-10-22 11:41:51

回答

0

你正在做正確的事情。

爲什麼要設置txtPrintArea,但隨後設置.PrintArea = xlSheet.UsedRange.Address ???

否則,您需要發佈更多代碼作爲示例。我創建了下面的根據你的問題,它的工作對我來說:

Set xlSheet = Sheet1 
Set xlCol = Sheet1.Rows(1) 
txtPrintArea = "A" 
With xlSheet       '// Defined being an Excel.Worksheet 
    xlSheet.UsedRange.Columns.EntireColumn.AutoFit 
    txtPrintArea = txtPrintArea & "$" & Trim(Str(xlCol.Row)) + ":b2" '// I created the range to print before 
    With .PageSetup 
     .Orientation = xlLandscape 
     .PrintArea = txtPrintArea '//xlSheet.UsedRange.Address 
    End With 
End With 
+0

同樣的問題:碰撞.Orientation = xlLandscape txtPrintArea尚未被使用(由UsedRange交換)進行測試(避免因txtPrintArea定義錯誤而導致POSSIBLE問題) 'More code'?不知道你缺少的是什麼(當然在使用xlSheet和xlCol之前已經設置了它們),它是關於不能設置xlSheet的屬性。PageSetup – user191093 2009-10-22 08:15:03

+0

你能夠運行上面的示例嗎?如果是這樣,那麼我會減少你的代碼到最基本的要領。如果運行:xlsheet.PageSetup.Orientation = xlLandscape會發生什麼? – 2009-10-22 21:26:01

+0

我一直無法運行你的代碼(崩潰)。另外xlsheet.PageSetup.Orientation = xlLandscape沒有區別 – user191093 2009-10-24 06:44:54

1

我安裝的BullZip PDF打印機和.PageSetup.Orientation作品之後。 因此,看起來PageSetup需要安裝打印機。