先看下在VB中遍歷文件并用正則表達式完成復制功能
將"E:/my/匯報/成績"路徑下源文件中的“1項目”,“一項目”等文件復制到目標文件下。以下為實現方式。
Private Sub Option1_Click()Dim myStr As String'通過在單元格中輸入項目序號,目前采用的InputBox方式指定的,也可通過此方式。二者取其一。'myStr = Sheets(“Sheet1”).Range(“D21”).Text ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '通過InputBox輸入項目序號Start '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' myStr = InputBox("請輸入項目序號,序號要為阿拉伯數字。格式一定要正確!格式如" & Chr(34) & "2項目" & Chr(34)) ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '通過InputBox輸入項目序號End ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Dim endNum As Integer 'MID函數截取結束位數 endNum = InStrRev(myStr, "項") myStr = Mid(myStr, 1, endNum - 1) 'MsgBox myStr Dim CChinesStr As String CChineseStr = CChinese(myStr) '將阿拉伯數字轉為漢字 'MsgBox CChineseStr ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '遍歷路徑下的文件Start ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Dim fso As Object Dim folder As Object Dim subfolder As Object Dim file As Object Dim fileNameArray As String Dim basePath As String basePath = "E:/my/匯報/成績" Set fso = CreateObject("scripting.filesystemobject") '創建FSO對象 Set folder = fso.getfolder(basePath & "/源文件") For Each file In folder.Files '遍歷根文件夾下的文件 'fileNameArray = fileNameArray & file & "|" Dim mRegExp As Object '正則表達式對象 Dim mMatches As Object '匹配字符串集合對象 Dim mMatch As Object '匹配字符串 Set mRegExp = CreateObject("Vbscript.Regexp") With mRegExp .Global = True 'True表示匹配所有, False表示僅匹配第一個符合項 .IgnoreCase = True 'True表示不區分大小寫, False表示區分大小寫 '.Pattern = "([0-9])?[.]([0-9])+|([0-9])+" '匹配字符模式 '.Pattern = "((([0-9]+)?)|(([一二三四五六七八九十]+)?))項目(([一二三四五六七八九十]+)?)|([0-9])?" '匹配字符模式 '.Pattern = "(項目(二百三十四)+)|(((234)?|(二百三十四)?)項目(234)?)" '匹配字符模式 '.Pattern = "(((" & "+)?)|(([一二三四五六七八九十]+)?))項目(([一二三四五六七八九十]+)?)|([0-9])?" '匹配字符模式 .Pattern = "(項目(" & CChineseStr & ")+)|(((" & myStr & ")?|(" & CChineseStr & ")?)項目(" & myStr & ")?)" '匹配字符模式 'Set mMatches = .Execute(Sheets("上報").Range("D21").Text) '執行正則查找,返回所有匹配結果的集合,若未找到,則為空 Set mMatches = .Execute(file) '執行正則查找,返回所有匹配結果的集合,若未找到,則為空 For Each mMatch In mMatches 'SumValueInText = SumValueInText + CDbl(mMatch.Value) 'SumValueInText = SumValueInText & mMatch.Value If mMatch.Value <> "" Then 'fileNameArray = fileNameArray & mMatch.Value & "_" fso.copyfile basePath & "/源文件/" & mMatch.Value & ".*", basePath & "/目標文件" & myStr '復制操作 End If Next End With 'MsgBox fileNameArray Set mRegExp = Nothing Set mMatches = Nothing Next Set fso = Nothing Set folder = Nothing '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '遍歷路徑下的文件End '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' MsgBox "操作完成"End Sub'將阿拉伯數字轉為漢字Private Function CChinese(StrEng As String) As String'驗證數據If Not IsNumeric(StrEng) ThenIf Trim(StrEng) <> “” Then MsgBox “無效的數字”CChinese = “”Exit FunctionEnd If'定義變量Dim intLen As Integer, intCounter As IntegerDim strCh As String, strTempCh As StringDim strSeqCh1 As String, strSeqCh2 As StringDim strEng2Ch As String'strEng2Ch = “零壹貳叁肆伍陸柒捌玖”strEng2Ch = “零一二三四五六七八九十”'strSeqCh1 = " 拾佰仟 拾佰仟 拾佰仟 拾佰仟"strSeqCh1 = " 十百千 十百千 十百千 十百千"strSeqCh2 = " 萬億兆"'轉換為表示數值的字符串StrEng = CStr(CDec(StrEng))'記錄數字的長度intLen = Len(StrEng)'轉換為漢字For intCounter = 1 To intLen'返回數字對應的漢字strTempCh = Mid(strEng2Ch, Mid(StrEng, intCounter, 1) + 1, 1)'若某位是零If strTempCh = “零” And intLen <> 1 Then'若后一個也是零,或零出現在倒數第1、5、9、13等位,則不顯示漢字“零”If Mid(StrEng, intCounter + 1, 1) = “0” Or (intLen - intCounter + 1) Mod 4 = 1 Then strTempCh = “”ElsestrTempCh = strTempCh & Trim(Mid(strSeqCh1, intLen - intCounter + 1, 1))End If'對于出現在倒數第1、5、9、13等位的數字If (intLen - intCounter + 1) Mod 4 = 1 Then'添加位" 萬億兆"strTempCh = strTempCh & Trim(Mid(strSeqCh2, (intLen - intCounter) / 4 + 1, 1))End If'組成漢字表達式strCh = strCh & Trim(strTempCh)NextCChinese = strChEnd Function |