ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 924|回复: 2

[求助] 请高手帮忙检查一下,这段代码有什么问题?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2014-7-17 12:12 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
我想用word文档的标题重新命名文件,在网上找了这段代码,可以运行,但不出现重新命名的结果,请高手帮忙检查一下,这段代码有什么问题?
代码如下:

Function GetTitle(wrd, fileName)
on error resume next
    Dim strTitle, strWord
    Dim i
    dim ThisDocument
    wrd.Documents.Open(fileName)
    strTitle = ""
    if Err.Number <> 0 then
     Err.clear
else
     strTitle = ""
     set ThisDocument = wrd.ActiveDocument
     if (ThisDocument.Words.Count > 0) then
         For i = 1 To ThisDocument.Words.Count
             strWord = ThisDocument.Words.Item(i)
             If Asc(strWord) = 13 and strTitle <> "" Then
                 Exit For
             End If
         
          if Asc(strWord) <> 13 then
              strTitle = strTitle + strWord
              if(len(strTitle) > 200) then exit for
             end if
         Next
     else
          GetTitle = "del"
     end if
     wrd.ActiveDocument.Close
end if
    GetTitle = replace(strTitle,vbCrLf,"")
   
End Function


sub main
dim wrd
dim strDir,strFileName, strFileExt, strFilePath, strFileTitle,strNewTitle, strCmdLine
dim objFSO , objFolder, objFile, objLog
dim nPos, nIndex
set wrd = CreateObject("Word.Application")
wrd.visible=true

wrd.application.activate
    strDir = "."

    set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objFolder = objFSO.GetFolder(strDir)
    Set objLog = objFSO.CreateTextFile("rename.bat", True, True)
   
    '&acute;&acute;&frac12;¨&Auml;&iquest;&Acirc;&frac14;
    if not objFSO.FolderExists("deleted") then
     objFSO.CreateFolder("deleted")
    end if
   
if not objFSO.FolderExists("emptyFiles") then
     objFSO.CreateFolder("emptyFiles")
    end if

    nIndex = 1
    for each objFile in objFolder.Files
        nPos = InStrRev(objFile, "\")
     strFilePath = mid(objFile, 1, nPos)
        strFileName = mid(objFile, nPos + 1)

        nPos = InStrRev(strFileName , ".")
     strFileTitle = mid(strFileName , 1, nPos)
        strFilePathExt = mid(strFileName , nPos + 1)

        if (ucase(strFilePathExt) = "DOC") and (asc(mid(strFileTitle ,1,1)) <> 126) then
      strNewTitle = GetTitle(wrd, objFile & "")
      if (not isnull(strNewTitle)) and (trim(strNewTitle) <> "") then
        if(strNewTitle = "del") then
         strCmdLine = "move " + strFileName + " deleted\"
        else
        
                  nIndex = nIndex + 1
                  strCmdLine = "ren """ + strFileName + """ """ + strNewTitle & "_" & nIndex &  ".doc"""
              end if
          else
       strCmdLine = "move " + strFileName + " emptyFiles\"
          end if
        end if
        objLog.WriteLine(strCmdLine )
        strCmdLine = ""

    next   
  
    objLog.Close
end sub

main

TA的精华主题

TA的得分主题

发表于 2014-7-17 19:42 | 显示全部楼层
1、首先要了解文件命名规则,就是你的标题的字符要符合文件命名规则。不然的话文件名到非法字符前就断了。
2、文件命名规则(整理不知道是否准确,大概是那个意思):
⑴文件名称不得超过255个字符。
⑵文件名开头不可以使用空格。
⑶文件名中不能有下列符号:“?”、“、”、“\”、“*”、““”、“””、“<”、“>”、“|”。
3、Word文档未保存前,都叫“文档 i”(中间有个空格),这个“i”是数字,从1开始的自然数。
4、所以你的题目分两种情况处理:一是未保存;二是已保存,那就要重命名文件。
下面是未保存情况的代码。重命名情况比较复杂,因为在打开原文件的情况下是无法重命名的。两种情况并在一个代码,需要判断。
  1. Sub保存文件()
  2. x = ActiveDocument.Paragraphs(1)
  3. x = Replace(x, Chr(7), "")
  4. x = Replace(x, Chr(13), "")
  5. Path = "f:\保存位置"
  6. ActiveDocument.SaveAs Path & "" & x
  7. End Sub
复制代码
有时间再搞。

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-7-17 21:16 | 显示全部楼层
谢谢了,我是外行,想试试
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2025-1-17 03:17 , Processed in 0.020668 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表