Sub BatchConvertDocToTxt_Enhanced()
Dim strFolder As String
Dim strFile As String
Dim strTxtFile As String
Dim objDoc As Document
Dim dlg As FileDialog
Dim failedFiles As String
Dim fileCount As Long
' 选择文件夹
Set dlg = Application.FileDialog(msoFileDialogFolderPicker)
dlg.Title = "请选择包含 DOC/DOCX 文件的文件夹"
If dlg.Show <> -1 Then Exit Sub
strFolder = dlg.SelectedItems(1)
' 初始化
failedFiles = ""
fileCount = 0
Application.StatusBar = "正在准备转换..."
Application.DisplayAlerts = False ' 临时关闭警告
' 遍历所有 .doc* 文件
strFile = Dir(strFolder & "\*.doc*")
Do While strFile <> ""
fileCount = fileCount + 1
Application.StatusBar = "正在转换 (" & fileCount & "): " & strFile
On Error Resume Next
Set objDoc = Documents.Open(FileName:=strFolder & "\" & strFile, _
ReadOnly:=True, Visible:=False)
On Error GoTo 0
If Not objDoc Is Nothing Then
' 生成 TXT 文件名(UTF-16 编码)
strTxtFile = strFolder & "\" & Left(strFile, InStrRev(strFile, ".") - 1) & ".txt"
' 保存为 Unicode 文本(UTF-16 LE)
objDoc.SaveAs2 FileName:=strTxtFile, FileFormat:=wdFormatUnicodeText
objDoc.Close SaveChanges:=wdDoNotSaveChanges
Debug.Print "已转换: " & strFile
Else
' 记录失败的文件
failedFiles = failedFiles & strFile & vbCrLf
End If
Set objDoc = Nothing
strFile = Dir()
Loop
' 恢复设置
Application.DisplayAlerts = True
Application.StatusBar = ""
' 显示结果
If failedFiles = "" Then
MsgBox "转换完成!共处理 " & fileCount & " 个文件。", vbInformation
Else
MsgBox "转换完成,但有 " & vbCrLf & failedFiles & " 个文件未能处理。", vbExclamation
End If
Set dlg = Nothing
End Sub
alt+F11,插入模块。F5选择文件夹