ผลลัพธ์ถูกต้องครับ และผมได้เพิ่ม on error goto เข้าไป ก็ได้ผลเมื่อใส่ชื่อไฟล์ผิด (หาวิธีใช้ on error อยู่นานกว่าจะเข้าใจ)
ทีนี้มาติดตรงที่ว่า ถ้าเงื่อนไขแรกที่ค้นหา (คือข้อมูลใน column A) ไม่ได้เป็นแค่ตัวเลขอย่างเดียว เช่น 1024(ก) , A1011(ยน) แบบนี้ครับ แต่เราไม่รู้ว่า ข้างหน้า หรือ ข้างหลังเลขที่เราจะค้นหาเป็นตัวอะไรบ้าง เราจะกำหนดได้มั้ยครับว่าให้ใช้แค่ตัวเลข แต่สามารถค้นหามาได้ทั้งหมด เช่น
ต้องการค้นหา เลข 1011 เมื่อ run code แล้วจะได้ผลลัพธ์เป็น
1011
1011(ก)
1011(12)
1011
ฺB1011
ประมาณนี้ครับ
ผมพยายามหาวิธีปรับแล้วใน goole แต่หาไม่เจอจริงๆครับ หรือผมอาจจะใช้ keyword ในการค้นหาไม่ถูกกับโจทย์ เลยหาไม่เจอซักที
Code: Select all
Sub collectNO2()
Dim wb As Workbook, wbf As Workbook
Dim wn As Range
Dim nsh As Range
Dim i As Long
Dim desRow As Long
Dim a As Range, b As Range
Dim strF As String, strCp As String
Set a = Sheets("Show").Range("G1")
Set b = Sheets("Show").Range("G2")
Set wn = Range("I1")
Set nsh = Range("I2")
Set wbf = ThisWorkbook
Application.ScreenUpdating = False
On Error GoTo err1:
Set wb = Application.Workbooks.Open(Filename:=wn.Value, ReadOnly:=True)
With wb.Sheets(nsh.Value)
For i = 2 To .Range("A" & Rows.Count).End(xlUp).Row
If a.Value <> "" And b.Value <> "" Then
strF = a.Value & "_" & b.Value
strCp = .Range("a" & i).Value & "_" & .Range("b" & i).Value
ElseIf a.Value <> "" Then
strF = a.Value
strCp = .Range("a" & i).Value
ElseIf b.Value <> "" Then
strF = ab.Value
strCp = .Range("b" & i).Value
End If
If strF = strCp Then
'If .Range("A" & i).Value Like a.Value Then
With wbf.Sheets("Show")
destRow = .Range("A" & Rows.Count).End(xlUp).Row + 1
Application.Union(wb.Sheets(nsh.Value).Range("a" & i), _
wb.Sheets(nsh.Value).Range("b" & i), _
wb.Sheets(nsh.Value).Range("g" & i)).Copy
.Range("a" & destRow).PasteSpecial xlPasteValues
Application.CutCopyMode = False
End With
' End If
End If
Next i
End With
wb.Close False
Application.ScreenUpdating = True
Exit Sub
err1:
MsgBox "ไม่พบข้อมูลที่ค้นหา หรือ ใส่ที่อยู่ไฟล์ , ชื่อไฟล์ ผิด!!!", vbCritical, "SK-FOODS"
End Sub