2015-02-17 48 views
0

有人请在笔记本电脑出海前帮助我。我创建了一个Excel用户窗体,在输入所有内容之后,从工作表上的一个单元格复制文本并将其粘贴到新的Word文档中。它的工作原理非常漂亮,Word文档将按照它应该打开的方式打开并粘贴单元格的内容。我可以在那时手动保存打开的Word文档,但我希望文档能够保存特定的文件名并存入特定的文件夹,然后完全关闭Word。 SaveAs对我不起作用;我不知道我做错了什么。VBA Excel - 另存为word文档不起作用

这是我的第一篇文章btw--希望能通过搜索找到我的答案,但经过几个小时的搜索和尝试不同的事情之后,我放弃了发布。我提前道歉,如果我打破任何问题 - 问礼节规则!

下面的代码是针对我的用户表单上的按钮单击,我复制了我想要粘贴到Word中的单元格后立即剪掉。 编辑:我改变了我的原始问题,以反映我尝试了SaveAs2修复建议。我现在收到错误“无效或不合格的参考”。帮帮我?

'copy to word 
Dim objWord As New Word.Application 
Dim objDoc As New Word.Document 

'Copy the range I want to paste in new Word document 
Range("M47").Copy 

'Paste into the new Word document 
With objWord 
    .Documents.Add 
    .Selection.Paste 
    .Visible = True 
End With 

'****************WORKS FINE UP UNTIL THIS POINT. 

'The document opens with the text I want in it. 

'Creating the special filename 
Dim strFilename  As String 
Dim rngRange  As Range 

'Cell in Excel Worksheet from where filename is to be picked (patient date of birth) 
Set rngRange = Worksheets("Scores").Range("D95") 

'Create File name with DOB, 'PAI', & today's date 
strFilename = rngRange.Value & "PAI" & Format(Now(), "mmddyyyy") 

.SaveAs2 Filename:=("C:\Users\Mary Anne\Google Drive\") & strFilename, _ 
FileFormat:=16 

End Sub 
+1

调试器停止,它告诉你*什么?它停下来的线是什么?您没有包含任何这些信息,我们需要帮助排除故障...... – 2015-02-17 21:59:43

+0

“rngRange”单元中有什么样的值?它只是一个日期值?或者它是一个完整的文件路径? – 2015-02-17 22:00:28

+0

请发布保存word文档的代码,很难帮助你而没有看到。也发布D95中保存的值或验证不包含/ \:*? “< > | characters – Sorceri 2015-02-17 22:01:42

回答

0

您需要参考您所使用的方法的对象上:

objDoc.SaveAs2 "C:\Users\Mary Anne\Google Drive\" & strFilename, 16 

查找更多有关official doc

SaveAs2方法你在做什么错了,其实,正在调用没有对象的方法:

.SaveAs2 

我是牛逼我的帽子已复制从With块像下面这行代码,所以我将解释这意味着什么:):

With objDoc '<-- "with the objDoc", we will... 
'...  '<-- "do many stuffs, among them we will also..." 
.SaveAs2 '<-- "save the objDoc as SaveAs2" 
'... 
End With 

.SaveAs2意味着有以前被称为在With块的对象,它不能独立存在,否则会出现编译错误。

+0

再次感谢您的回复。我想我明白你的意思;但是,我不知道如何修改我的代码以使其工作。我应该添加到我的代码才能使其工作? – 2015-02-17 23:58:59

+0

好吧,我只是添加了objDoc。放到我原来的SaveAs2行上,但现在它用我的strFilename保存了一个空白的Word文档(关闭它),并将我的单元格粘贴到另一个Document1上并保持打开状态。所以它基本上创建了两个Word文档:一个用我的单元格粘贴到它上面,另一个用我没有指定的文件名。我在这里错过了很棒的时光。 – 2015-02-18 01:28:17

+0

@MaryAnne这是因为'objDoc'是一个空白的Word文档,您不会将它指定为您添加到Word应用程序中的那个文档。在你的第五行代码中,用'Set objDoc = .Documents.Add'替换'.Documents.Add':这会将你的新文档添加到应用程序中,同时将'objDoc'设置为对它的引用,所以避免你现在谈论的问题。 – 2015-02-18 01:37:29