snasui.com ยินดีต้อนรับ ยินดีต้อนรับสู่กระดานถามตอบ Excel and VBA และอื่น ๆ ที่เป็นมิตรกับทุกท่าน มีไฟล์แนบมหาศาล ช่วยให้ท่านค้นหาและติดตามศึกษาได้โดยง่าย สมาชิกท่านใดที่ยังไม่ได้ระบุ Version ของ Excel ที่ใช้งานจริง สามารถทำตาม Link นี้เพื่อจะได้รับคำตอบที่ตรงกับ Version ของท่านครับ ระบุ Version ของ Excel
snasui wrote: มันจะดึงข้อมูลมาให้ได้ก็ต่อเมื่อค่าที่คีย์เป็นประเภทเดียวกัน เช่นเป็นตัวเลขเหมือนกัน เป็น Text เหมือนกัน จากไฟล์ที่แนบมาได้กำหนดให้เป็น Text แต่ต้นทางเป็น Number ครับ การ Lookup และการ Match ต้องคำนึงถึงสิ่งเหล่านี้เป็นลำดับแรกเสมอจะลืมไม่ได้ครับ
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rng As Range
Dim rCheck As Range
Dim ColAmount As Integer
Dim ColName As Integer
Dim lng As Long
If Target.Count > 1 Then Exit Sub
If Target.Column = 1 Then
With Sheets("Sheet2")
Set rCheck = .Range("A1", .Range("A" & Rows.Count).End(xlUp))
End With
With Sheets("Sheet1")
Set Rng = .Range("A1", .Range("C" & Rows.Count).End(xlUp))
End With
ColName = 2
ColAmount = 3
lng = Application.CountIf(Rng.Resize(, 1), Target)
If lng >= 1 Then
If Application.CountIf(rCheck, Target) > 1 Then
MsgBox ("Double!!!")
End If
Target.Offset(0, 2) = Application.VLookup(Target, Rng, ColAmount, 0)
Target.Offset(0, 1) = Application.VLookup(Target, Rng, ColName, 0)
Else
Target.Font.Color = vbRed
Target.Font.Bold = True
End If
End If
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rng As Range
Dim rCheck As Range
Dim ColAmount As Integer
Dim ColName As Integer
Dim lng As Long
If Target.Count > 1 Then Exit Sub
If Target.Column = 1 Then
With Sheets("Sheet2")
Set rCheck = .Range("A1", .Range("A" & Rows.Count).End(xlUp))
End With
With Sheets("Sheet1")
Set Rng = .Range("A1", .Range("C" & Rows.Count).End(xlUp))
End With
ColName = 2
ColAmount = 3
lng = Application.CountIf(Rng.Resize(, 1), Target)
If lng >= 1 Then
If Application.CountIf(rCheck, Target) > 1 Then
MsgBox ("Double!!!")
End If
Target.Offset(0, 2) = Application.VLookup(Target, Rng, ColAmount, 0)
Target.Offset(0, 1) = Application.VLookup(Target, Rng, ColName, 0)
Else
Target.Font.Color = vbRed
Target.Font.Bold = True
End If
End If
End Sub
เข้าใจแล้วครับ
แต่พอ Run แล้วก็ Error ตรง 4 บรรทัดนี้ครับ คาดว่าน่าจะเกี่ยวกับคำว่า Target ครับ เราต้องประกาศตัวแปรอะไรให้มันหรือเปล่าครับ
If Target.Count > 1 Then Exit Sub
If Target.Column = 1 Then
Target.Font.Color = vbRed
Target.Font.Bold = True
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rng As Range
Dim rCheck As Range
Dim ColAmount As Integer
Dim ColName As Integer
Dim lng As Long
If Target.Count > 1 Then Exit Sub
If Target.Column = 1 Then
With Sheets("Sheet2")
Set rCheck = .Range("A1", .Range("A" & Rows.Count).End(xlUp))
End With
With Sheets("Sheet1")
Set Rng = .Range("A1", .Range("C" & Rows.Count).End(xlUp))
End With
ColName = 2
ColAmount = 3
lng = Application.CountIf(Rng.Resize(, 1), Target)
If lng >= 1 Then
If Application.CountIf(rCheck, Target) > 1 Then
MsgBox ("Double!!!")
End If
Target.Offset(0, 2) = Application.VLookup(Target, Rng, ColAmount, 0)
Target.Offset(0, 1) = Application.VLookup(Target, Rng, ColName, 0)
Else
Target.Font.Color = vbRed
Target.Font.Bold = True
End If
End If
End Sub