Sub 另存為不含宏的文檔()
Application.DisplayAlerts = False
Application.ScreenUpdating = False
Dim oDoc As Document
Set oDoc = Word.ActiveDocument
Dim oRng As Range
Set oRng = oDoc.Content
Dim sPath As String
'默認(rèn)存儲(chǔ)路徑,當(dāng)前用戶桌面,注釋掉的是當(dāng)前文檔路徑
sPath = Environ("userprofile") & "\Desktop\" 'Word.ActiveDocument.Path & "\"
'處理文件名
Dim strDocName As String
strDocName =ActiveDocument.Paragraphs(1).Range.Text '包含一個(gè)回車符
strDocName = Replace(strDocName, Chr(13), "") 'chr(10)'刪除句末回車符,沒有trim空格
'采用復(fù)制內(nèi)容到新文檔的形式,避免將宏代碼帶到新文檔
oRng.Select
oRng.Copy
Dim oDocTemp As Document
Set oDocTemp = Word.Documents.Add
With oDocTemp.Application.Selection
.Paste
End With
'Dim vrtSelectedItem As Variant
Dim fDialog As FileDialog
Set fDialog = Application.FileDialog(msoFileDialogSaveAs)
With fDialog
.AllowMultiSelect = False
.Filters.Clear '不清空會(huì)造成多次添加
.Filters.Add "Word文件", "*.doc;*.docx;*.docm", 1
.InitialFileName = sPath '& strDocName 'Left(vrtSelectedItem, Len(vrtSelectedItem) - 5)
'返回值-1表示按下確認(rèn)按鈕。如果沒有判斷,那么無論點(diǎn)擊哪個(gè)按鈕,均會(huì)保存文件到磁盤。
If .Show = -1 Then
'Set oDocTemp = Application.Documents.Save(vrtSelectedItem, ReadOnly:=True)'vrtSelectedItem為空
'.Execute'execute是SaveAs對(duì)話框配套的保存命令,執(zhí)行的是直接另存為操作,會(huì)把宏代碼帶到新文檔。改為調(diào)用SaveAs2方法完成存儲(chǔ)操作
'.SelectedItems.Item(1)是對(duì)話框文件名修改后的名字。SelectedItems(1)為null
oDocTemp.SaveAs2 filename:=.SelectedItems.Item(1), FileFormat:=wdFormatDocumentDefault
oDocTemp.Close False
End If
End With
Set fDialog = Nothing
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub
上面代碼需要注意地方兩點(diǎn),也是浪費(fèi)我很多時(shí)間的地方,一是如果采用標(biāo)題之類作為文件名,因?yàn)榘嘶剀嚪〒Q行符)導(dǎo)致代碼一直報(bào)錯(cuò),需要先刪掉才能保存成功。
第二點(diǎn),微軟官方文檔SaveAs2例子的人機(jī)交互有點(diǎn)不是很友好,直接用InputBox讓用戶輸入文件名(見中間注釋掉的代碼)。所以考慮用dialog彈出另存的對(duì)話框,由用戶選擇文件類型和修改文件名(默認(rèn)默認(rèn)為文件內(nèi)容的第一行(標(biāo)題),減少手工勞動(dòng)),但又有新的問題,dialog的.execute命令會(huì)直接將當(dāng)前文檔另存為新文檔,導(dǎo)致VBA宏代碼等也跟著到新文檔,徒增文件體積。而我希望不要把宏代碼帶到新文檔,采用聲明一個(gè)新的文檔對(duì)象,并且把當(dāng)前文檔的內(nèi)容復(fù)制過去的形式,再使用了SaveAs2方法另存為新生成的文檔對(duì)象。
上面的代碼很好的結(jié)合了兩方的優(yōu)點(diǎn),解決了缺點(diǎn),完美!上面的處理方法是原創(chuàng),反正我沒看到過類似的解決方案。文章來源:http://www.zghlxwxcb.cn/news/detail-617528.html
中間注釋掉對(duì)文件名處理部分,留給有需要的人參考。文章來源地址http://www.zghlxwxcb.cn/news/detail-617528.html
'摘抄自微軟官方文檔的一個(gè)例子
Dim intPos As Integer
intPos = InStrRev(strDocName, ".")
'此處刪除后綴名,后續(xù)另存為對(duì)話框中選擇文件類型后再加上后綴名
If intPos = 0 Then
' 如果文檔還未保存,問用戶輸入文件名
strDocName = InputBox("請(qǐng)輸入要保存的文件名:")
Else
'刪除原來的后綴名并添加新的后綴名
strDocName = Left(strDocName, intPos - 1)
strDocName = strDocName & ".docx"
End If
到了這里,關(guān)于VBA操作WORD(六)另存為不含宏的文檔的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!