2016-02-10 48 views
1

我有一個工作表(自組織),其中細胞B28包含爲頁腳格式代碼頁面方向數據不匹配

「& 9 2014 YTD財務數據​​對PP」 & CHR(10)&「& d & T」 & CHR(10)& 「版本1.0」 & CHR(10)& 「& F」

當I U如上所述更新另一個工作簿中另一個工作表的頁腳。我沒有得到嵌入式格式 - 它顯示了單元格b28中包含的內容。例如,excel應該看到& 9並將字體設置爲9點。

我也收到頁面方向的數據類型不匹配錯誤。單元格b36的內容是xlLandscape

上週我在另一塊電路板上貼了一個這個問題的副本,但沒有得到任何答案。我希望這裏有人回答。

http://www.mrexcel.com/forum/excel-questions/919033-updating-pagesetup-using-cells-master-worksheet-orientation-formatting-footer-excel-visual-basic-applications.html

這是我使用的代碼。

Sub page_setup() 

    Dim reportWB As Excel.Workbook 

    Dim sheet As Excel.Worksheet 

    'open report workbook - name of workbook is in cell b4 
    Set reportWB = Workbooks.Open(Workbooks("macros.xlsm").Sheets("adHoc").Range("b4").Value) 

    Dim leftFooter 

    leftFooter = Workbooks("macros.xlsm").Sheets("adHoc").Range("b28").Value 

    For Each sheet In reportWB.Sheets 

    With sheet 

    .PageSetup.leftFooter = leftFooter 

    .PageSetup.Orientation = Workbooks("macros.xlsm").Sheets("adHoc").Range("b36").Value 

    End With  

Next 

End Sub 
+0

問題在於,當你的VBA讀入時,你的單元中的代碼已經被完全轉義,所以編譯器不會將它識別爲代碼......出於好奇,爲什麼不直接在你的VBA腳本中包含代碼? – nwhaught

+0

謝謝。我認爲VBA將它視爲一個字符串,但我不知道如何解決它。我想與不知道如何更新VBA代碼的同事共享宏。我們製作了很多報告,並且我們需要一種標準的方式來格式化報告。我想創建一個工作表,他們可以更新從報告到報告的值會節省時間。例如,報告的標題經常變化,頁腳必須在每張紙上的第一行中有標題。我們有時會有100張工作簿,打開頁面設置並添加頁腳非常繁瑣。 – Julie4435637

回答

0

AFAIK,沒有(直截了當)的方法來做你想做的事情。當您在單元格放碼,然後調用代替實際的代碼,單元格的值,什麼VBA試圖運行是不是:

.PageSetup.Orientation = xlLandscape

而是:

.PageSetup.Orientation = "xlLandscape"

這會產生你所看到的錯誤和行爲。作爲經驗法則,如果你的VBA代碼需要一個字符串(即「」)或數字中的某個字符,你可以在表單上進行這種計算,並讓代碼獲得值。

對於其他任何東西(有萬事達卡)把它放在代碼中。例如:

leftfooter = cell1.value & Chr(10) & cell2.value & Chr(10) & cell3.value

(作爲一個方面說明,我不熟悉,好像你試圖在該字符串做格式化......那些一般都設置貫穿東西像

With sheet.PageSetup.leftFooter. 
    .Font.Size = 9 
    'etc... 

+0

謝謝。我沒有意識到引號被添加到我的字符串中。另外,我沒有想到按照你的建議設置左腳。這非常有幫助。 – Julie4435637

1

在您的頁腳定義閱讀就像它們是作爲文字字符串,而不是代碼處理。您需要以某種方式將代碼解析爲有效的頁腳字符串。

對於LeftFooter字符串,可以使用Evaluate來解決它,但它需要被寫成如果它是一個Excel公式,沒有VBA,所以使用

「& 9 2014年初至今的財務數據PP」 & CHAR(10)& 「& d & T」 & CHAR(10)& 「版本1.0」 & CHAR(10)& 「& F」

請注意,我使用Char而不是Chr,Excel公式相當於。

對於您正在使用的命名常數,這將無法正常工作。要麼把價值上的Excel工作表(2在這種情況下)或編寫自己的代碼來解析名稱到它的價值

工作版本(與上表修正源數據如上descibed)

Sub page_setup() 
    Dim reportWB As Excel.Workbook 
    Dim sheet As Excel.Worksheet 
    Dim wsSource As Worksheet 

    'open report workbook - name of workbook is in cell b4 
    Set wsSource = Workbooks("macros.xlsm").Sheets("adHoc") 
    Set reportWB = Workbooks.Open(wsSource.Range("b4").Value) 

    Dim leftFooter 
    leftFooter = wsSource.Range("b28").Value 

    For Each sheet In reportWB.Sheets 
     With sheet 
      .PageSetup.leftFooter = Evaluate(leftFooter) 
      .PageSetup.Orientation = wsSource.Range("b36").Value 
     End With 
    Next 
End Sub 

爲了處理這些常數可以添加一個解析字符串名稱到值的UDF,並呼籲從設置表

Function GetConst(s As String) As Variant 
    Select Case s 
     Case "xlLandscape" 
      GetConst = xlLandscape 
     Case "xlPortrait" 
      GetConst = xlPortrait 
     ' etc 
    End Select 

End Function 

要在單元格B36GetConst("xlLandscape")(作爲一個字符串,而不是公式),並改變代碼的方向行

.PageSetup.Orientation = Evaluate(wsSource.Range("b36").Value) 

添加你想要的任何其他命名常量到Select Case聲明。

+0

非常感謝。你建議的一切都很完美。我對VBA編程非常陌生,你在這裏展示的內容對於創建我想與我的同事分享的宏觀工作表很有幫助。 – Julie4435637

相關問題