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
ไม่แน่ใจว่าถูกหรือไม่

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

งานนี้เป็นการนำค่าไป 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

ไฟล์โปรแกรมที่แนบมาไม่มีชีตที่ชื่อว่า 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

ในไฟล์โปรแกรมที่แนบมาช่วง 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

ที่ทำมานี้ผมได้แนะนำไปต้้งแต่
โพสต์ที่ 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

ติดที่ส่วนไหนกรุณาระบุรายละเอียดพร้อมแสดง 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

กรุณาถามและแก้ไขปัญหาให้ผ่านไปที่ละเรื่องครับ
สำหรับ 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" เรียงต่อจากเลขเดิม

ดึงค่านี้ออกมาให้ได้ก่อน ดึงมาแล้วจะเก็บไว้ในเซลล์หรือในตัวแปรก็แล้วแต่สะดวกครับ
จากกระทู้นี้ทราบแล้วว่าดึงค่าจากไฟล์ที่ปิดอยู่ออกมาได้อย่างไร ให้ใช้ 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

ตัวอย่างการปรับ 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

ตัวอย่างการปรับ 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