Page 2 of 4

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

Posted: Fri Dec 02, 2022 12:46 pm
by snasui
wisitsakbenz wrote: Fri Dec 02, 2022 9:47 am ไม่แน่ใจว่าถูกหรือไม่
:D ค่อย ๆ ถามตอบกันไปครับ

จาก Code ที่ปรับมาถ้าร้นแล้วได้ผลลัพธ์แสดงว่าถูกต้องครับ
wisitsakbenz wrote: Fri Dec 02, 2022 9:47 am สอบถามค่าที่กรอกในแต่ละช่อง จะมีการเก็บอย่างไรครับ
เก็บตามที่ผมแจ้งไปครับ :ard:
snasui wrote: Fri Dec 02, 2022 12:07 am Link ข้อมูลเหล่านั้นไปเรียงให้เป็น Record คล้ายกับข้อมูลปลายทาง โดยมีหัวคอลัมน์กำกับให้เรียบร้อย
ส่วนใดที่ไม่เกี่ยวกับการนำข้อมูลไปวางในปลายทางจะต้องไม่รวมเข้าไปในพื้นที่นั้น ไม่ว่าจะเป็นเรื่อง Time Stamp หรืออื่นใดก็ตาม เพื่อให้ง่าย ข้อมูลปลายทางมีกี่คอลัมน์ให้ Copy หัวคอลัมน์มาใช้เลย ส่วนข้อมูลก็ Link จากไฟล์ปัจจุบันไปวางในตรงตำแหน่งคอลัมน์นั้น ๆ พื้นที่นี้กับด้านล่างต้องเป็นพื้นที่เดียวกัน :ard:

จาก Code ส่วนนี้
wisitsakbenz wrote: Fri Dec 02, 2022 9:47 am [Sheet1$I1:N4]
ได้ปรับตามที่ผมแจ้งไปแล้วหรือไม่ครับ :ard:
snasui wrote: Fri Dec 02, 2022 12:07 am จาก Sheet1$I1:N4 ใน Code หมายถึงพื้นที่จะวางข้อมูลไว้เป็นระเบียบพร้อมนำเข้าไปวางในไฟล์ปลายทางดังที่กล่าวไว้ข้างบนแล้ว เมื่อจะนำไปใช้งานจริงให้ปรับ Sheet1$ เป็นชื่อชีตที่ใช้จริง
Code ที่ผมตอบไปจะนำข้อมูลที่วางไว้เป็นระเบียบแล้วส่งไป Insert ในไฟล์เป้าหมายที่ปิดอยู่ครับ

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

Posted: Fri Dec 02, 2022 1:35 pm
by wisitsakbenz
เรียน อาจารย์ snasui
ข้อมูลปลายทางมีกี่คอลัมน์ให้ Copy หัวคอลัมน์มาใช้เลย ส่วนข้อมูลก็ Link จากไฟล์ปัจจุบันไปวางในตรงตำแหน่งคอลัมน์นั้น ๆ พื้นที่นี้กับด้านล่างต้องเป็นพื้นที่เดียวกัน
> คำอธิบายนี้ไม่ค่อยเข้าใจครับ
[Sheet1$I1:N4]

> ได้ปรับแล้วตามนี้

Code: Select all

            " Database=" & ThisWorkbook.FullName & ";Readonly=False].[Data$A2:CR100000]"

Code: Select all

Sub SaveData()

    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
    
    sFile = "\\10.21.4.97\File Sharing2\DataPricing\All Data Estimated.xlsx"
    shtName = "[Data$]"
    strSql = "INSERT INTO [sFile$]" & _
            " SELECT * FROM [Excel 12.0 Macro;HDR=Yes;" & _
            " Database=" & ThisWorkbook.FullName & ";Readonly=False].[Data$A2:CR100000]" & _
           " Database=" & ThisWorkbook.FullName & ";Readonly=False].[Data$HN,Data$Name,Data$DOB,Data$Payer] value [Sheets(1).(""InputHN"").value,Sheets(1).(""InputName"").value,Sheets(1).(""C12"").value,Sheets(1).(""InputPayer"").value]"

    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
    
    Set sCnstr = Nothing
    Set rs = Nothing
End Sub

หรือต้องปรับ Code อย่างไรครับ
ขอคำแนะนำจากอาจารย์ด้วยครับ ขอบคุณครับ

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

Posted: Fri Dec 02, 2022 1:51 pm
by snasui
wisitsakbenz wrote: Fri Dec 02, 2022 1:35 pm ข้อมูลปลายทางมีกี่คอลัมน์ให้ Copy หัวคอลัมน์มาใช้เลย ส่วนข้อมูลก็ Link จากไฟล์ปัจจุบันไปวางในตรงตำแหน่งคอลัมน์นั้น ๆ พื้นที่นี้กับด้านล่างต้องเป็นพื้นที่เดียวกัน
> คำอธิบายนี้ไม่ค่อยเข้าใจครับ
:D งานนี้เป็นการนำค่าไป Insert ในไฟล์ปลายทาง คำว่าข้อมูลปลายทางคือไฟล์ปลายทางครับ
wisitsakbenz wrote: Fri Dec 02, 2022 1:35 pm > ได้ปรับแล้วตามนี้
CODE: SELECT ALL

" Database=" & ThisWorkbook.FullName & ";Readonly=False].[Data$A2:CR100000]"
ปรับยังไม่ถูกครับ

ข้อมูลนี้คือข้อมูลต้นทางที่จะนำไปวางยังไฟล์ปลายทาง งานนี้มีกี่รายการก็เอาไปแค่พื้นที่นั้นไม่ใช่เป็น 100000 บรรทัดแน่นอน เข้าใจว่าทำทีละรายการก็จะเป็นแค่ 1 บรรทัดรวมหัวคอลัมน์ก็เป็น 2 บรทัด บรรทัดแรกคือ หัวคอลัมน์ บรรทัดที่ 2 คือข้อมูล

กรุณทำความเข้าใจคำว่า ต้นทาง ปลายทาง ว่าหมายถึงอะไร ทบทวนสิ่งที่ผมพูดถึงการ Link ข้อมูลมาใช้เป็นข้อมูลต้นทาง ข้อมูลนี้คือบรรทัดที่ 2 ตามด้านบน ส่วนบรรทัดแรกคือหัวคอลัมน์จะต้องเหมือนกันทุกประการและต้องมีจำนวนคอลัมน์เท่ากับหัวคอลัมน์ของข้อมูลปลายทางครับ

Code ที่เขียนมาติดปัญหาตรงไหน อย่างไร กรุณาอธิบายแจ้งมาด้วยทุกครั้งครับ

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

Posted: Fri Dec 02, 2022 2:44 pm
by wisitsakbenz
เรียน อาจารย์ snasui

ได้ปรับแก้ Code แล้ว หลักการของ SQL การ insert ข้อมูลจะเป็นไปตามด้านล่าง

Code: Select all

INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);
ซึ่งทางผมได้ลองเขียน Code แต่ยังติดปัญหาในส่วนนี้ ขอคำแนะนำอาจารย์ด้วยครับ ขอบคุณครับ

Code: Select all

'----other Code-----
    strSql = "INSERT INTO [sFile$]" & _
            " SELECT * FROM [Excel 12.0 Macro;HDR=Yes;" & _
            " Database=" & ThisWorkbook.FullName & ";Readonly=False].[Data$A1:CR2]" & _
            " Database=" & ThisWorkbook.FullName & ";Readonly=False].[Data$HN,Data$Name,Data$DOB,Data$Payer] values [Sheets(1).(""InputHN"").value,Sheets(1).(""InputName"").value,Sheets(1).(""C12"").value,Sheets(1).(""InputPayer"").value]"

    sCnstr.CursorLocation = adUseClient
'----other Code-----

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

Posted: Fri Dec 02, 2022 3:10 pm
by snasui
:D ไฟล์โปรแกรมที่แนบมาไม่มีชีตที่ชื่อว่า Data

พื้นที่ A1:CR2 ก็ไม่ใช่พื้นที่สำหรับข้อมูลที่จะนำไปใส่ในไฟล์ปลายทางครับ

หากยังถามมาเช่นนี้เหมือนเดิมในโพสต์ถัดไปผมจะถือว่าสิ้นสุดการให้คำตอบ ถือว่าไม่ได้ทำความเข้าใจในสิ่งที่ผมให้คำแนะนำไปแต่อย่างใดครับ

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

Posted: Fri Dec 02, 2022 3:30 pm
by wisitsakbenz
เรียน อาจารย์ snasui

ต้องขอโทษอาจารย์ด้วยครับ ผมไม่ค่อยมีความรู้เรื่องนี้เท่าไหร่ พยายามศึกษาที่อาจารย์ตอบกลับมาครับ

Code: Select all

 " Database=" & ThisWorkbook.FullName & ";Readonly=False].[Input$A6:H22]"
ผมแก้ไขถูกต้องหรือไม่ครับอาจารย์ ขอบคุณครับ

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

Posted: Fri Dec 02, 2022 3:36 pm
by snasui
:D ในไฟล์โปรแกรมที่แนบมาช่วง Input$A6:H22 มีข้อมูลอะไร A6:H6 คือหัวคอล้มน์ มีค่าเดียวกับหัวคอลัมน์ไนฟล์ปลายทางทุกประการแล้วยังครับ :?:

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

Posted: Fri Dec 02, 2022 3:46 pm
by wisitsakbenz
เรียน อาจารย์ snasui

ถ้าผมเข้าใจไม่ผิด ต้องเพิ่ม Row 26 ใช่หรือไม่ครับ และ ปรับ Code ตามด้านล่าง
ใช่ หรือไม่ครับ อาจารย์ ขอบคุณครับ

Code: Select all

 " Database=" & ThisWorkbook.FullName & ";Readonly=False].[Input$A26:CR27]"

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

Posted: Fri Dec 02, 2022 3:56 pm
by snasui
:D ที่ทำมานี้ผมได้แนะนำไปต้้งแต่โพสต์ที่ 19 แล้วครับ ไม่จำเป็นต้องเจาะจงว่าเป็นบรรทัดไหน เพียงแต่จะต้องมีลักษณะเช่นที่ทำมานี้ครับ

ที่เหลือคือต้องเอาค่ามาใส่ในบรรทัดที่ 27 ค่าที่จะนำมาใส่ก็อยู่ในพื้นที่บรรทัดที่ 1:25 และต้องใส่ให้ตรงคอลัมน์ จะคีย์เองหรือเขียน Code ให้นำมาวางหรือจะ Link มาด้วยสูตรก็แล้วแต่ถนัด เมื่อทำครบแล้วก็ลองสั่งรันดูครับ

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

Posted: Fri Dec 02, 2022 4:37 pm
by wisitsakbenz
เรียน อาจารย์ snasui

1.ผมได้ลองเขียน Code เพื่อเก็บข้อมูลที่ใส่ไปในบรรทัดที่ 1-25 ไว้ที่บรรทัดที่ 27 (คลิกปุ่ม Getdata)
แล้วลอง คลิกปุ่ม Save แล้ว error ครับ ไม่แน่ใจว่าต้องปรับ Code อย่างไรครับ ขอบคุณครับ

2.เลข Ref No ช่อง F6 จะไม่ใส่ค่า ระบบจะ Generate ให้อัตโนมัติ
โดยกำหนด = ปี-เดือน-วัน-Running Number และจะ run ไปเรื่อยๆ ครับ
โดยที่ปี = ปีปัจุบัน - 2000
เช่นปี 2022 เดือน พฤศจิกายน วันที่ 20
เลข Refno ที่ได้ = 22-11-20-0001
ถ้าเป็นวันใหม่จะเริ่ม 0001 ใหม่ครับ อาจารย์พอมีวิธีแนะนำหรือไม่ครับ ขอบคุณครับ

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

Posted: Fri Dec 02, 2022 6:06 pm
by snasui
:D ติดที่ส่วนไหนกรุณาระบุรายละเอียดพร้อมแสดง Code พร้อมคำฟ้อง Error มาด้วยจะได้เข้าถังปัญหาโดยไวครับ

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

Posted: Sat Dec 03, 2022 10:05 am
by wisitsakbenz
เรียน อาจารย์ snasui

ติกปัญหา
1.ในส่วนของการ insert ข้อมูลเข้าไปใน server โดยผมได้ลองเขียน Code เพื่อเก็บข้อมูลที่ใส่ไปในบรรทัดที่ 1-25 ไว้ที่บรรทัดที่ 27 (คลิกปุ่ม Getdata) แล้วลอง คลิกปุ่ม Save แล้ว error ครับ ไม่แน่ใจว่าต้องปรับ Code อย่างไรครับ ขอบคุณครับ

Code: Select all

Sub SaveData()

    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
    
     sFile = "\\10.21.4.97\File Sharing2\DataPricing\All Data Estimated.xlsx"
    shtName = "[Data$]"
    strSql = "INSERT INTO [sFile$]" & _
            " SELECT * FROM [Excel 12.0 Macro;HDR=Yes;" & _
            " Database=" & ThisWorkbook.FullName & ";Readonly=False].[Input$A26:CR27]"


    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
    
    Set sCnstr = Nothing
    Set rs = Nothing
End Sub
2.ในส่วนของ input data
เลข Ref No ช่อง F6 จะไม่ใส่ค่า ระบบจะ Generate ให้อัตโนมัติ
โดยกำหนด = ปี-เดือน-วัน-Running Number และจะ run ไปเรื่อยๆ ครับ
โดยที่ปี = ปีปัจุบัน - 2000
เช่นปี 2022 เดือน พฤศจิกายน วันที่ 20
เลข Refno ที่ได้ = 22-11-20-0001
ถ้าเป็นวันใหม่จะเริ่ม 0001 ใหม่ครับ อาจารย์พอมีวิธีแนะนำหรือไม่ครับ ขอบคุณครับ

Code: Select all

Sub Savetofile_Click()

Dim r As Integer
Dim i As Integer

i = 1

r = Sheets("input").Cells(Rows.Count, 1).End(xlUp).Row + 1

Sheets("input").Cells(r, 2).Value = Day(Date)
Sheets("input").Cells(r, 3).Value = Month(Date)
Sheets("input").Cells(r, 4).Value = Year(Date) - 2000
Sheets("input").Cells(r, 5).Value = i
i = i + 1

Sheets("input").Cells(r, 2).NumberFormat = "00"
Sheets("input").Cells(r, 3).NumberFormat = "00"
Sheets("input").Cells(r, 5).NumberFormat = "0000"

Refno = Sheets("input").Cells(r, 4).Text & "-" & Sheets("input").Cells(r, 3).Text & "-" & Sheets("input").Cells(r, 2).Text & "-" & Sheets("input").Cells(r, 5).Text
Sheets("input").Cells(r, 1).Value = Refno

Sheets("Input").Range("InputRefNo") = Refno

Sheets("input").Cells(r, 6).Value = Sheets("Input").Range("InputName").Value
Sheets("input").Cells(r, 7).Value = Sheets("Input").Range("InputHN").Value
Sheets("input").Cells(r, 8).Value = Sheets("Input").Range("C12").Value
Sheets("input").Cells(r, 9).Value = Sheets("Input").Range("InputPayer").Value


Sheets("Input").Range("InputEstimateDateTime").Value = Now
Sheets("input").Cells(r, 95).Value = Sheets("Input").Range("InputEstimateDateTime").Value

    
    
End Sub
[Code]

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

Posted: Sat Dec 03, 2022 10:22 am
by snasui
:D กรุณาถามและแก้ไขปัญหาให้ผ่านไปที่ละเรื่องครับ

สำหรับ SQL ให้สลับตำแหน่ง Statement กันดังภาพ ข้อความในสี่เหลี่ยมควรเป็น [Data$]

rs.open sql... ควรเป็น rs.open strsql...

ตรวจสอบตัวแปรว่ากำหนดและเรียกใช้ด้วยค่าเดียวกันเสมอครับ

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

Posted: Sat Dec 03, 2022 12:36 pm
by wisitsakbenz
เรียน อาจารย์ snasui

ได้แล้วครับอาจารย์ ปัญหาต่อมาคือ
เมื่อกรอกข้อมูล Sheet input แล้วคลิกปุ่ม "Save" เลข Ref No ช่อง F6 จะไม่ใส่ค่า ระบบจะ Generate ให้อัตโนมัติ
กำหนด
1. RefNo = ปี-เดือน-วัน-Running Number และจะ run ไปเรื่อยๆ ครับ
โดยที่ปี = ปีปัจุบัน - 2000
เช่นปี 2022 เดือน พฤศจิกายน วันที่ 20
เลข Refno ที่ได้ = 22-11-20-0001
2. ถ้าเป็นวันใหม่จะเริ่ม 0001 ใหม่ครับ
3. ตรวจสอบเลข RefNo ใน All Data Estimated > Column "A" เรียงต่อจากเลขเดิม
ต้องปรับสูตรอย่างไรครับ อาจารย์พอมีวิธีแนะนำหรือไม่ครับ ขอบคุณครับ

Code: Select all

Sub Savetofile_Click()

Dim r As Integer
Dim i As Integer

i = 1

r = Sheets("input").Cells(Rows.Count, 1).End(xlUp).Row + 1

Sheets("input").Cells(r, 2).Value = Day(Date)
Sheets("input").Cells(r, 3).Value = Month(Date)
Sheets("input").Cells(r, 4).Value = Year(Date) - 2000
Sheets("input").Cells(r, 5).Value = i
i = i + 1

Sheets("input").Cells(r, 2).NumberFormat = "00"
Sheets("input").Cells(r, 3).NumberFormat = "00"
Sheets("input").Cells(r, 5).NumberFormat = "0000"

Refno = Sheets("input").Cells(r, 4).Text & "-" & Sheets("input").Cells(r, 3).Text & "-" & Sheets("input").Cells(r, 2).Text & "-" & Sheets("input").Cells(r, 5).Text
Sheets("input").Cells(r, 1).Value = Refno

Sheets("Input").Range("InputRefNo") = Refno

Sheets("input").Cells(r, 6).Value = Sheets("Input").Range("InputName").Value
Sheets("input").Cells(r, 7).Value = Sheets("Input").Range("InputHN").Value
Sheets("input").Cells(r, 8).Value = Sheets("Input").Range("C12").Value
Sheets("input").Cells(r, 9).Value = Sheets("Input").Range("InputPayer").Value


Sheets("Input").Range("InputEstimateDateTime").Value = Now
Sheets("input").Cells(r, 95).Value = Sheets("Input").Range("InputEstimateDateTime").Value
   
    
End Sub

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

Posted: Sat Dec 03, 2022 2:51 pm
by snasui
wisitsakbenz wrote: Sat Dec 03, 2022 12:36 pm 3. ตรวจสอบเลข RefNo ใน All Data Estimated > Column "A" เรียงต่อจากเลขเดิม
:D ดึงค่านี้ออกมาให้ได้ก่อน ดึงมาแล้วจะเก็บไว้ในเซลล์หรือในตัวแปรก็แล้วแต่สะดวกครับ

จากกระทู้นี้ทราบแล้วว่าดึงค่าจากไฟล์ที่ปิดอยู่ออกมาได้อย่างไร ให้ใช้ Code ลักษณะนั้นเพื่อดึงเอาค่าในคอลัมน์ A รายการสุดท้ายออกมา

โพสต์ที่เกี่ยวข้องในการดึงข้อมูล viewtopic.php?t=19598#p114172

ตัวอย่างการหารายการสุดท้าย https://stackoverflow.com/questions/519 ... ble-in-sql

ทำส่วนนี้ให้ได้ก่อนแล้วค่อยนำค่าที่ได้ใปใช้งานต่อไปครับ

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

Posted: Mon Dec 05, 2022 9:42 am
by wisitsakbenz
เรียน อาจารย์ snasui

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

Code: Select all

Sub Savetofile_Click()
 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
    sFile = "\\10.21.4.97\File Sharing2\DataPricing\All Data Estimated.xlsx"
    shtName = "[Data$]"
    sql = "select * from " & shtName & " ' Order By 'RefNo' DESC LIMIT 1"
    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
    myReader = sql.ExecuteReader();
   while (myReader.Read())
    {
        Worksheets("input").Range("L22").Value = (myReader["RefNo"].ToString());
    }

    Set sCnstr = Nothing
    Set rs = Nothing 

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

Posted: Mon Dec 05, 2022 10:22 am
by snasui
:D ตัวอย่างการปรับ Code ครับ

Code: Select all

'Other code...
sql = "select top 1 * 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
MsgBox rs.Fields(0).Value
'    myReader = sql.ExecuteReader();
'   While (myReader.Read())
'    {
'        Worksheets("input").Range("L22").Value = (myReader["RefNo"].ToString());
'    }

Set sCnstr = Nothing
'Other code...
จะนำค่า RefNo มาแสดงใน MsgBox ลองนำไปปรับใช้ดูครับ

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

Posted: Mon Dec 05, 2022 2:34 pm
by wisitsakbenz
เรียน อาจารย์ snasui

ตอนนี้สามารถเก็บเลข RefNo ต่อกันได้เเล้วแต่ติดปัญหาคือ
ถ้าเป็นวันใหม่จะเริ่ม 1 ใหม่ครับ ต้องปรับ Code อย่างไรครับ ขอบคุณครับ

Code: Select all

'Other code...
r = Sheets("input").Cells(Rows.Count, 1).End(xlUp).Row + 1

Sheets("input").Cells(r, 2).Value = Day(Date)
Sheets("input").Cells(r, 3).Value = Month(Date)
Sheets("input").Cells(r, 4).Value = Year(Date) - 2000
 Sheets("input").Cells(r, 5).Value = rs.Fields(4).Value + 1
 
 Sheets("input").Cells(r, 2).NumberFormat = "00"
Sheets("input").Cells(r, 3).NumberFormat = "00"
Sheets("input").Cells(r, 5).NumberFormat = "0000"

Refno = Sheets("input").Cells(r, 4).Text & "-" & Sheets("input").Cells(r, 3).Text & "-" & Sheets("input").Cells(r, 2).Text & "-" & Sheets("input").Cells(r, 5).Text
Sheets("input").Cells(r, 1).Value = Refno

Sheets("Input").Range("InputRefNo") = Refno
'Other code...

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

Posted: Mon Dec 05, 2022 3:12 pm
by snasui
:D ตัวอย่างการปรับ Code ครับ

Code: Select all

'Other code...
With Sheets("input")
    r = .Cells(Rows.Count, 1).End(xlUp).Row + 1
  
    .Cells(r, 2).Value = Day(Date)
    .Cells(r, 3).Value = Month(Date)
    .Cells(r, 4).Value = Year(Date) - 2000
    .Cells(r, 2).NumberFormat = "00"
    .Cells(r, 3).NumberFormat = "00"
    .Cells(r, 5).NumberFormat = "0000"
    
    refno = .Cells(r, 4).Text & "-" & .Cells(r, 3).Text & "-" & .Cells(r, 2).Text
    
    If VBA.Left(rs.Fields(0).Value, 8) = refno Then
        .Cells(r, 5).Value = rs.Fields(4).Value + 1
    Else
        .Cells(r, 5).Value = 1
    End If
    refno = refno & "-" & VBA.Format(.Cells(r, 5).Value, "0000")
    .Cells(r, 1).Value = refno
    .Range("InputRefNo") = refno
End With
'Other code
กรุณาสังเกตการใช้ With...End With เพื่อเขียน Code ได้สั้นลงครับ

ระมัดระวังเรื่องดึงรายการสุดท้าย ค่าในคอลัมนนั้นควรเรียงกันจากน้อยไปหามาก ไม่เช่นนั้นจะดึงมาผิดบรรทัดได้ครับ

เช่น sql = "select top 1 * from " & shtName & " Order By [Number] DESC" หมายถึง คอลัมน์ Number จะต้องมีการเรียงจากน้อยไปหามากเท่านั้น ปกติเราจะใช้ Id ของรายการมาหารายการสุดท้าย เพราะ Id จะเรียงจากน้อยไปหามากเสมอ ไม่ใช่ Number ของงานนี้ที่ขึ้นกับวันที่ครับ

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

Posted: Tue Dec 06, 2022 11:31 am
by wisitsakbenz
เรียน อาจารย์ Snasui
กรุณาสังเกตการใช้ With...End With เพื่อเขียน Code ได้สั้นลงครับ
ขอบคุณสำหรับคำแนะนำครับ และอยากสอบถามอาจารย์เพิ่มเติมครับ

ต้องการแสดงข้อมูลก่อนหน้า และถัดไป ผมได้ลองเขียน 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 = "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
    
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 * 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.Range("A1000000").End(xlUp).Row
Else
    GoToRow = rs.Fields.Range("InputRow").Value - 1

End If

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

End Sub