【发布时间】:2017-09-07 22:24:53
【问题描述】:
我想在不打开 Excel 的情况下将 Excel 文件插入 Word doc 中的 seartain BOOkmark,当 Word doc 打开时自动插入。
1.我正在考虑首先制作一个带有打开文件对话框底部的弹出窗口。我的代码如下:(但它仅适用于 excel VBA 不适用于 word VBA 我应该如何更改代码以便我可以在 word 中做到这一点???)
Sub openfile()
Dim intChoice As Integer
Dim strPath As String
Application.FileDialog(msoFileDialogOpen).AllowMultiSelect = False
intChoice = Application.FileDialog(msoFileDialogOpen).Show
If intChoice <> 0 Then
strPath = Application.FileDialog( _
msoFileDialogOpen).SelectedItems(1)
End If
End Sub
-
然后我复制并粘贴底部代码如下:(也只有在excel中编码时才有效如何更改为word vba?)
Sub CopyWorksheetsToWord() Dim wdApp As Word.Application, wdDoc As Word.Document, ws As Worksheet Application.ScreenUpdating = False Application.StatusBar = "Creating new document..." Set wdApp = New Word.Application Set wdDoc = wdApp.Documents.Add For Each ws In ActiveWorkbook.Worksheets ws.UsedRange.Copy wdDoc.Paragraphs(wdDoc.Paragraphs.Count).Range.InsertParagraphAfter wdDoc.Paragraphs(wdDoc.Paragraphs.Count).Range.Paste Application.CutCopyMode = False wdDoc.Paragraphs(wdDoc.Paragraphs.Count).Range.InsertParagraphAfter If Not ws.Name = Worksheets(Worksheets.Count).Name Then With wdDoc.Paragraphs(wdDoc.Paragraphs.Count).Range .InsertParagraphBefore .Collapse Direction:=wdCollapseEnd .InsertBreak Type:=wdPageBreak End With End If Next ws Set ws = Nothing Application.StatusBar = "Cleaning up..." With wdApp.ActiveWindow If .View.SplitSpecial = wdPaneNone Then .ActivePane.View.Type = wdNormalView Else .View.Type = wdNormalView End If End With Set wdDoc = Nothing wdApp.Visible = True Set wdApp = Nothing Application.StatusBar = False End Sub
【问题讨论】:
-
您的代码缺乏基本逻辑。首先,VBA 只能在您打开 MS Office 文档的情况下运行。哪一个?在运行代码之前,您无法打开对话框来选择文档。接下来,如果要从 Word 打开 Excel,必须先运行 Word,然后创建 Excel 应用程序。最后,如果您想从对话框中选择 Excel 工作簿,您可以从 Word 中执行此操作。在将代码提交给其他人审查之前,您应该将这么多的顺序放入您的代码中。至少,你的意图是/应该是明确的。
-
@Variatus - 我认为你可能过于复杂了。 OP 声明“当 Word 打开时”。这告诉我他们想要打开事件
Document_Open()中的代码,该代码会弹出一个文件选择框,在 Excel 不可见的情况下抓取 Excel 数据,并将其插入到打开的 Word 文档中。他们甚至给出了他们的代码位,并表示它在 Excel 中有效,但在 Word 中无效。 -
@Variatus 我认为 Leila 在这里需要的只是一个代码 sn-p,它做同样的事情但在 word 文件中工作:它可以打开给定的 excel 文件(打开但对用户不可见) 并将excel文件中的内容复制到当前word文件中。上面的代码已经做到了,但是它在一个 excel 文件中运行并从 excel 文件中读取内容并将其复制到给定的 word 文件中。