我想这将是一个简单的解决方案,但我找不到方法……
在这个新的word文档中,我想将方向设置为横向,但显然我不想手动设置它,所以当我使用.PageSetUp或.Orientation语法时,它们会给我一个错误。
我尝试使用With.WordApp.PageSetUp.Orientation = xlLandscape或wdLandscape,但是我不能。
因此,有一种方法可以打开一个新的word文档,并自动将方向设置为横向,然后将所选内容从excel粘贴到该页面。在这个新文档中,我尝试设置页边距,同样的大小写。.LeftMargin = CentimetersToPoints(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
发布于 2020-07-18 08:26:14
如果你把手指从键盘上移开,向后靠,试着理解发生了什么,你就可以自己解决这个问题。考虑一下Selection
对象。
您选择的内容是屏幕上显示的内容的一部分。在屏幕上你可以看到一个窗口。即使您在屏幕上看到多个窗口,也只能有一个窗口处于活动状态。并且只有活动的才能有选择。记住此连接: Window ->应用程序-> Document -> Selection。由于在任何窗口中不能有多个应用程序,因此也不能在Word和Excel中同时选择。创建一个,你就会失去另一个。
选择对象是用户需要的,但VBA不需要。Workbooks("MyWorkbook").Sheet1.Range("A1:B3")
使VBA能够找到您所说的确切范围。您可以读取它的任何单元格的值或更改它,指定字体或颜色-对它执行任何您想要的操作,包括复制到剪贴板。然后观察:用户的Selection
对象是VBA的Range
对象。切勿选择任何内容,除非您想要将其显示给用户。
将对象赋值给命名变量总是很好的做法。当您使用多个应用程序时,它是一个必须使用的。请记住,Word中的范围与Excel中的范围不同。您需要将它们分别声明为Excel.Range
和Word.Range
。VBA不会要求你做出这样的区分,并且大多数时候都会正确地使用你的变量。如果你依赖它,你的代码在大多数情况下都会像这样工作。而且,顺便说一下,Dim f, ff As Date
声明了f As Variant
(默认情况下,因为没有提到任何内容),而且只声明了ff As Date
。我建议每行只有一个声明。
Orientation
是什么属性?它是Word.Document的属性(不是文档--正如您的代码中的复数)。更准确地说,它是文档的PageSetup
对象的属性。因此就有了Doc.PageSetup.Orientation
。想想看: PageSetup对象怎么可能是任何Selection
的属性?Selection
是一个可视化的Range
。它不能有方向。
https://stackoverflow.com/questions/62963019
复制相似问题