2017-02-16 250 views
1

我是Excel VBA新手,这是我的第一个宏,所以请原谅我,如果我犯了一个非常明显的错误。我有以下代码与工作表进行比较,如果找到匹配项,则在其中一张工作表上做笔记。它没有错误地运行,但没有做出改变。我看不出我出错的地方。先谢谢您的帮助。Excel VBA - 宏运行但不起作用

Sub invalid() 

Dim i As Integer 
Dim j As Integer 

Dim main As Worksheet 
Dim invalid As Worksheet 

i = 2 
Set main = ThisWorkbook.Worksheets(1) 
Set invalid = ThisWorkbook.Worksheets(2) 

Do 
    j = 2 
    Do 
     If LCase$(invalid.Cells(i, 1).Value) = LCase$(main.Cells(j, 13).Value) Then 
      main.Cells(j, 14).Value = "Invalid Email" 
     End If 
     j = j + 1 
    Loop While main.Cells(j, 2) = Not Null 
    i = i + 1 
Loop While invalid.Cells(i, 2) = Not Null 


End Sub 
+1

'main.Cells(J,2)'永远不会'Null'。你在想'空'吗? – Comintern

+0

我修正了这个问题,但它没有解决问题 – IAntoniazzi

+0

你是如何“修复”它的?代码没有什么明显的错误,所以它不是你的循环条件就是你的数据。 – Comintern

回答

1

试试这个,它消除了环路的一个:

Sub invalid() 

Dim i As Long 
Dim j As Long 
Dim lRow As Long 
Dim main As Worksheet 
Dim invalid As Worksheet 

Set main = ThisWorkbook.Worksheets(1) 
Set invalid = ThisWorkbook.Worksheets(2) 
lRow = main.Cells(main.Rows.Count, 13).End(xlUp).Row 

For i = 2 To lRow 
    j = 0 
    On Error Resume Next 
    j = Application.WorksheetFunction.Match(main.Cells(i, 13), invalid.Range("A:A"), 0) 
    On Error GoTo 0 
    If j > 0 Then main.Cells(i, 14) = "Invalid Email" 
Next i 

End Sub 
+0

工作正常!谢谢! – IAntoniazzi

+0

我现在要去阅读Match函数,这样我就能理解你是如何用一个循环做到的! – IAntoniazzi