:D snasui.com ยินดีต้อนรับ :D
ยินดีต้อนรับสู่กระดานถามตอบ Excel and VBA และอื่น ๆ ที่เป็นมิตรกับทุกท่าน มีไฟล์แนบมหาศาล ช่วยให้ท่านค้นหาและติดตามศึกษาได้โดยง่าย :thup: สมาชิกท่านใดที่ยังไม่ได้ระบุ Version ของ Excel ที่ใช้งานจริง สามารถทำตาม Link นี้เพื่อจะได้รับคำตอบที่ตรงกับ Version ของท่านครับ :arrow: ระบุ Version ของ Excel
:!: โปรดทราบ :!:
  1. กรุณาอ่านกฎการใช้บอร์ด (Forum rules) ในตำแหน่งด้านบนของแต่ละบอร์ด
  2. การสมัครสมาชิก การ Login การกู้คืนรหัสผ่าน
    1. สมัครสมาชิกดูขั้นตอนได้ที่ :arrow: สมัครสมาชิก
    2. Login เข้าระบบโดยคลิกปุ่ม Login ตรงมุมขวาบนของหน้านี้ :roll:
    3. การ Login ผ่าน Facebook ดูวิธีที่ :arrow: Login ผ่าน Facebook
    4. ลืมรหัสผ่านสามารถรับรหัสใหม่ได้ที่ :arrow: Reset รหัสผ่าน
  3. มีปัญหาการใช้งาน แจ้งผู้ดูแลระบบได้ที่ :arrow: ติดต่อผู้ดูแลระบบ
  4. กำหนดการตั้งค่าส่วนตัว เช่นตั้งค่าภาษาเป็นไทยหรืออังกฤษดูได้ที่ :arrow: ตั้งค่าส่วนตัว
  5. การตั้งและตอบกระทู้ดูได้ที่ :arrow: วิธีการตั้งและตอบกระทู้
  6. การจัดรูปแบบตัวอักษรด้วย bbcode ในช่องแสดงความคิดเห็นดูได้ที่ :arrow: จัดรูปแบบตัวอักษร
  7. กำหนดขนาดตัวอักษรใน Browser ดูได้ที่ :arrow: กำหนดขนาดตัวอักษรใน Browser

ค้นหาข้อมูลจากอีก Sheet

ฟอรัมถาม-ตอบปัญหาการใช้งาน MS Excel and VBA
Forum rules
  1. ไม่อนุญาตให้ใช้ภาษาแชทในการถามและตอบปัญหา ไม่ใช้คำว่า "คับ" หรือ "อ่ะครับ" แทนคำว่า "ครับ" ไม่ใช้คำว่า "เด๋ว" แทนคำว่า "เดี๋ยว" เป็นต้น เนื่องจากเมื่อแปลเป็นภาษาต่างประเทศแล้วจะให้ความหมายผิดไปจากที่ควรจะเป็น
  2. ห้ามถามโดยระบุชื่อผู้ตอบและต้องตั้งชื่อกระทู้ให้สื่อถึงปัญหาที่จะถาม ไม่ตั้งชื่อว่า ช่วยด้วยครับ, มีปัญหามาปรึกษาครับ เป็นต้น
  3. กรุณาอธิบายปัญหาและระบุคำตอบที่ต้องการมาในกระทู้ด้วยเสมอถึงแม้จะอธิบายไว้ในไฟล์แนบแล้วก็ตาม ทั้งนี้เพื่ออำนวยความสะดวกแก่เพื่อนสมาชิกในการค้นหาข้อมูล
  4. กรุณาแนบไฟล์ตัวอย่างพร้อมแสดงคำตอบที่ถูกต้องมาในไฟล์ด้วยเพื่อให้ง่ายต่อการทำความเข้าใจและสะดวกต่อการตอบคำถาม (ขนาดไฟล์ไม่เกิน 500Kb ขนาดภาพไม่เกิน 800*600 Pixel) ไม่แนบเป็น Link มาจากแหล่งอื่นที่อาจจะถูกลบทิ้งไปโดยต้นทางในภายหลัง นอกจากนี้ไม่ควรแนบไฟล์ที่มีข้อมูลสำคัญอันก่อให้เกิดความเสียหายกับตนเองและผู้อื่น
  5. กรณีเป็นคำถามเกี่ยวกับ Programming เช่น VBA, VB.Net, C#, SQL ฯลฯ ต้องลองเขียนมาเองก่อนเสมอ ถามเฉพาะที่ติดปัญหา ระบุ Module, Procedure ที่ติดปัญหาให้ชัดเจน กรุณาโพสต์ Code ให้แสดงเป็น Code คือเปิดด้วย [code] และปิดด้วย [/code] ตัวอย่างเช่น [code]dim r as range[/code] เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
  6. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
User avatar
snasui
Site Admin
Site Admin
Posts: 30736
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: ค้นหาข้อมูลจากอีก Sheet

#41

Post by snasui »

:D รายการก่อนหน้าและถัดไปต้องใช้รายการปัจจุบันเข้าไปค้น เมื่อทราบรายการปัจจุบันแล้วจึงจะหารายการก่อนหน้าหรือรายการถัดไปได้

ไม่ทราบว่าดูรายการปัจจุบันจากค่าใดกรุณาอธิบายพร้อมทั้งอธิบายว่าหากทราบค่านั้นแล้วจะดูรายการก่อนหน้าด้วยวิธีใด ดูรายการถัดไปด้วยวิธีใดครับ หากเป็นลำดับที่จะหามาได้ง่ายมากครับ
wisitsakbenz
Silver
Silver
Posts: 505
Joined: Mon Sep 09, 2019 3:13 pm
Excel Ver: 2013

Re: ค้นหาข้อมูลจากอีก Sheet

#42

Post by wisitsakbenz »

เรียน อาจารย์ snasui

ดูรายการปัจจุบันจาก ---> "ลำดับ" ครับ
เมื่อได้ค่าแล้วให้แสดงใน ช่องต่าง ๆ ในหน้า input ครับ (ผมเข้าใจถูกหรือไม่ครับอาจารย์)
ขอบคุณครับ
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30736
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: ค้นหาข้อมูลจากอีก Sheet

#43

Post by snasui »

:D Field ไหนคือลำดับ เขียนใน SQL Statement สำหรับการดึงลำดับที่ว่านั้นไว้อย่างไรครับ :?:
wisitsakbenz
Silver
Silver
Posts: 505
Joined: Mon Sep 09, 2019 3:13 pm
Excel Ver: 2013

Re: ค้นหาข้อมูลจากอีก Sheet

#44

Post by wisitsakbenz »

เรียน อาจารย์ snasui

ถ้าไม่มี Field "ลำดับ" สามารถเพิ่มไปในข้อมูลได้ใช่หรือไม่ครับ
หรือสามารถดึงจาก Row สุดท้ายได้หรือไม่ครับ ขอบคุณครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 30736
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: ค้นหาข้อมูลจากอีก Sheet

#45

Post by snasui »

:D หากเราออกแบบเองจะเพิ่มอะไรเข้าไปหรือลบอะไรออกไปก็แล้วแต่ต้องการอันนี้เป็นเรื่องพื้นฐานครับ

การดึงจากรายการสุดท้ายก็ต้องบอกว่าโปรแกรมว่าดึงโดยหลักการใด เช่นที่ผ่านมาคือดึงโดยการเรียงคอลัมน์ (Field) ใด ๆ จากมากไปน้อยแล้วเอารายการแรกมาแสดง แต่หาก Field นั้นไม่สามารถเรียงแล้วตรงกับที่ต้องการได้ก็ย่อมไม่ได้รายการสุดท้ายที่แท้จริงครับ
wisitsakbenz
Silver
Silver
Posts: 505
Joined: Mon Sep 09, 2019 3:13 pm
Excel Ver: 2013

Re: ค้นหาข้อมูลจากอีก Sheet

#46

Post by wisitsakbenz »

เรียน อาจารย์ snasui

ไม่เช่นนั้นสามารถดึงข้อมูลจาก "RefNo" ได้ เพราะมันสามารถเรียงข้อมูลจากมากไปน้อยได้
SQL Statement สำหรับการดึงลำดับ

Code: Select all

'Other code...
    sFile = "\\10.21.4.97\File Sharing2\DataPricing\All Data Estimated.xlsx"
    shtName = "[Data$]"
        sql = "select * from " & shtName & " Order By [RefNo] DESC"
        sCnstr.CursorLocation = adUseClient
        sCnstr.Open "Provider=Microsoft.ACE.OLEDB.12.0;" _
    & "Data Source=" & sFile & ";" _
    & "Extended Properties=""Excel 12.0 Xml;HDR=YES"";"
        rs.Open sql, sCnstr
 'Other code...
แบบนี้ได้หรือไม่ครับ อาจารย์ หรือต้องปรับในส่วนใดครับ ขอบคุณครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 30736
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: ค้นหาข้อมูลจากอีก Sheet

#47

Post by snasui »

:D หากต้องการจะหาจาก RefNo ก็ต้องทราบว่าต้องการอ้างอิงจาก RefNo ใด เบอร์ก่อนหน้าคือคือค่าใด เบอร์ถัดไปคือค่าใด

เช่นหากจากเบอร์ xxx8 เบอร์ก่อนหน้าคือ xxx7 เบอร์ ถัดไปคือ xxx9 สามารถปรับ SQL เป็น

sql = "select * from " & shtName & "Where RefNo IN ('xxx7','xxx8','xxx9') Order By [RefNo] ASC" เช่นนี้เป็นต้น

เนื่องจากเป็นการหาแบบเรียงลำดับ จึงต้อง Order By แบบเรียงจากน้อยไปหามากครับ

หากต้องการหา 3 รายการสุดท้ายสามารถปรับได้เป็น

sql = "select top 3 * from " & shtName & " Order By [RefNo] DESC"

จะต้องศึกษาเกี่ยวกับ SQL Statement เพิ่มเติมในการทำงานลักษณะนี้ครับ
wisitsakbenz
Silver
Silver
Posts: 505
Joined: Mon Sep 09, 2019 3:13 pm
Excel Ver: 2013

Re: ค้นหาข้อมูลจากอีก Sheet

#48

Post by wisitsakbenz »

เรียน อาจารย์ Snasui
หากต้องการหา 3 รายการสุดท้ายสามารถปรับได้เป็น

sql = "select top 3 * from " & shtName & " Order By [RefNo] DESC"

จะต้องศึกษาเกี่ยวกับ SQL Statement เพิ่มเติมในการทำงานลักษณะนี้ครับ
ผมจะศึกษา SQL ให้มากกว่านี้ครับ ขอบคุณอาจารย์มากครับ

ผมลองเขียน Code ตามคำแนะนำอาจารย์แล้ว แต่ยัง error อยู่
ต้องปรับ Code อย่างไรครับ ขอบคุณครับ

Code: Select all

Sub DataReview(ByVal GoToRow As Integer)

    Dim sFile As String, sh As Worksheet
    Dim sCnstr As New ADODB.Connection
    Dim rs As New ADODB.Recordset
    Dim sql As String, shtName As String
    Dim arr() As Variant, i As Integer, j As Integer, k As Integer
    Dim strS As String
    
    sFile = "\\10.21.4.97\File Sharing2\DataPricing\All Data Estimated.xlsx"
    shtName = "[Data$]"
        sql = sql = "select top 3 * from " & shtName & " Order By [RefNo] DESC"
        sCnstr.CursorLocation = adUseClient
        sCnstr.Open "Provider=Microsoft.ACE.OLEDB.12.0;" _
    & "Data Source=" & sFile & ";" _
    & "Extended Properties=""Excel 12.0 Xml;HDR=YES"";"
        rs.Open sql, sCnstr
    
With Sheets("input")
    .Range("InputRefNo") = rs.Fields(GoToRow, 0).Value
    .Range("InputName") = rs.Fields(GoToRow, 5).Value
    .Range("InputHN").Value = rs.Fields(GoToRow, 6).Value
    .Range("C12").Value = rs.Fields(GoToRow, 7).Value
     .Range("InputPayer").Value = rs.Fields(GoToRow, 8).Value
     .Range("InputEstimateDateTime").Value = rs.Fields(GoToRow, 94).Value
End With
        Set sCnstr = Nothing
End Sub

Sub PreviousData()

Dim GoToRow As Integer
    Dim sFile As String, sh As Worksheet
    Dim sCnstr As New ADODB.Connection
    Dim rs As New ADODB.Recordset
    Dim sql As String, shtName As String
    Dim arr() As Variant, i As Integer, j As Integer, k As Integer
    Dim strS As String
    
    sFile = "\\10.21.4.97\File Sharing2\DataPricing\All Data Estimated.xlsx"
    shtName = "[Data$]"
        sql = "select top 3 * from " & shtName & " Order By [RefNo] DESC"
        sCnstr.CursorLocation = adUseClient
        sCnstr.Open "Provider=Microsoft.ACE.OLEDB.12.0;" _
    & "Data Source=" & sFile & ";" _
    & "Extended Properties=""Excel 12.0 Xml;HDR=YES"";"
        rs.Open sql, sCnstr


If Worksheets("Input").Range("InputRow") = "" Then
    GoToRow = rs.Fields
Else
    GoToRow = rs.Fields.Range("InputRow").Value - 1

End If

Worksheets("Input").Range("InputRow").Value = GoToRow
DataReview (GoToRow)

End Sub
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30736
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: ค้นหาข้อมูลจากอีก Sheet

#49

Post by snasui »

:D จาก Code sql = sql = "select top 3 * from " & shtName & " Order By [RefNo] DESC" ให้ลบ sql = ออกไป 1 ชุดครับ

Error บรรทัดไหนใน Code ครับ :?:
wisitsakbenz
Silver
Silver
Posts: 505
Joined: Mon Sep 09, 2019 3:13 pm
Excel Ver: 2013

Re: ค้นหาข้อมูลจากอีก Sheet

#50

Post by wisitsakbenz »

เรียน อาจารย์ snasui

ลบออกแล้วครับ
error ดังภาพครับ ขอบคุณครับ
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30736
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: ค้นหาข้อมูลจากอีก Sheet

#51

Post by snasui »

:D ค่านั้นต้องบอกว่าด้วย Field ที่เท่าไร เช่น Fields(0) แปลว่า Field ที่ 1 เป็นต้น หากไม่บอกค่าลำดับมันจะ Error ครับ
wisitsakbenz
Silver
Silver
Posts: 505
Joined: Mon Sep 09, 2019 3:13 pm
Excel Ver: 2013

Re: ค้นหาข้อมูลจากอีก Sheet

#52

Post by wisitsakbenz »

เรียน อาจารย์ snasui

แก้ไขแล้วครับ
error ดังภาพครับ ขอบคุณครับ

Code: Select all

    sFile = "\\10.21.4.97\File Sharing2\DataPricing\All Data Estimated.xlsx"
    shtName = "[Data$]"
        sql = "select top 3 * from " & shtName & " Order By [RefNo] DESC"
        sCnstr.CursorLocation = adUseClient
        sCnstr.Open "Provider=Microsoft.ACE.OLEDB.12.0;" _
    & "Data Source=" & sFile & ";" _
    & "Extended Properties=""Excel 12.0 Xml;HDR=YES"";"
        rs.Open sql, sCnstr

If Worksheets("Input").Range("InputRow") = "" Then
    GoToRow = rs.Fields(0)
Else
    GoToRow = rs.Fields.Range("InputRow").Value - 1

End If
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30736
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: ค้นหาข้อมูลจากอีก Sheet

#53

Post by snasui »

:D กรุณาทำความเข้าใจโพสต์ที่ผมตอบไปด้านบนหรือตามโพสต์ก่อนหน้าที่ตอบไปแล้ว สังเกตว่ามีการใช้ Fields ลักษณะใดครับ
wisitsakbenz
Silver
Silver
Posts: 505
Joined: Mon Sep 09, 2019 3:13 pm
Excel Ver: 2013

Re: ค้นหาข้อมูลจากอีก Sheet

#54

Post by wisitsakbenz »

เรียน อาจารย์ snasui

ผมลองเอา Else ออก > error ดังภาพครับอาจารย์
รบกวนขอคำแนะนำจากอาจารย์ด้วยครับ ขอบคุณครับ

Code: Select all

If Worksheets("Input").Range("InputRow") = "" Then
    GoToRow = rs.Fields(0)
End If
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30736
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: ค้นหาข้อมูลจากอีก Sheet

#55

Post by snasui »

:D GoToRow ประกาศตัวแปรเป็น Integer ดังนั้น Data Type ของ rs.Fields(0) ก็ต้องเป็นเป็น Integer เช่นเดียวกัน ไม่เช่นนั้นก็จะ Error

ประกาศตัวแปรให้มี Data Type เป็นแบบใด เมื่อ Assign ค่าให้กับตัวแปรนั้นจะต้องเป็น Data Type เดียวกันเสมอครับ
You do not have the required permissions to view the files attached to this post.
wisitsakbenz
Silver
Silver
Posts: 505
Joined: Mon Sep 09, 2019 3:13 pm
Excel Ver: 2013

Re: ค้นหาข้อมูลจากอีก Sheet

#56

Post by wisitsakbenz »

เรียน อาจารย์ snasui

ปรับ Code เป็น Dim GoToRow As String แล้ว
แต่ GoToRow จะต้องแสดงเป็น integer (Row ที่ข้อมูลจะแสดง ดังภาพ)
เช่น SQL จะเลือกข้อมูล top3 จาก database
เมื่อคลิก previous >> GoToRow = 11
ในส่วนของ input ตรง "InputRow" จะแสดงเลข 11 เช่นกัน
ต้องปรับ Code ในส่วนนี้อย่างไรครับ ขอคำแนะนำอาจารย์ด้วยครับ ขอบคุณครับ

Code: Select all

Dim GoToRow As String
    Dim sFile As String, sh As Worksheet
    Dim sCnstr As New ADODB.Connection
    Dim rs As New ADODB.Recordset
    Dim sql As String, shtName As String
    Dim arr() As Variant, i As Integer, j As Integer, k As Integer
    Dim strS As String
    
    sFile = "\\10.21.4.97\File Sharing2\DataPricing\All Data Estimated.xlsx"
    shtName = "[Data$]"
        sql = "select top 3 * from " & shtName & " Order By [RefNo] DESC"
        sCnstr.CursorLocation = adUseClient
        sCnstr.Open "Provider=Microsoft.ACE.OLEDB.12.0;" _
    & "Data Source=" & sFile & ";" _
    & "Extended Properties=""Excel 12.0 Xml;HDR=YES"";"
        rs.Open sql, sCnstr

If Worksheets("Input").Range("InputRow") = "" Then
    GoToRow = rs.Fields(0)

End If        
Worksheets("Input").Range("InputRow").Value = GoToRow
DataReview (GoToRow)
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30736
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: ค้นหาข้อมูลจากอีก Sheet

#57

Post by snasui »

wisitsakbenz wrote: Thu Dec 08, 2022 10:47 am GoToRow จะต้องแสดงเป็น integer
:D จาก Code ที่เขียนมา GoToRow จะเป็น Integer ไม่ได้ เพราะถูกกำหนดให้รับค่ามาจาก rs.Fields(0) ซึ่ง rs.Fields(0) คือค่าในคอลัมน์ A ซึ่งเป็น Text หากต้องการหาเลขลำดับต้องใช้ Statement อื่นไม่ใช่นำ rs.Fields(0) มาใช้ครับ
wisitsakbenz
Silver
Silver
Posts: 505
Joined: Mon Sep 09, 2019 3:13 pm
Excel Ver: 2013

Re: ค้นหาข้อมูลจากอีก Sheet

#58

Post by wisitsakbenz »

เรียน อาจารย์ snasui

ผมแก้ไข Database ให้มี ลำดับเข้ามา
และลองแก้ไข Code เมื่อคลิก Previous ครั้งแรกได้ แต่คลิกอีกครั้งเป็น 0 (ดัง Video)
อยากให้เป็นลำดับถัดไปจาก 11 คือ 10 ,9,8,... ไปเรื่อยๆ
ต้องปรับ Code อย่างไรครับ ขอบคุณครับ

Code: Select all

Sub DataReview(ByVal GoToRow As Integer)

    Dim sFile As String, sh As Worksheet
    Dim sCnstr As New ADODB.Connection
    Dim rs As New ADODB.Recordset
    Dim sql As String, shtName As String
    Dim arr() As Variant, i As Integer, j As Integer, k As Integer
    Dim strS As String
    
    sFile = "\\10.21.4.97\File Sharing2\DataPricing\All Data Estimated.xlsx"
    shtName = "[Data$]"
        sql = "select top 3 * from " & shtName & " Order By [RefNo] DESC"
        sCnstr.CursorLocation = adUseClient
        sCnstr.Open "Provider=Microsoft.ACE.OLEDB.12.0;" _
    & "Data Source=" & sFile & ";" _
    & "Extended Properties=""Excel 12.0 Xml;HDR=YES"";"
        rs.Open sql, sCnstr
    
With Sheets("input")
    .Range("InputRefNo") = rs.Fields(1)
    .Range("InputName") = rs.Fields(6)
    .Range("InputHN").Value = rs.Fields(7)
    .Range("C12").Value = rs.Fields(8)
     .Range("InputPayer").Value = rs.Fields(9)
     .Range("InputEstimateDateTime").Value = rs.Fields(95)
End With
        Set sCnstr = Nothing
End Sub

Sub PreviousData()

Dim GoToRow As Integer
    Dim sFile As String, sh As Worksheet
    Dim sCnstr As New ADODB.Connection
    Dim rs As New ADODB.Recordset
    Dim sql As String, shtName As String
    Dim arr() As Variant, i As Integer, j As Integer, k As Integer
    Dim strS As String
    
    sFile = "\\10.21.4.97\File Sharing2\DataPricing\All Data Estimated.xlsx"
    shtName = "[Data$]"
        sql = "select top 3 * from " & shtName & " Order By [RefNo] DESC"
        sCnstr.CursorLocation = adUseClient
        sCnstr.Open "Provider=Microsoft.ACE.OLEDB.12.0;" _
    & "Data Source=" & sFile & ";" _
    & "Extended Properties=""Excel 12.0 Xml;HDR=YES"";"
        rs.Open sql, sCnstr

If Worksheets("Input").Range("InputRow") = "" Then
    GoToRow = rs.Fields(0)
    
End If
        
Worksheets("Input").Range("InputRow").Value = GoToRow
DataReview (GoToRow)

End Sub
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30736
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: ค้นหาข้อมูลจากอีก Sheet

#59

Post by snasui »

:D ตัวอย่างการปรับ Code ครับ

Code: Select all

Sub DataReview(ByVal GoToRow As Integer)

    Dim sFile As String, sh As Worksheet
    Dim sCnstr As New ADODB.Connection
    Dim rs As New ADODB.Recordset
    Dim sql As String, shtName As String
    Dim arr() As Variant, i As Integer, j As Integer, k As Integer
    Dim strS As String
    
    sFile = "\\10.21.4.97\File Sharing2\DataPricing\All Data Estimated.xlsx"
    shtName = "[Data$]"
    sql = "select * from " & shtName & " where [No] = " & GoToRow
    sCnstr.CursorLocation = adUseClient
    sCnstr.Open "Provider=Microsoft.ACE.OLEDB.12.0;" _
        & "Data Source=" & sFile & ";" _
        & "Extended Properties=""Excel 12.0 Xml;HDR=YES"";"
    rs.Open sql, sCnstr
    
    With Sheets("input")
        .Range("InputRow").Value = rs.Fields(0)
        .Range("InputRefNo") = rs.Fields(1)
        .Range("InputName") = rs.Fields(6)
        .Range("InputHN").Value = rs.Fields(7)
        .Range("C12").Value = rs.Fields(8)
        .Range("InputPayer").Value = rs.Fields(9)
        .Range("InputEstimateDateTime").Value = rs.Fields(95)
    End With
    Set sCnstr = Nothing
End Sub

Sub PvLine()
    If Range("InputRow").Value = 1 Then Exit Sub
    Call DataReview(Range("InputRow").Value - 1)
End Sub

Sub NxLine()
    Call DataReview(Range("InputRow").Value + 1)
End Sub

Sub PreviousData()

    Dim GoToRow As Integer
    Dim sFile As String, sh As Worksheet
    Dim sCnstr As New ADODB.Connection
    Dim rs As New ADODB.Recordset
    Dim sql As String, shtName As String
    Dim arr() As Variant, i As Integer, j As Integer, k As Integer
    Dim strS As String
    
    sFile = "\\10.21.4.97\File Sharing2\DataPricing\All Data Estimated.xlsx"
    shtName = "[Data$]"
    sql = "select top 3 * from " & shtName & " Order By [RefNo] DESC"
    sCnstr.CursorLocation = adUseClient
    sCnstr.Open "Provider=Microsoft.ACE.OLEDB.12.0;" _
        & "Data Source=" & sFile & ";" _
        & "Extended Properties=""Excel 12.0 Xml;HDR=YES"";"
    rs.Open sql, sCnstr

    Worksheets("Input").Range("InputRow") = rs.Fields(0)

End Sub
หลักการคือเขียนให้ดึงค่าออกมาเพื่อให้ทราบว่าค่า No เป็นค่าใดก่อน จากนั้นเมื่อคลิก Previous หรือ Next ก็ค่อยนำค่า No ไปค้นต่อ

อย่าลืม Assign Macro ให้กับปุ่ม Previous และ Next ก่อนการรัน
wisitsakbenz
Silver
Silver
Posts: 505
Joined: Mon Sep 09, 2019 3:13 pm
Excel Ver: 2013

Re: ค้นหาข้อมูลจากอีก Sheet

#60

Post by wisitsakbenz »

เรียน อาจารย์ Snasui
อย่าลืม Assign Macro ให้กับปุ่ม Previous และ Next ก่อนการรัน
Assign Macro ปุ่ม Previous > PvLine() และปุ่ม ปุ่ม Next > NxLine() ใช่หรือไม่ครับอาจารย์
ถ้าใช่ error ดังภาพ error1 และ error2 ครับ
ถ้า Assign Macro ปุ่ม Previous และปุ่ม Next > Sub PreviousData() จะแสดงผลดัง Video ครับ
หรือทางผมทำผิดพลาดตรงส่วนไหนครับ ขอบคุณครับ
You do not have the required permissions to view the files attached to this post.
Post Reply