Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 未应用页脚的格式代码,且页面方向数据不匹配_Vba_Excel - Fatal编程技术网

Vba 未应用页脚的格式代码,且页面方向数据不匹配

Vba 未应用页脚的格式代码,且页面方向数据不匹配,vba,excel,Vba,Excel,我有一个工作表(临时),其中单元格b28包含 “&9 2014年至今PP”&Chr(10)&D&T”&Chr(10)&1.0版”&Chr(10)&F的财务数据” 当我使用上述方法更新其他工作簿中另一工作表的页脚时。我没有得到嵌入的格式-它精确地显示单元格b28中包含的内容。例如,excel应该看到&9,并将字体设为9点 我还得到了一个与页面方向不匹配的数据类型错误。单元格b36的内容是xl 上周我把这个问题的副本贴在了另一块板上,但没有得到任何答案。我希望这里有人有答案 这是我正在使用的代码

我有一个工作表(临时),其中单元格b28包含

“&9 2014年至今PP”&Chr(10)&D&T”&Chr(10)&1.0版”&Chr(10)&F的财务数据”

当我使用上述方法更新其他工作簿中另一工作表的页脚时。我没有得到嵌入的格式-它精确地显示单元格b28中包含的内容。例如,excel应该看到&9,并将字体设为9点

我还得到了一个与页面方向不匹配的数据类型错误。单元格b36的内容是xl

上周我把这个问题的副本贴在了另一块板上,但没有得到任何答案。我希望这里有人有答案

这是我正在使用的代码

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
好了,没有(直接的)方法来做你想做的事情。当您将代码放入单元格中,然后调用该单元格的值来代替实际代码时,VBA尝试运行的不是:

.PageSetup.Orientation=xl横向

而是:

.PageSetup.Orientation=“xlscape”

这将产生你所看到的错误和行为

根据经验,如果VBA代码需要一个字符串(即“”)或一个数字,则可以在工作表上进行该计算,并让代码输入值

对于其他一切(有万事达卡),请将其放入代码中。例如:

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

(顺便说一句,我不熟悉您在该字符串中尝试执行的格式设置……这些通常是通过以下方式设置的:

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

)

读取页脚定义,就像它们被视为文字字符串,而不是代码一样。您需要以某种方式将代码解析为有效的页脚字符串

对于
LeftFooter
字符串,您可以使用
Evaluate
来解析它,但它需要像编写Excel公式一样编写,而不是VBA,因此请使用

“&9 2014年年初至今PP”&Char(10)&Char(10)&D&T”&Char(10)&Char(10)&1.0版”&Char(10)&F的财务数据”

请注意,我使用的是
Char
而不是
Chr
,这是Excel公式的等价物

对于方向,您使用的是一个命名常量,该常量无效。将该值放在Excel工作表上(本例中为
2
),或编写自己的代码将名称解析为其值

工作版本(图纸上的源数据已更正,如上所述)

要处理常量,可以添加一个UDF,将字符串名称解析为值,并从设置表中调用它

乙二醇

将单元格
B36
GetConst(“xlscape”)
(作为字符串,而不是公式),并将代码的方向行更改为

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

Select Case
语句中添加任何其他命名常量。

问题是,当VBA读入单元格中的代码时,单元格中的代码将被完全转义,因此编译器无法将其识别为代码…出于好奇,为什么不直接将该代码包含在VBA脚本中?谢谢。我以为VBA把它当作一个字符串处理,但我不知道如何修复它。我想与不知道如何更新VBA代码的同事共享宏。我们制作了大量的报告,我们需要一种标准的方式来格式化报告。我认为创建一个工作表,让他们可以更新不同报告中的值可以节省时间。例如,报告的标题经常更改,页脚的标题必须位于每张工作表的第一行。我们有时一个工作簿有100张工作表,打开页面设置并添加页脚非常繁琐。谢谢。我没有意识到引号被添加到我的字符串中。另外,我没有想到按照你建议的方式设置左脚。这很有帮助,非常感谢。你所建议的一切都很有效。我对VBA编程非常陌生,您在这里向我展示的内容将有助于创建我希望与同事共享的宏工作表。
Function GetConst(s As String) As Variant
    Select Case s
        Case "xlLandscape"
            GetConst = xlLandscape
        Case "xlPortrait"
            GetConst = xlPortrait
        ' etc
    End Select

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