Excel 我已经通过了一个Vba代码,我想知道它的意义,它会做什么
我不确定到底需要解释什么,所以我在每行代码上面都添加了注释 此函数在“AK”列的Excel 我已经通过了一个Vba代码,我想知道它的意义,它会做什么,excel,vba,Excel,Vba,我不确定到底需要解释什么,所以我在每行代码上面都添加了注释 此函数在“AK”列的工作表(3)(工作簿中的第三张工作表)中搜索字符串searchKeyword,其中行是参数k 例如,如果k是1: 如果AX1为空且AE1由searchKeyword组成,它将用replaceKeyword填充AX1。如果有意的话,它会在“house”中找到“us”一词 函数返回Boolean数据类型,该数据类型为True或False-填充AX时返回True Function CheckKeywordAndReplac
工作表(3)
(工作簿中的第三张工作表)中搜索字符串searchKeyword
,其中行是参数k
例如,如果k
是1
:
如果AX1
为空且AE1
由searchKeyword
组成,它将用replaceKeyword
填充AX1
。如果有意的话,它会在“house”中找到“us”一词
函数返回Boolean
数据类型,该数据类型为True
或False
-填充AX
时返回True
Function CheckKeywordAndReplace(ByVal searchKeyword As String, ByVal replaceKeyword As String, ByVal k As Integer) As Boolean
Dim isFound As Boolean
isFound = False
If Sheets(3).Range("AX" & k) = Empty Then
Set rgFound = Sheets(3).Range("AE" & k).Find(searchKeyword, LookIn:=xlValues, MatchCase:=False)
If Not rgFound Is Nothing Then
Sheets(3).Range("AX" & k).Value = replaceKeyword
isFound = True
End If
End If
CheckKeywordAndReplace = isFound
End Function
这一功能有待改进。首先,不需要IsFound
,因为函数本身返回Boolean
,默认为False
。您没有声明所有的数据类型,这绝对不是一个错误,只是需要指出一点;我建议你使用。另外,我建议设置工作表对象,尤其是当您打开多个工作簿时。您可以使用InStr
功能,而不是.Find
,它没有什么问题,只是做同一件事的不同方式而已。您也可以使用带有通配符的运算符,比如
运算符,但VBScript不支持它,所以我个人倾向于不使用它。以下是我的方法:
Function CheckKeywordAndReplace(ByVal searchKeyword As String, ByVal replaceKeyword As String, ByVal k As Integer) As Boolean
'declare data type (boolean is only True or False)
Dim isFound As Boolean
'this is not needed as default boolean is False
isFound = False
'if range is empty
If Sheets(3).Range("AX" & k) = Empty Then
'search for your keyword
Set rgFound = Sheets(3).Range("AE" & k).Find(searchKeyword, LookIn:=xlValues, MatchCase:=False)
'if keyword found
If Not rgFound Is Nothing Then
'replace value with your keyword
Sheets(3).Range("AX" & k).Value = replaceKeyword
'update result from False to True
isFound = True
End If
End If
'return result boolean - this will be True if keyword was found and replaced
CheckKeywordAndReplace = isFound
End Function
您需要更精确地了解代码的哪一部分您不理解?否则这个问题就太宽泛了,无法回答。事实上,没有问题,你一个也没问告诉我你已经明白了什么。
Option Explicit
Function CheckKeywordAndReplace(ByVal searchKeyword As String, ByVal replaceKeyword As String, ByVal k As Integer) As Boolean
'declare data types
Dim ws As Worksheet, rng_search As Range
'set objects
Set ws = ThisWorkbook.Sheets(3) 'third sheet in the workbook where the macro is stored
Set rng_search = ws.Range("AX" & k)
'if range value is empty
If rng_search.Value = vbNullString Then
'if value has searchKeyword
If InStr(ws.Range("AE" & k).Value, searchKeyword) > 0 Then
'alternatively you can use Like operator, it's commented out
'If ws.Range("AE" & k).Value Like "*" & searchKeyword & "*" Then
'replace value with your keyword
rng_search.Value = replaceKeyword
'update result from False to True
CheckKeywordAndReplace = True
End If
End If
End Function