我是VBA的新手,我想在两张纸之间进行部分字符串(或单元格)匹配。
Name1的一个例子是" IT主管Sally Lim"
Name2的一个例子是" Sally Lim"
<div id='container'>
<button id="AddDynamicBtn">
Add Dynamic Btn
</button>
</div>
$(document).ready(function() {
$('#container').on('click','#DynamicBtn', function() {
alert('TEST');
});
$('#AddDynamicBtn').on('click',function() {
$('#container').append('<button id="DynamicBtn">Dynamic Btn</button>');
});
});
但是,它不起作用。当我运行编码时,没有任何反应或弹出错误。请帮忙
编辑编码:
Name1 = Sheets("Work").Cells(RowName1, ColName1)
Name2 = Sheets("Roster").Cells(RowName2, ColName2)
'This condition doesn't work
If Name1 = "*" & Name2 & "*" Then
'The "Name2" comes out with a compile error: Invalid Qualifier
Name2.Font.Strikethrough
Exit Do
Else
End If
删除部分已经解决,但没有显示&#34;编译错误&#34;我改变了我的声明后,#34; string&#34;到&#34;范围&#34;正如John Coleman所提议的那样。
我通过将Name1和Name2更改为两个Sally进行测试,然后使用以下条件进行删除并且它可以正常工作。我相信这是&#34; *&#34;这使得条件变得不可行。
If ShiftName Like "*" & CashName & "*" Then
CashName.Font.Strikethrough = True
如何通过相应更改条件来完成部分匹配?
第二次编辑:
我的坏!我意识到我的名字1是在CAPTIALS中。
答案 0 :(得分:3)
除了@MacroMan关于使用Like
的回答之外,您还需要正确使用Strikethrough
。它是一个布尔属性,需要设置为True:
If Name1 Like "*" & Name2 Then
Name2.Font.Strikethrough = True
Exit Do
Else
End If
点击编辑:
根据您的扩展问题,您可以执行以下操作:
Dim Name1 As Range, Name2 As Range 'If you don't have this already declared
'then ... in the loop:
Set Name1 = Sheets("Work").Cells(RowName1, ColName1)
Set Name2 = Sheets("Roster").Cells(RowName2, ColName2)
If Name1.Value Like "*" & Name2.Value & "*" Then
Name2.Font.Strikethrough = True
Exit Do
Else
End If
对于Range变量使用.Value
并不是绝对必要的(使用Like
的比较可以在没有它的情况下按预期工作)但是许多人认为它是良好的VBA编码风格是明确的使用范围变量而不是依赖范围对象的默认属性时。
您还可以完全免除变量Name1
和Name2
:
If Sheets("Work").Cells(RowName1, ColName1).Value Like "*" & Sheets("Roster").Cells(RowName2, ColName2).Value & "*" Then
Sheets("Roster").Cells(RowName2, ColName2).Font.Strikethrough = True
Exit Do
Else
End If
最后一句话:紧随Else
的{{1}}有点毫无意义。大概你的实际代码在else子句中做了一些事情。如果不是 - 只需完全删除其他内容,并在End If
End If
答案 1 :(得分:2)
使用Like
运算符:
If Name1 Like "*" & Name2 Then
您可以使用Like
进行特定模式匹配,但它也允许使用野性字符*