【问题标题】:Copy Excel print area to Word将 Excel 打印区域复制到 Word
【发布时间】:2017-03-21 22:30:24
【问题描述】:

我想将 Excel 中横向的打印区域复制到我的 Word 文档中,并从中运行代码。

我正在使用

wb.Sheets("Sheet1").Range("A1:N33").Copy

复制区域,但是随着列宽的变化,就没用了。

更新:

我正在使用它来计算我在 Word 文档中的可用尺寸

With ActiveDocument.PageSetup
      UsableWidth = .PageWidth - .LeftMargin - .RightMargin
      UsableHeight = .PageHeight - .TopMargin - .BottomMargin
End With

我试图缩放我的图像以适应:

Selection.PasteSpecial Link:=False, DataType:=wdPasteMetafilePicture, Placement:=wdInLine, DisplayAsIcon:=False
Selection.ShapeRange.Height = UsableHeight
Selection.ShapeRange.Width = UsableHeight

它并没有完全做到这一点。最好的方法是在复制之前设置图像范围

更新2:

Dim objExcel As New Excel.Application
Dim wb As Excel.Workbook
Dim ws As Excel.Worksheet
Set wb = objExcel.Workbooks.Open("C:\test.xlsx")
Set ws = wb.Sheets("Sheet1")

这给出了一个错误:

Set rngTemp = ws.Range("A1")

【问题讨论】:

  • 在 Excel 中如何设置打印区域?
  • 嗯,问题是我无权访问 Excel 文件。我找到了一个临时解决方案,在该解决方案中找到最后一个包含内容的单元格并基于此设置范围。虽然不是很高兴
  • 你看过这个property吗?
  • 谢谢,布拉德。我已经看过它并尝试了几次。在我的情况下没有解决

标签: vba excel ms-word


【解决方案1】:

您可以使用此代码检索打印区域信息:

Sub GetPrintArea()

Dim rngPrintArea As Range

'Put print area into range variable
Set rngPrintArea = Sheet1.Range(Sheet1.PageSetup.PrintArea)

'Perform operations on range - shows up in Immediate window:
Debug.Print rngPrintArea.Height
Debug.Print rngPrintArea.Width
Debug.Print rngPrintArea.Cells(rngPrintArea.Rows.Count, rngPrintArea.Columns.Count).Address

End Sub

如果尚未设置打印区域,这将不起作用 - 您能否确认 Excel 工作表是否已设置为横向并定义了打印区域?如果没有,您将需要找到纸张尺寸并遍历单元格,直到找到共享相同 Left 和 Top 值的那些(我认为)。您可以像这样设置 PrintArea:

'Set print area
Sheet1.PageSetup.PrintArea = "$A1:$N33"

编辑 - 现在我们知道源尺寸是预定义的 - 您需要在 Word 中设置 UseableWidth 和 UseableHeight 并使用 ByVal 或公共变量将它们带入此子项:

Sub FindRange()

Dim rngTemp As Range, rngCopy As Range, rngTest As Range
Dim iCol As Integer, iRow As Integer

Set rngTemp = Sheet1.Range("A1")

'Get closest column
Do Until rngTemp.Left >= UseableWidth
        Set rngTemp = rngTemp.Offset(0, 1)
Loop
iCol = rngTemp.Column

'Get closest row
Do Until rngTemp.Top >= UseableHeight
        Set rngTemp = rngTemp.Offset(1, 0)
Loop
iRow = rngTemp.Row

Set rngCopy = Sheet1.Range("A1", Sheet1.Cells(iRow, iCol))

'Copy rngCopy into Word as you were before

End Sub

【讨论】:

  • 感谢MattCrum 的回复,可惜没有设置打印区域。测试了您的代码,结果出现错误。我虽然使用例如点循环遍历单元格,但我没有找到一个好的方法来做到这一点。有什么建议吗?
  • 是的 - 如果未设置打印区域,它将不起作用。您需要以某种方式确定每个单元格是否适合横向页面的尺寸。您的总体目标是横向复制一张 A4 纸大小的范围到您的 Word 文档吗?如果是这样,也许您可​​以检测并使用 word 文档的尺寸?
  • 没错!有边距的景观。请参阅我更新的问题,希望您能提供帮助。
  • 哇,真是太好了!奇迹般有效!但是,当我从 Word 运行它时,我得到一个错误。你能看看我对我的问题的第二次更新吗?非常感谢它
  • 你是如何定义 rngTemp 的?如果您像Dim rngTemp as Range 那样完成它,那么它将被定义为 Word 范围而不是 Excel 范围。尝试使用Excel.Range 进行操作。您是否添加了 Microsoft Excel 对象库作为参考?
猜你喜欢
  • 2017-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-08
  • 1970-01-01
  • 1970-01-01
  • 2019-05-19
  • 1970-01-01
相关资源
最近更新 更多