怎样使VBA按文件名顺序批量读取word文档?

现一文件夹内有近百个word文档,每一个word文件都是以类似354、355、356的形式命名,我需要按文件名大小批量提取其中的数据,忽略掉提取数据环节,请问我该怎么才能... 现一文件夹内有近百个word文档,每一个word文件都是以类似354、355、356的形式命名,我需要按文件名大小批量提取其中的数据,忽略掉提取数据环节,请问我该怎么才能用VBA按顺序读取所有文档呢? 展开
 我来答
智者总要千虑
高粉答主

2016-01-15 · 说的都是干货,快来关注
知道顶级答主
回答量:7.9万
采纳率:88%
帮助的人:1.4亿
展开全部
操作步骤。
  第一,首先将需要批量替换的多个Word文档放在同一文件夹下面。
  第二,新建一空白Word文档,右击空白工具栏,单击“控件工具箱”,就可以看到屏幕上调出的控件工具箱。
  第三,在控件工具箱上单击“命令按钮”,文档中就放置了一个按钮了。
  第四,双击该按钮,进入VB代码编写模式,将以下代码复制进去。
Private Sub CommandButton1_Click()
Application.ScreenUpdating = False
Dim myPas As String, myPath As String, i As Integer, myDoc As Document
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "选择目标文件夹"
If .Show = -1 Then
myPath = .SelectedItems(1)
Else
Exit Sub
End If
End With
myPas = InputBox("请输入打开密码:")
With Application.FileSearch
.LookIn = myPath
.FileType = msoFileTypeWordDocuments
If .Execute > 0 Then
For i = 1 To .FoundFiles.Count
Set myDoc = Documents.Open(FileName:=.FoundFiles(i), Passworddocument:=myPas)
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "大家好"
.Replacement.Text = "你好"
.Forward = True
.Wrap = wdFindAsk
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchByte = True
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
myDoc.Save
myDoc.Close
Set myDoc = Nothing
Next
End If
End With
Application.ScreenUpdating = True
End Sub
  
第五,保存上面代码,退出VB编辑模式,返回Word文档界面。
  第六,单击选中该按钮,再单击控件工具箱的第一个按钮“退出设计模式”。
  第七,进行测试:点击按钮,选择要放置多个WORD文档所在的文件夹,确定后即可完成!注意如果WORD文档没有加密的话,密码项就不填,直接确认。
crazy0qwer
2013-01-28 · TA获得超过3301个赞
知道大有可为答主
回答量:4020
采纳率:71%
帮助的人:1321万
展开全部
先遍历所有文件,将文件名保存到数组中,然后对数组进行排序,然后就可以按顺序读取了。
追问
非常感谢你的回答,可以写一段代码吗?就以354、355、356为文件名。麻烦了。
追答
看你私信,代码我先私信你,怕这里发了提交不上。
Private Function MyFunction8()
Dim Path As String, Spath As String
Dim Arr(), N As Long, Str As String
Path = "D:\新建文件夹\" '路径 注意后面要有斜杠
Spath = Dir(Path & "*.doc") '要查找的文件后缀名
Do While Len(Spath) '循环读取文件
N = N + 1
ReDim Preserve Arr(1 To N) '重新定义数组范围
Arr(UBound(Arr)) = Spath '将文件名转换为数值以进行排序
Spath = Dir() '查找下一个文件
DoEvents
Loop
Call Paixu(Arr()) '调用排序函数
For I = 1 To UBound(Arr) '依次取出排序后文件
Str = Str & Arr(I) & vbCrLf
Next
MsgBox Str
End Function

Private Function Paixu(ByRef Arr()) '冒泡法排序
For I = UBound(Arr) To LBound(Arr) Step -1
For J = LBound(Arr) To I - 1
If Val(Arr(I)) < Val(Arr(J)) Then
Temp = Arr(I)
Arr(I) = Arr(J)
Arr(J) = Temp
End If
Next
Next
End Function
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友d01d6db
2015-09-09 · TA获得超过7250个赞
知道小有建树答主
回答量:1875
采纳率:44%
帮助的人:410万
展开全部
先遍历所有文件,将文件名保存到数组中,然后对数组进行排序,然后就可以按顺序读取了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式