无需先打印预览即可将方向更改为xlLandscape

时间:2018-10-03 20:47:52

标签: excel vba worksheet printers page-setup

我有包含更改某些.PageSetup变量的代码。

我在使用此代码时遇到了问题

Sub Test()

    Dim ws as Worksheet

    Set ws = ActiveSheet

    With ws.PageSetup
        .Orientation = xlLandscape
    End With

End Sub

这将出错,但是如果我在运行.Orientation之前暂停代码并转到“打印预览”,然后尝试运行它,一切正常。

.PageSetup功能似乎需要先加载打印机设置才能执行。我不知道如何使用VBA做到这一点。

我正在从Access DB VBA运行它。它导出一个表,然后创建一个新的Excel应用程序以使用

打开它
Dim xlApp as Excel.Application
set xlApp = New Excel.Application

从历史上看,只要加载了Excel参考库,我在此处编写的任何VBA在Access中的工作方式都将与在Excel中相同。

但是为了比较,当我在运行VBA的Excel文件中时也遇到了这个问题,它只是不一致,所以我从来没有弄清楚这个问题可能是什么。但是,只要我遇到问题,解决方案总是总是先选择“打印预览”。

这是我在特定宏上看到的错误代码:

  

错误号:1004

     

错误说明:无法设置PageSetup类的Orientation属性

宏在进入Excel导出之前会进行大量查询和表更新。此外,错误消息似乎与1004数字相当通用。

2 个答案:

答案 0 :(得分:0)

在使用页面设置之前,请尝试关闭Application.PrintCommunication,然后再将其重新打开。像这样:

Application.PrintCommunication = False

With ws.PageSetup
    .Orientation = xlLandscape
End With

Application.PrintCommunication = True

那可能只是将错误转移到重新打开打印通信的那一行上

答案 1 :(得分:0)

您可以尝试将xlLandscape替换为值2。 看看xlPageOrientation enumeration (Excel)