excel宏中的部分单元格(或字符串)匹配

时间:2016-05-13 10:56:59

标签: excel vba excel-vba string-matching strikethrough

我是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中。

2 个答案:

答案 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编码风格是明确的使用范围变量而不是依赖范围对象的默认属性时。

您还可以完全免除变量Name1Name2

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进行特定模式匹配,但它也允许使用野性字符*