我有一个工作表(adHoc),其中单元格b28包含
“& 9 2014年YTD PP财务数据”& Chr(10)& “& D& T”& Chr(10)& “版本1.0”& Chr(10)& “& F”
当我使用上面的内容更新另一个工作簿中的另一个工作表的页脚时。我没有得到嵌入格式 - 它显示了单元格b28中包含的内容。例如,excel应该看到& 9并使字体为9点。
我也遇到了页面方向的数据类型不匹配错误。单元格b36的内容为 xlLandscape 。
我上周在另一个董事会上发布了这个问题的副本,但没有得到任何答案。我希望有人能回答。
这是我正在使用的代码。
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 :(得分:1)
读取您的页脚定义,就像它们被视为文字字符串,而不是代码。您需要以某种方式将代码解析为有效的页脚字符串。
对于LeftFooter
字符串,您可以使用Evaluate
来解决它,但需要将其编写为Excel公式,而不是VBA,因此请使用
“& 9 2014年YTD PP财务数据”& Char(10)& “& D& T”& Char(10)& “版本1.0”& Char(10)& “& F”
请注意,我使用Char
而不是Chr
,Excel公式等效。
对于Orientation,您使用的是命名常量,它不起作用。将值放在Excel工作表上(在这种情况下为2
)或编写自己的代码以将名称解析为其值
工作版本(如上所述在工作表上更正了源数据)
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
放入单元格B36
GetConst("xlLandscape")
(作为字符串,而不是公式),并将您的Orientation代码行更改为
.PageSetup.Orientation = Evaluate(wsSource.Range("b36").Value)
将您想要的任何其他命名常量添加到Select Case
语句。
答案 1 :(得分: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...
)