各位大大好:
小弟想利用Worksheet_SelectionChange(ByVal Target As Range)
方式處理,但為何無法取得另一工作表的儲存格物件呢?
說明如下:
工作表一、sheets1("test") '學生成績
定義名稱:student
範圍:c8-h20
工作表二、sheets1("tel") '學生基本資料
定義名稱:telNo
範圍:c8-f20
現想在工作表一的定義名稱的第一欄
的選定單一儲存格時,可以核對工作表二
的學生資料是否相同。如工作表一的資料
不符時可自動修正。
以下是小弟的語法,不知如何修正才正確呢?
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim mSht1 As Worksheet
Dim mSht2 As Worksheet
Dim mRng1 As Range
Dim mRng2 As Range, mRng3 As Range
Dim mStr1$, mStr2$, mStr3$, nStr1$, nStr2$, nStr3$
Dim s1%, s2%, m1%, m2%, m3%
On Error Resume Next
If Intersect(Target, [student].Columns(1)) Then
'MsgBox Target.Address
s1 = Target.Row - [student].Row + 1
End If
Set mRng1 = Range("student")
'MsgBox mRng1.Address
mStr1 = mRng1.Cells(s1, 1)
mStr2 = mRng1.Cells(s1, 2)
mStr3 = mRng1.Cells(s1, 3)
Application.Goto Range("telNo")
Set mRng2 = Range("telNo").Columns(1) '設定物件無效
MsgBox mRng2.Address
Set mRng3 = mRng2.Find(what:=mStr1, lookat:=xlWhole, searchorder:=xlByRows, searchdirection:=xlNext) '執行失敗
If Not mRng3 Is Nothing Then
nStr1 = mRng3.Value
nStr2 = mRng3.Offset(, 1).Value
nStr3 = mRng3.Offset(, 2).Value
If mStr1 = nStr1 Then
If mStr2 <> nStr2 Then
m1 = m1 + 1
ElseIf mStr3 <> nStr3 Then
m2 = m2 + 1
End If
If m1 > 0 Then
Range("student").Cells(s1, 2) = nStr2
ElseIf m2 > 0 Then
Range("student").Cells(s1, 3) = nStr3
End If
End If
End If
End Sub
謝謝各位大大 |