【问题标题】:Copying & Pasting information from Microsoft Word OLEObject to Excel file via VBA通过 VBA 从 Microsoft Word OLEObject 复制和粘贴信息到 Excel 文件
【发布时间】:2016-05-31 21:03:54
【问题描述】:

我的问题是通过创建 OLEObject 将表格从 Microsoft Word 导入 Excel 后,它不允许我将表格复制并粘贴到 Excel 中。它不断地将我剪贴板上上次复制的内容粘贴到第一个单元格中。目前,我的代码向用户询问文件名,在活动的 Excel 工作表中将该文件作为 OLEObject 打开,然后将不正确的信息粘贴到单元格 A1 中。它不是复制和粘贴 Word OLEObject 中的内容。

 Sub Macro1()
    Dim FName As String, FD As FileDialog
    Dim ExR As Range
    Set FD = Application.FileDialog(msoFileDialogOpen)
    FD.Show
    If FD.SelectedItems.Count <> 0 Then
        FName = FD.SelectedItems(1)
    Else
        Exit Sub
    End If

    ActiveSheet.OLEObjects.Add(fileName:=FName, Link:=False, DisplayAsIcon:=False).Select
    Selection.Verb Verb:=xlPrimary
    Range("A1").Select
    ActiveSheet.Paste

End Sub

谢谢!

【问题讨论】:

  • 您能否将 Word 文档上传到某处或添加步骤以使用您要复制的内容重新创建它?
  • 如果您从不使用.copy,它怎么会出现在剪贴板中? selection.verb 到底是什么?不应该是selection.copy吗?为什么使用.select如果你的objectif是.copy???
  • 当使用宏记录器将对象插入到excel的整个过程中,VBA代码的输出本质上是从“ActiveSheet...”开始的最后4行代码宏记录器工作,但“文件名”路径是静态的,因为它只会打开您在录制宏时打开的任何文件的文件名。
  • 我无法上传该文档,因为它是敏感材料,但在 MS word 中创建一个 x 行 1 列的表格基本上是我要导入 excel 的表格的格式。跨度>

标签: excel import ms-word createoleobject vba


【解决方案1】:

从Word到Excel,应该是这样的。

Sub ImportFromWord()

'Activate Word Object Library

'Dim WordApp As Word.Application    
Dim WordDoc As Word.Document

Set WordApp = CreateObject("word.application") ' Open Word session

WordApp.Visible = False 'keep word invisible
Set WordDoc = WordApp.Documents.Open("C:\Users\your_path_here_\WordFile.docx") ' open Word file

'copy third row of first Word table
WordDoc.Tables(1).Rows(3).Range.Copy

'paste in Excel
Range("A1").PasteSpecial xlPasteValues

WordDoc.Close 'close Word doc
WordApp.Quit ' close Word

End Sub

或者这个。

Sub GetTables() 

FName = Application _ 
.GetOpenFilename("Word Files (*.doc), *.doc") 

Set WordObject = GetObject(FName) 

First = True 
RowCount = 2 
For Each Tble In WordObject.tables 
For i = 1 To 22 
If First = True Then 
Data = Tble.Rows(i).Cells(1).Range 
'Remove cell markers 
Cells(1, i) = Left(Data, Len(Data) - 2) 
End If 
Data = Tble.Rows(i).Cells(2).Range.Text 
'Remove cell markers 
Cells(RowCount, i) = Left(Data, Len(Data) - 2) 
Next i 
RowCount = RowCount + 1 
First = False 
Next Tble 
WordObject.Close savechanges = False 
End Sub

【讨论】:

  • 不幸的是,我应该提到这一点,但我需要导入的信息保持与 word 文档中相同的格式,即下划线和粗体。否则我会从 word 文档中创建一个文本文件并以这种方式导入。
  • 查看此链接:stackoverflow.com/questions/12245525/… 另外,我相信您可以在导入所有数据后在 Excel 中应用格式。
  • 谢谢!那个链接很完美!
【解决方案2】:

使用链接 How to preserve source formatting while copying data from word table to excel sheet using VB macro? 中的代码,我只能在宏将我的 Word 表粘贴到一个全新的单独工作簿中时让代码工作。当单击我想要将 Word 表导入到的 Excel 工作簿中的命令按钮时,该表永远不会粘贴到名为“Scraping Sheets”的工作表中,我已经弄乱了代码,但我能得到的最接近的东西是放置整个表格到一个单元格中,所有格式都丢失了。

Private Sub CommandButton22_Click()
Dim oWordApp As Object, oWordDoc As Object
Dim FlName As String
Dim tbl As Object

FlName = Application.GetOpenFilename("Word files (*.Doc*),*.Doc*", , _

On Error Resume Next
Set oWordApp = GetObject(, "Word.Applicaton")

If Err.Number <> 0 Then
    Set oWordApp = CreateObject("Word.Application")
End If
Err.Clear
On Error GoTo 0

oWordApp.Visible = True


Set oWordDoc = oWordApp.Documents.Open(FlName)

Set tbl = oWordDoc.Tables(1)

Dim wb As Workbook, ws As Worksheet

Set wb = Workbooks.Open(""C:\Users\xxxx\Desktop\292 Int'l_Weekly_Win_Loss_YYYY MM DD TEMPLATE.xlsm"")

Set ws = wb.Sheets("Scraping Sheet")

tbl.Range.Copy

ws.Range("A1").Activate

ws.Paste

MsgBox "Successfully Added File!"
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多