excel如何利用VBA一键更改所有文件的名称

心得(2):如何利用VBA一键更改多个excel文件为指定的名称

问题:如何一键更改相同目录下的所有excel文件的名称,改为这个excel文件名内的每个单元格的内容,如我这个因为是要统计所有比赛队伍的信息,因为大部分人的excel文件名都不规范,这样如果有人想更新文件就得在文件夹里一个一个找很麻烦,就直接把每个队伍的文件命名为他的比赛项目名,这样在一定程度上就具有唯一性

解决:首先把所有要整合的excel文件放在一个路径不含有中文名的目录下,然后新建一个excel文件右键sheet点击查看代码,这时候你的画面上会出现一个编辑器,你这这上面利用VBA编写语言,最后点击F5直接运行即可

常规解决方案:
打开文件,复制项目名,关闭文件,重命名

利用VBA一键修改:

  1. 得到全是英文目录下的一个文件名
    在这里插入图片描述
  2. 打开这个文件
    在这里插入图片描述
  3. 得到这个文件对应的项目名
    在这里插入图片描述
  4. 推出并关闭这个文件
    在这里插入图片描述
  5. 重命名这个文件
    在这里插入图片描述
  6. 因为这个项目名可能会出现很多windows的非法字符所以要利用replace函数出去一下

在这里插入图片描述7. 而且还会出现许多不知名的错误,比如说重名,没写项目名等,这样就要使用的VBA的错误处理机制
在这里插入图片描述

源码如下:

Sub 批量改名()
    Dim mypath As String, myname As String, awbname As String, arg As String
    Dim wbcount As Integer, i As Integer
    Dim olds As String, news As String
    
    
    '关闭excel的刷新
    Application.ScreenUpdating = False

    '禁止弹出对话框
    Application.DisplayAlerts = False

    '得到本文件的相对地址
    mypath = ActiveWorkbook.Path
    
    '当前工作的excel的文件名
    awbname = ActiveWorkbook.Name

    '任意打开文件夹下的某一个文件
    wbcount = 0
    myname = Dir(mypath & "\" & "*.xlsx")
    
    '定义一个变量为项目的名称(文件中的命名)
    arg = ""

    '如果当前的文件名为空的字符串("")表示已经没有更多的文件了跳出循环
    Do While myname <> ""
        If myname <> awbname Then
            '打开当前的文件夹
            Set wb = Workbooks.Open(mypath & "\" & myname)

            '得到这个文件的项目名的名称
            arg = wb.Sheets(1).Range("B5")

            wbcount = wbcount + 1
        
            '关闭文件
            wb.Close False
            
            '除去arg中命名规则不允许的字符
            arg = Replace(arg, "\", "")
            arg = Replace(arg, " ", "")
            arg = Replace(arg, "/", "")
            arg = Replace(arg, "?", "")
            arg = Replace(arg, "<", "")
            arg = Replace(arg, ">", "")
            arg = Replace(arg, "'", "")
            arg = Replace(arg, ":", "")
            arg = Replace(arg, "*", "")
            arg = Replace(arg, """", "")
            arg = Replace(arg, ".", "")
            arg = Replace(arg, "|", "")
            arg = Replace(arg, Chr(10), "")
            arg = Replace(arg, Chr(32), "")

            
            olds = mypath & "\" & myname
            news = mypath & "\" & arg & ".xlsx"

            '将这个文件的名称换成这个项目名
            On Error GoTo MyErr '错误导向
            Name olds As news

        End If
        '随机打开本文件夹的另一个文件
        myname = Dir
    Loop

'结束程序并且恢复之前的操作
MsgBox "一共更改了 " & wbcount & " 个文件"
Application.ScreenUpdating = True
Application.DisplayAlerts = True

'因为这个VBA语言到最后会运行错误标志的内容所以在结束后要让他失效
olds = ""

'错误标志
MyErr:
    If olds = "" Then
        
    Else
        arg = arg & wbcount
        news = mypath & "\" & arg & ".xlsx"
        Name olds As news
        Resume Next
    End If
    
    
End Sub
  • 8
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Excel VBA中实现批量提取Word表格内容可以通过以下步骤进行: 1.首先,在Excel的工作簿中打开Visual Basic Editor(VBE)。 2.在VBE的工具栏上,选择“插入”→“模块”,在模块中编写VBA代码。 3.在编写代码之前,确保已经添加对Microsoft Word对象库的引用。可以通过在VBE中选择“工具”→“引用”来添加引用。 4.在VBA代码的模块中,使用Word对象变量来打开Word文档。例如,可以使用以下代码打开一个名为"Document1.docx"的Word文档: ``` Dim wdApp As Word.Application Dim wdDoc As Word.Document Set wdApp = New Word.Application Set wdDoc = wdApp.Documents.Open("C:\路径\Document1.docx") wdApp.Visible = True ``` 5.接下来,使用“With”语句和对象变量来引用Word文档中的表格,然后遍历表格中的每个单元格,并将其值复制到Excel工作表中。 ``` With wdDoc For Each tbl In .Tables For Each cell In tbl.Range.Cells '将单元格值复制到Excel工作表中的指定位置 Worksheets("Sheet1").Cells(rowNum, colNum).Value = cell.Range.Text '更新行号和列号 rowNum = rowNum + 1 colNum = colNum + 1 Next cell Next tbl End With ``` 6.在代码结束时,记得关闭Word文档和应用程序对象。 ``` wdDoc.Close wdApp.Quit Set wdDoc = Nothing Set wdApp = Nothing ``` 以上步骤将通过Excel VBA实现一键批量提取Word表格内容。可以根据具体需求进行适当的修改和调整,如指定目标表格的位置、添加错误处理等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值