幫黃XX寫的一個自動標亮單元格的vba語句。用于查找快遞單號后4位骗灶,如果找到唯一就自動標亮單元格游添,便于對賬使用系草。為了方便同事修改,對每一句都加了注釋唆涝。
工作表事件
'以下內容放入需要按下回車就執(zhí)行宏的表格里面
Private Sub worksheet_selectionchange(ByVal target As Range) '工作表選擇事件
Application.OnKey "{enter}", "kaishi" '按下回車執(zhí)行kaishi模塊
Application.OnKey "~", "kaishi" '按下小鍵盤回車執(zhí)行kaishi模塊
End Sub '結束語句
vba宏代碼
'以下內容放入模塊中
Public kg, kddh, srdh, djck, czws, czw, sjl, ksh '(定義全局變量找都,開關kg,快遞單號kddh廊酣,輸入單號srdh能耻,凍結窗口djck,查找位數(shù)表頭czws亡驰,查找位czw晓猛,數(shù)據(jù)列sjl,數(shù)據(jù)開始行ksh
Sub kaishi()
If Range("A1") = "YUNDA" Then '如果A1單元格是YUNDA凡辱,那么執(zhí)行下面的語句
kg = "G1" '變量kg的位置在G1
kddh = "H1" '變量kddh(快遞單號的表頭)輸入在H1單元格
srdh = "I1" '變量srdh的位置在I1
czws = "J1" '變量czws的位置在J1
czw = "K1" '變量czw的位置在K1
djck = 4 '變量djck的位置在第四行(4行之前的固定不動)
sjl = 2 '變量sjl等于2(快遞單號存放的列號)
ksh = 5 '變量ksh等于5(快遞單號從第幾行開始的
Else '如果A1單元格不是YUNDA戒职,那就是順豐,執(zhí)行下面的語句
kg = "AA1" '變量kg的位置在AA1
kddh = "AB1" '變量kddh(快遞單號的表頭)輸入在AB1單元格
srdh = "AC1" '變量srdh的位置在AC1
czws = "AD1" '變量czws的位置在AD1
czw = "AE1" '變量czw的位置在AE1
djck = 10 '變量djck的位置在第10行(10行之前的固定不動)
sjl = 3 '變量sjl等于2(快遞單號存放的列號)
ksh = 11 '變量ksh等于5(快遞單號從第幾行開始的
End If '結束是韻達還是順豐的判斷
If Range(kg) = "" Then '如果變量開關的位置沒有內容透乾,那么執(zhí)行以下語句
Range(kg) = 0 '變量開關等于0
Range(czw) = 4 '定義查找位是快遞單號的后四位
Range(kddh) = "單號后幾位" '輸入提示表頭
Range(srdh) = 8888 '快遞單號輸入表格的初始值
Range(czws) = "查找位數(shù)" '查找位數(shù)提示的表頭
Range(srdh).Interior.ColorIndex = 39 '設置輸入表格的背景色
ActiveWindow.SplitRow = djck '根據(jù)變量djck設置凍結窗口的位置
ActiveWindow.FreezePanes = True '確定凍結窗口為真
ElseIf Range(kg) = 1 Then '如果開關不等于空洪燥,但等于1那么執(zhí)行下面語句
Call chazhao '執(zhí)行chazhao模塊
Else '如果開關不等于空,也不等于1续徽,執(zhí)行下面語句
Call kaiguan '執(zhí)行kaiguan模塊
End If '結束開關的判斷
End Sub '結束kaishi模塊
Sub kaiguan() '定義kaiguan模塊
Range(kg) = 1 '開關等于1
Range(srdh).Activate '活動單元格激活到輸入單號的位置
End Sub '結束kaiguan模塊
Sub chazhao() '定義chazhao模塊
Dim b, c '定義變量b,c
b = 0 '變量b初始為0
For i = ksh To Cells(65536, sjl).End(xlUp).Row '循環(huán)變量i等于開始行到數(shù)據(jù)列的最后一個非空單元格
If Right(Cells(i, sjl), Range(czw).Value) * 1 = Range(srdh) * 1 Then '如果cells(行i,列sjl)的值等于輸入單號亲澡,那么執(zhí)行下面的語句
b = b + 1 '變量b+1
c = Cells(i, sjl).Address '變量c等于查找到相等單元格的地址
End If '結束是查找值與數(shù)據(jù)列是否相等的判斷
Next i '繼續(xù)i+1并再次執(zhí)行for下面的語句钦扭,直到i的最大值
If b = 0 Then '如果變量b等于0
MsgBox "沒有找到數(shù)據(jù)。" '彈出窗口沒有找到數(shù)據(jù)
Range(kg) = 1 '開關等于1
Range(srdh).Activate '激活到輸入單號的位置
ElseIf b = 1 Then '如果b不等于0床绪,但等于1
Range(c).Select '選擇變量c的位置
ActiveCell.Interior.ColorIndex = 40 '對當前活動單元格的背景色設置
Range(kg) = 0 '開關等于0
ElseIf b > 1 Then '如果b不等于0客情,也不等于1其弊,但大于1那么,彈出下面的窗口
MsgBox "共有" & b & "個重復數(shù)據(jù)膀斋,請更改查找位數(shù)再嘗試梭伐。"
Range(czw).Activate '激活單元格位置到查找位
End If '結束變量b的判斷
End Sub '結束chazhao模塊
更新:
Sub kaishi()
'初始查找表頭條件
If Range("O1") <> "開關" Then
Range("O1") = "開關"
Range("O2") = "單號開始行"
Range("O3") = "單號結束行"
Range("O4") = "單號所在列"
Range("O4") = "查找位數(shù)"
Range("P4") = 4
Range("O5") = "查找單號"
Range("P5") = 8888
Range("P5").Interior.ColorIndex = 39
For H = 1 To 30 '獲取數(shù)據(jù)區(qū)域位置
If Cells(H, 1) = "序號" Then
Range("P2") = H + 1
Exit For
End If
Next H
Range("P3") = Cells(Range("P2").Value, 3).End(xlDown).Row
End If
If Range("P1") = "" Then
Range("P1") = 0
ActiveWindow.SplitRow = Range("P2") - 1
ActiveWindow.FreezePanes = True
ElseIf Range("P1") = 1 Then
Call chazhao
Else
Call kaiguan
End If
End Sub
Sub kaiguan()
Range("P1") = 1
Range("P5").Activate
End Sub
Sub chazhao()
Dim b, c
b = 0
For i = Range("P2") To Range("P3")
If Right(Cells(i, 3), Range("P4").Value) * 1 = Range("P5") * 1 Then
b = b + 1
c = Cells(i, 3).Address
End If
Next i
If b = 0 Then
MsgBox "沒有找到數(shù)據(jù)。"
Range("P1") = 1
Range("P5").Activate
ElseIf b = 1 Then
Range(c).Select
ActiveCell.Interior.ColorIndex = 40
Range("P1") = 0
ElseIf b > 1 Then
MsgBox "共有" & b & "個重復數(shù)據(jù)仰担,請更改查找位數(shù)再嘗試糊识。"
Range("P4").Activate
End If
End Sub