: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: 30750
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

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

#21

Post 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 ในไฟล์เป้าหมายที่ปิดอยู่ครับ
wisitsakbenz
Silver
Silver
Posts: 512
Joined: Mon Sep 09, 2019 3:13 pm
Excel Ver: 2013

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

#22

Post 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 อย่างไรครับ
ขอคำแนะนำจากอาจารย์ด้วยครับ ขอบคุณครับ
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30750
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

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

#23

Post 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 ที่เขียนมาติดปัญหาตรงไหน อย่างไร กรุณาอธิบายแจ้งมาด้วยทุกครั้งครับ
wisitsakbenz
Silver
Silver
Posts: 512
Joined: Mon Sep 09, 2019 3:13 pm
Excel Ver: 2013

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

#24

Post 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-----
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30750
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

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

#25

Post by snasui »

:D ไฟล์โปรแกรมที่แนบมาไม่มีชีตที่ชื่อว่า Data

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

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

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

#26

Post by wisitsakbenz »

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

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

Code: Select all

 " Database=" & ThisWorkbook.FullName & ";Readonly=False].[Input$A6:H22]"
ผมแก้ไขถูกต้องหรือไม่ครับอาจารย์ ขอบคุณครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 30750
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

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

#27

Post by snasui »

:D ในไฟล์โปรแกรมที่แนบมาช่วง Input$A6:H22 มีข้อมูลอะไร A6:H6 คือหัวคอล้มน์ มีค่าเดียวกับหัวคอลัมน์ไนฟล์ปลายทางทุกประการแล้วยังครับ :?:
wisitsakbenz
Silver
Silver
Posts: 512
Joined: Mon Sep 09, 2019 3:13 pm
Excel Ver: 2013

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

#28

Post by wisitsakbenz »

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

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

Code: Select all

 " Database=" & ThisWorkbook.FullName & ";Readonly=False].[Input$A26:CR27]"
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30750
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

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

#29

Post by snasui »

:D ที่ทำมานี้ผมได้แนะนำไปต้้งแต่โพสต์ที่ 19 แล้วครับ ไม่จำเป็นต้องเจาะจงว่าเป็นบรรทัดไหน เพียงแต่จะต้องมีลักษณะเช่นที่ทำมานี้ครับ

ที่เหลือคือต้องเอาค่ามาใส่ในบรรทัดที่ 27 ค่าที่จะนำมาใส่ก็อยู่ในพื้นที่บรรทัดที่ 1:25 และต้องใส่ให้ตรงคอลัมน์ จะคีย์เองหรือเขียน Code ให้นำมาวางหรือจะ Link มาด้วยสูตรก็แล้วแต่ถนัด เมื่อทำครบแล้วก็ลองสั่งรันดูครับ
wisitsakbenz
Silver
Silver
Posts: 512
Joined: Mon Sep 09, 2019 3:13 pm
Excel Ver: 2013

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

#30

Post 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 ใหม่ครับ อาจารย์พอมีวิธีแนะนำหรือไม่ครับ ขอบคุณครับ
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30750
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

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

#31

Post by snasui »

:D ติดที่ส่วนไหนกรุณาระบุรายละเอียดพร้อมแสดง Code พร้อมคำฟ้อง Error มาด้วยจะได้เข้าถังปัญหาโดยไวครับ
wisitsakbenz
Silver
Silver
Posts: 512
Joined: Mon Sep 09, 2019 3:13 pm
Excel Ver: 2013

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

#32

Post 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]
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30750
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

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

#33

Post by snasui »

:D กรุณาถามและแก้ไขปัญหาให้ผ่านไปที่ละเรื่องครับ

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

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

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

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

#34

Post 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
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30750
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

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

#35

Post 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

ทำส่วนนี้ให้ได้ก่อนแล้วค่อยนำค่าที่ได้ใปใช้งานต่อไปครับ
wisitsakbenz
Silver
Silver
Posts: 512
Joined: Mon Sep 09, 2019 3:13 pm
Excel Ver: 2013

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

#36

Post 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 
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30750
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

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

#37

Post 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 ลองนำไปปรับใช้ดูครับ
wisitsakbenz
Silver
Silver
Posts: 512
Joined: Mon Sep 09, 2019 3:13 pm
Excel Ver: 2013

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

#38

Post 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...
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30750
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

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

#39

Post 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 ของงานนี้ที่ขึ้นกับวันที่ครับ
wisitsakbenz
Silver
Silver
Posts: 512
Joined: Mon Sep 09, 2019 3:13 pm
Excel Ver: 2013

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

#40

Post 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
You do not have the required permissions to view the files attached to this post.
Post Reply