|
- 这段代码是用于 Excel VBA 的,主要实现了两个函数:
- 1. `RemoveNumbersAndHyphens` 函数用于移除字符串中的数字和连字符。
- 2. `VisibleSht` 函数用于将隐藏的工作表中包含的字符串(经过 `RemoveNumbersAndHyphens` 处理后)与另一个工作表中的数据进行匹配,并在匹配到的位置标记一个 "√" 符号。
- 现在让我来逐行解释代码:
- ```vba
- Function RemoveNumbersAndHyphens(s As String) As String
- Dim regex As Object
- Set regex = CreateObject("VBScript.RegExp")
- regex.Global = True
- regex.Pattern = "[0-9-]"
- RemoveNumbersAndHyphens = regex.Replace(s, "")
- End Function
- ```
- - `Function RemoveNumbersAndHyphens(s As String) As String`: 定义了一个名为 `RemoveNumbersAndHyphens` 的函数,它接受一个字符串参数并返回一个字符串。
- - `Dim regex As Object`: 声明一个名为 `regex` 的对象变量,用于存储正则表达式对象。
- - `Set regex = CreateObject("VBScript.RegExp")`: 创建一个 VBScript 正则表达式对象。
- - `regex.Global = True`: 将正则表达式设置为全局匹配模式,以匹配字符串中的所有匹配项。
- - `regex.Pattern = "[0-9-]"`: 设置正则表达式的模式,该模式将匹配数字和连字符。
- - `RemoveNumbersAndHyphens = regex.Replace(s, "")`: 使用正则表达式对象将字符串中的数字和连字符替换为空字符串,并将结果赋值给函数的返回值。
- ```vba
- Function VisibleSht()
- Dim hiddenSheets() As String
- Dim i As Integer
- On Error Resume Next '忽略错误
- Excel.Application.ScreenUpdating = False
- Sheet1.Cells.Replace What:="√", Replacement:=""
- i = 0
- For Each sht In Sheets
- If sht.Visible Then
- ReDim Preserve hiddenSheets(i)
- hiddenSheets(i) = sht.Name
- i = i + 1
- End If
- Next
- '循环定位数据
- For j = LBound(hiddenSheets) To UBound(hiddenSheets)
- txt = RemoveNumbersAndHyphens(hiddenSheets(j))
- Set Rng = Sheet1.Cells.Find(What:=txt)
- If Rng Is Nothing Then
- Debug.Print "Value not found in " & hiddenSheets(j)
- Else
- Rng.Offset(0, 1).Value = "√"
- End If
- Next
- Excel.Application.ScreenUpdating = True
- End Function
- ```
- - `Function VisibleSht()`: 定义了一个名为 `VisibleSht` 的函数,它没有指定返回值类型,因此默认为 `Variant`。
- - `Dim hiddenSheets() As String`: 声明一个名为 `hiddenSheets` 的字符串数组,用于存储隐藏工作表的名称。
- - `Dim i As Integer`: 声明一个整型变量 `i`,用于迭代数组索引。
- - `On Error Resume Next`: 设置错误处理方式为忽略错误,即出现错误时不中断程序执行。
- - `Excel.Application.ScreenUpdating = False`: 禁用屏幕更新,以提高代码执行效率。
- - `Sheet1.Cells.Replace What:="√", Replacement:=""`: 在工作表 `Sheet1` 的所有单元格中查找 "√" 并替换为空字符串。
- - `For Each sht In Sheets`: 遍历所有工作表。
- - `If sht.Visible Then`: 检查当前工作表是否可见。
- - `ReDim Preserve hiddenSheets(i)`: 调整 `hiddenSheets` 数组的大小以容纳新的工作表名称。
- - `hiddenSheets(i) = sht.Name`: 将当前工作表的名称存储在 `hiddenSheets` 数组中。
- - `i = i + 1`: 增加数组索引计数器。
- - `For j = LBound(hiddenSheets) To UBound(hiddenSheets)`: 遍历 `hiddenSheets` 数组。
- - `txt = RemoveNumbersAndHyphens(hiddenSheets(j))`: 调用 `RemoveNumbersAndHyphens` 函数来移除当前工作表名称中的数字和连字符,并将结果存储在变量 `txt` 中。
- - `Set Rng = Sheet1.Cells.Find(What:=txt)`: 在工作表 `Sheet1` 的单元格中查找匹配 `txt` 的内容,并将结果存储在 `Rng` 对象中。
- - `If Rng Is Nothing Then`: 检查是否找到了匹配项。
- - `Debug.Print "Value not found in " & hiddenSheets(j)`: 如果未找到匹配项,则在调试窗口中打印相应的消息。
- - `Else`: 如果找到了匹配项。
- - `Rng.Offset(0, 1).Value = "√"`: 在找到的单元格的右侧单元格中写入 "√" 符号。
- - `Next`: 循环的下一次迭代。
- - `Excel.Application.ScreenUpdating = True`: 启用屏幕更新。
复制代码 |
|