我想基本上模拟在VBA中替换Excel中的所有功能并替换字符串03/01/2018(在此工作簿中存在10次)与01/03/2017我已经知道如何在一次出现时执行此操作但是不是范围内的所有事件。
替换方法有像findnext这样的东西吗?
Sub findandreplacedate()
Workbooks("01 .xlsx").Sheets(1).usedrange.Replace What:="*03/01/2018*", _
Replacement:="01/03/2017", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False
end sub
你可以尝试一下。这使用RegEx(正则表达式)来检查您的日期。
您需要设置对Microsoft VBScript Regular Expressions x.x的引用
Sub ChangeDates()
Dim RegEx As New RegExp, rng As Range, i As Long, s As String
Dim tempArr() As String, bFlag As Boolean
With RegEx
.Pattern = "(\d{2})/(\d{2})/(\d{4})"
For Each rng In ActiveSheet.UsedRange
tempArr = Split(rng.Text)
bFlag = False
For i = 0 To UBound(tempArr)
If .test(tempArr(i)) Then
s = tempArr(i)
'Subtract 1 year from original date
s = Format(DateAdd("YYYY", -1, CDate(s)), "MM/DD/YYYY")
'Swap month and day field
tempArr(i) = Format(DateSerial(.Replace(s, "$3"), _
.Replace(s, "$2"), .Replace(s, "$1")), "mm/dd/yyyy")
'Tell VBA that the string has change and to update sheet
bFlag = True
End If
Next
If bFlag = True Then rng.Value = Join(tempArr)
Next rng
End With
End Sub
(\d{2})/(\d{2})/(\d{4})
这个表达分为三组:(\d{2})
,(\d{2})
,(\d{4})
第1组和第2组找到任意两个({2}
)数字(\d
),然后是正斜杠/
第3组正在寻找任何四个({4}
)数字(\d
)之后的正斜线/
是的有FindNext
Range.FindNext Method (Excel)
要查找范围内的所有文本实例,可以将FindNext
与Find
一起使用,以下示例说明如何使用FindNext
。
Option Explicit
Public Sub Example()
Dim rng As Range
Set rng = ThisWorkbook.Worksheets(1).UsedRange _
.Find("03/01/2018", LookIn:=xlValues)
If rng Is Nothing Then
Debug.Print "Not Found"
Exit Sub
End If
Dim firstAdd As String
firstAdd = rng.Address
Do ' Print address
DoEvents
Debug.Print rng.Address
' Find next item
Set rng = ThisWorkbook.Worksheets(1).UsedRange.FindNext(rng)
Loop Until rng Is Nothing Or firstAdd = rng.Address
End Sub
其他信息
DoEvents对于简单的事情非常有用,例如允许用户在启动后取消进程,例如搜索文件。对于长时间运行的进程,通过使用Timer或将任务委派给ActiveX EXE组件可以更好地完成处理器的处理。在后一种情况下,任务可以完全独立于您的应用程序继续,并且操作系统采用多任务处理和时间切片。
Debug.Print Immediate Window用于调试和计算表达式,执行语句,打印变量值等。它允许您在调试期间输入要由开发语言评估或执行的表达式。要显示立即窗口,请打开项目进行编辑,然后从“调试”菜单中选择“Windows”并选择“立即”,或按CTRL + ALT + I.