我想使用excel中的vba将word上的页面方向设置为横向

我想使用excel中的vba将word上的页面方向设置为横向,excel,vba,ms-word,landscape,Excel,Vba,Ms Word,Landscape,我想这将是一个简单的解决办法,但我找不到办法 所以问题是,我有一个excel文档,它有不同的工作表,但我只想在一张工作表中创建一个表,然后(我可以这样做),该表将粘贴到一个新的word文档上 在这个新的word文档中,我想将方向设置为横向,但显然我不想将其设置为手动,因此当我使用.PageSetUp或.orientation语法时,它们会给我一个错误 我尝试使用With.WordApp.PageSetUp.Orientation=xlscarland或wdscarland,但无法使用 因此,有一

我想这将是一个简单的解决办法,但我找不到办法

所以问题是,我有一个excel文档,它有不同的工作表,但我只想在一张工作表中创建一个表,然后(我可以这样做),该表将粘贴到一个新的word文档上

在这个新的word文档中,我想将方向设置为横向,但显然我不想将其设置为手动,因此当我使用.PageSetUp或.orientation语法时,它们会给我一个错误

我尝试使用With.WordApp.PageSetUp.Orientation=xlscarland或wdscarland,但无法使用

因此,有一种方法,我可以打开一个新的word文档,并自动将方向设置为横向,然后将所选内容从excel粘贴到该页面。在这篇新的文档中,我试图设置边距,同样的情况下。LeftMargin=厘米停止点(1),但会出现错误

Option Explicit
Sub Imprimir()
    
Dim WordApp As Object
Dim f, ff As Date
Dim s, qty As Integer
Dim NoEncontrado As Boolean
Dim doc As Documents

Sheets("Entrega").Select
f = Sheets("Entrega").Range("D1").Value
qty = 1
s = 35
NoEncontrado = True
    Do While NoEncontrado = True
    
        Do While qty < 30
            Sheets("Concentrado").Select
            Cells(s, 7).Select
            ff = Sheets("Concentrado").Cells(s, 7).Value
                
                If f = ff Then
                Sheets("Concentrado").Select
                Sheets("Concentrado").Cells(s, 3).EntireRow.Select
                selection.Copy
                Sheets("Entrega").Select
                ActiveSheet.Range("A4").Select
                selection.PasteSpecial Paste:=xlPasteValues
                qty = qty + 1
                s = s - 1
                Rows("4:4").Select
                selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromRightOrBelow
                                
                Else
                qty = qty + 1
                s = s - 1
                
                End If
        Loop
        
        NoEncontrado = False
    Loop

Set WordApp = CreateObject("Word.Application")
Sheets("Entrega").Select
ActiveSheet.Range("G1").Select
Range("D3:S35").Select
selection.Copy
MsgBox (" Entrega de guardia del día " & f & " lista para imprimir"), vbInformation
With WordApp 'Con este codigo se abrira Word y se creara un documento nuevo
.Visible = True
.Activate
.Documents.Add
End With

WordApp.selection.PasteSpecial link:=True 'Se pegara en el documento lo seleccionado en la hoja de calculo
selection.pagesetup.Orientation = wdOrientLandscape
Set WordApp = Nothing
Sheets("Entrega").Select
Range("A4:CA34").Select
selection.ClearContents
End Sub
选项显式
次级监牢()
Dim WordApp作为对象
尺寸f,ff作为日期
尺寸s,数量为整数
Dim NoeContrado作为布尔
将文档变为文档
工作表(“Entrega”)。选择
f=板材(“Entrega”).范围(“D1”).值
数量=1
s=35
NoeContrado=正确
Do While NoEncontrado=真
当数量小于30时,请执行此操作
表格(“Concentrado”)。选择
单元格(s,7)。选择
ff=板材(“浓缩物”)。单元格(s,7)。数值
如果f=ff,则
表格(“Concentrado”)。选择
表格(“浓度”)。单元格(s,3)。EntireRow.Select
选择,复制
工作表(“Entrega”)。选择
ActiveSheet.Range(“A4”)。选择
selection.Paste特殊粘贴:=xlPasteValues
数量=数量+1
s=s-1
行(“4:4”)。选择
选择。插入Shift:=xlDown,CopyOrigin:=xlFormatFromRight或Below
其他的
数量=数量+1
s=s-1
如果结束
环
NoeContrado=错误
环
设置WordApp=CreateObject(“Word.Application”)
工作表(“Entrega”)。选择
ActiveSheet.Range(“G1”)。选择
范围(“D3:S35”)。选择
选择,复制
MsgBox(“保护区”和“不适当清单”),VBA信息
使用WordApp“Con este codigo se abrira Word y se creara un documento nuevo”
.Visible=True
.激活
.Documents.Add
以
WordApp.selection.Paste特殊链接:=True'用于计算的文档
selection.pagesetup.Orientation=wdorientscape
设置WordApp=Nothing
工作表(“Entrega”)。选择
范围(“A4:CA34”)。选择
选择.ClearContents
端接头

如果你把手指从键盘上拿开,向后靠,试着理解发生了什么,你就可以自己解决问题。考虑
选择
对象

您选择的内容是您在屏幕上看到的内容的一部分。在屏幕上你看到一个窗口。即使在屏幕上看到多个窗口,也只能激活其中一个窗口。只有激活的才能有选择。记住这个连接:窗口->应用程序->文档->选择。因为在任何窗口中不能有多个应用程序,所以在Word和Excel中也不能同时进行选择。创造一个,你就会失去另一个

选择东西是用户需要的,但VBA不需要<代码>工作簿(“MyWorkbook”).Sheet1.Range(“A1:B3”)使VBA能够找到您正在谈论的确切范围。您可以读取任何单元格的值,也可以对其进行更改,指定字体或颜色-可以对其执行任何操作,包括复制到剪贴板。然后观察:用户的
选择
对象是VBA的
范围
对象。除非要向用户显示,否则不要选择任何内容

将对象指定给命名变量始终是一种很好的做法。当您使用多个应用程序时,必须使用。请记住,Word中的范围与Excel中的范围是不同的。您需要将它们分别声明为
Excel.Range
Word.Range
。VBA不会要求您进行这种区分,并且在大多数情况下都会正确使用您的变量。如果你依赖它,你的代码在大多数情况下都会像那样工作。顺便说一下,
Dim f,ff As Date
f声明为Variant
(默认情况下,因为没有提及任何内容),并且只声明
ff As Date
。我建议每行只声明一次


方向是什么?它是Word.Document的属性(而不是Documents-复数-正如代码所示)。更准确地说,它是文档的
PageSetup
对象的一个属性。因此
Doc.PageSetup.Orientation
。想想看:PageSetup对象怎么可能是任何
选择的属性?
选择
是一个可视化的
范围
。它不能有方向。

只是有点屈尊,但Variatus是完全正确的。将Dim doc As Documents更改为Dim doc As Documents,您应该准备好了。谢谢@Variatus,正如律师福斯特所说,有点居高临下,但有时我需要这一点来解决问题。但在这种情况下,我联系不到anwser。我已经将代码更改为Dim doc as Document,并且每行写一个声明。但我真的不明白如何声明excel.range和Word.range。因此,我不知道是否必须将其放在with部分中。所以我还是做不到:/我的意思是务实,而不是居高临下。但我向您展示了如何声明Excel和Word范围。请看上面的样品。我的第一段意在告诉您,您的代码已无法修复。它缺乏逻辑,而不是努力。我确实为所需的逻辑提供了一个指南,首先说您所有的Select语句都是错误的。一旦你实现了一个真实的日志