Page 1 of 1
รบกวนดู เรื่องการแสดงข้อมูลจากฐานข้อมูลตามเงื่อนไขด้วย VBA
Posted: Fri Nov 25, 2011 1:14 pm
by snoopy1150
เรียน อาจารย์ ครับ
จาก
http://snasui.blogspot.com/2011/06/vba_26.html
ที่ อาจารย์เคยได้เขียนไว้ ผมลองนำมาแก้บางจุด vba สามารถรันได้ แต่ข้อมูลไม่ show ครับ
จึงรบกวน อาจารย์ ตรวจสอบที่ครับ
Re: รบกวนดู เรื่องการแสดงข้อมูลจากฐานข้อมูลตามเงื่อนไขด้วย V
Posted: Fri Nov 25, 2011 1:43 pm
by bank9597

บุคคลที่ได้ชื่อเป็นอาจารยื ท่านใช้ชื่อว่า "คนควน" น่ะครับ
ส่วนผม Bank9597 คือศิษย์ของอาจารย์อีกทีนึงครับ ที่ผมอ้างชื่ออาจารย์บ่อยๆในเว็บอื่น นั่นก็คือ "คนควน" นั่นเองครับ
ส่วนโค๊ดที่มีปัญหานั่น ในโค๊ดยังผิดอยู่ครับ หากจะเลือกรายการแล้วข้อมูลแสดงเลยโดยไม่ต้องกดปุ่ม ก็จะต้องเพิ่มเติมโค๊ดลงในชีทนั้นด้วยครับ
ดูจากไฟล์ที่แนบมาให้นั้น ไม่ได้บันทึกแบบใช้มาโคร ฉะนั้นก้เป็นเหตุผลหนึ่งที่รันโค๊ดไม่ได้ครับ
ถ้ามาถามในเว็บแห่งนี้ ก็จะเป็นหน้าที่ของอาจารย์ให้คำตอบ ซึ่งจะให้คำตอบได้ดีกว่าผมมากมายหลายเท่าครับ
และอยากบอกว่าคิดถุกที่สุดที่มาตั้งคำถามในเว็บแห่งนี้ครับ

Re: รบกวนดู เรื่องการแสดงข้อมูลจากฐานข้อมูลตามเงื่อนไขด้วย V
Posted: Fri Nov 25, 2011 1:46 pm
by snoopy1150

ขอบคุณครับคุณ Bank9597 เจอกันอีกแล้วน่ะครับ งั้นผมขอถามว่าผมต้องเพิ่มหรือปก้ไขส่วนไหนบ้างครับ
Re: รบกวนดู เรื่องการแสดงข้อมูลจากฐานข้อมูลตามเงื่อนไขด้วย V
Posted: Fri Nov 25, 2011 1:49 pm
by snasui
bank9597 wrote:ที่ผมอ้างชื่ออาจารย์บ่อยๆในเว็บอื่น นั่นก็คือ "คนควน" นั่นเองครับ
ถ้างดเว้นการอ้างถึงได้ก็จะดีครับ อย่าพยายามอ้างถึงเพื่อความน่าเชื่อถือของข้อมูลครับ เพราะมีโอกาสที่ผมจะถูกหมั่นไส้ได้โดยง่าย
สำหรับการเขียน Code ถ้ายังไม่แม่นก็ควรจะค่อย ๆ เรียนรู้ไปครับ Code ตาม Link นั้นไม่ง่ายนัก เพราะใช้ Array เข้ามาประกอบอยู่ด้วย การทำเช่นตัวอย่างไฟล์ที่แนบมาไม่จำเป็นต้องใช้ VBA ครับ
สำหรับ VBA ผมปรับมาให้ดูเป็นตัวอย่างตามด้านล่างครับ
Code: Select all
Option Explicit
Option Base 1
Sub ShowEmp()
Dim a() As Variant, lng As Long
Dim r As Range, rAll As Range
Dim rt As Range, rl As Long
Application.EnableEvents = False
Application.ScreenUpdating = False
rl = Rows.Count
With Worksheets("2703")
Set rAll = .Range("F2", .Range("F" & rl).End(xlUp))
End With
For Each r In rAll
If r = Worksheets("From").Range("A2") Then
lng = lng + 1
ReDim Preserve a(5, lng)
a(1, lng) = lng
a(2, lng) = r.Offset(0, -5)
a(3, lng) = r.Offset(0, -4)
a(4, lng) = r.Offset(0, -3)
a(5, lng) = r.Offset(0, -2)
End If
Next r
If lng > 0 Then
With Worksheets("From")
Set rt = .Range("B4", .Range("F" & lng - 1 + 4))
If .Range("B4") <> "" Then
.Range("B4", .Range("B" & rl).End(xlUp).Offset(0, 4)).ClearContents
End If
.Range("B4:F4").Copy
rt.PasteSpecial xlPasteFormats
rt = Application.Transpose(a)
.Range(.Range("B3").End(xlDown).Offset(1, 0), .Range("F" & rl)).ClearContents
End With
Else
MsgBox "Data not found."
End If
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
Re: รบกวนดู เรื่องการแสดงข้อมูลจากฐานข้อมูลตามเงื่อนไขด้วย V
Posted: Fri Nov 25, 2011 2:07 pm
by bank9597

โอ๊ว....ไม่ต้องห่วงครับ ทุกอย่างอยู่ในขอบเขตที่เคยกล่าวไว้แล้วครับ

Re: รบกวนดู เรื่องการแสดงข้อมูลจากฐานข้อมูลตามเงื่อนไขด้วย V
Posted: Fri Nov 25, 2011 3:27 pm
by snoopy1150
ขอบคุณครับ แต่มีบางข้อมูลที่ดึงออกมา show ยังไม่ค่อยตรงอ่ะครับ ถ้าจะแก้ สูตรที่ดึงข้อมูลมา Show ต้องแก้ตรงไหนครับ
Re: รบกวนดู เรื่องการแสดงข้อมูลจากฐานข้อมูลตามเงื่อนไขด้วย V
Posted: Fri Nov 25, 2011 3:38 pm
by snasui

ช่วยระบุตำแหน่งที่บอกว่าไม่ตรงครับ ค่าที่ถูกควรเป็นค่าใด กรณีเป็น Error ช่วยจับภาพ Error นั้นมาแสดงด้วยครับ
Re: รบกวนดู เรื่องการแสดงข้อมูลจากฐานข้อมูลตามเงื่อนไขด้วย V
Posted: Fri Nov 25, 2011 4:06 pm
by bank9597

ลองตามนี้ครับ ว่าใช่หรือไม่
Code: Select all
Option Explicit
Option Base 1
Sub ShowEmp()
Dim a() As Variant, lng As Long
Dim r As Range, rAll As Range
Dim rt As Range, rl As Long
Application.EnableEvents = False
Application.ScreenUpdating = False
rl = Rows.Count
With Worksheets("2703")
Set rAll = .Range("F2", .Range("F" & rl).End(xlUp))
End With
For Each r In rAll
If r = Worksheets("From").Range("A2") Then
lng = lng + 1
ReDim Preserve a(5, lng)
a(1, lng) = lng
a(2, lng) = r.Offset(0, -4)
a(3, lng) = r.Offset(0, -3)
a(4, lng) = r.Offset(0, -2) And r.Offset(0, -1)
a(5, lng) = r.Offset(0, 0)
End If
Next r
If lng > 0 Then
With Worksheets("From")
Set rt = .Range("B4", .Range("F" & lng - 1 + 4))
If .Range("B4") <> "" Then
.Range("B4", .Range("B" & rl).End(xlUp).Offset(0, 4)).ClearContents
End If
.Range("B4:F4").Copy
rt.PasteSpecial xlPasteFormats
rt = Application.Transpose(a)
.Range(.Range("B3").End(xlDown).Offset(1, 0), .Range("F" & rl)).ClearContents
End With
Else
MsgBox "Data not found."
End If
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
Re: รบกวนดู เรื่องการแสดงข้อมูลจากฐานข้อมูลตามเงื่อนไขด้วย V
Posted: Fri Nov 25, 2011 4:13 pm
by snasui
Code: Select all
a(4, lng) = r.Offset(0, -2) And r.Offset(0, -1)
มีความหมายว่าอย่างไรครับ

Re: รบกวนดู เรื่องการแสดงข้อมูลจากฐานข้อมูลตามเงื่อนไขด้วย V
Posted: Fri Nov 25, 2011 4:25 pm
by bank9597

นั่นไง ผมคงจะโดนเชือดคอโชว์ซะเเล้ว
อธิบายตามความเข้าใจของตัวเองเป็นหลักน่ะครับ ถูกหรือผิดหลักอย่างไร รบกวนอาจารย์ชี้แนะอีกครั้งนึงน่ะครับ
Code: Select all
a(4, lng) = r.Offset(0, -2) And r.Offset(0, -1)
ในชีท FORM คอลัมน์ที่ 4 (a(4, lng)) จะดึงข้อมูลมาแสดงข้อมูลในชีท "2703" โดยเลือกคอลัมน์ที่ถัดจากคอลัมน์ "Location" ไปทางซ้าย 2 คอลัมน์(r.Offset(0, -2)) หรือลำดับที่ 2 ก็ได้ ส่วน And r.Offset(0, -1) คือต้องการให้แสดงข้อมูลถัดจากคอลัมน์ "Location" ไปทางซ้าย 1 คอลัมน์ โดยให้ข้อมูล 2 ส่วนนี้แสดงในเซลล์เดียวกันครับ
เบื้องต้นอธิบายได้แค่นี้ ไม่รู้จะถูกต้องตามที่ต้องการไหม และไม่รู้ถูกต้องตามหลักการที่อาจารย์ท่านได้ถามไหม

Re: รบกวนดู เรื่องการแสดงข้อมูลจากฐานข้อมูลตามเงื่อนไขด้วย V
Posted: Fri Nov 25, 2011 4:36 pm
by snoopy1150
ขอบคุณ คุณ Bank9597 ครับ
Code นี้ใช้ได้เลยครับ แต่ข้อมูลในช่อง " Plant\Location " ของ "From" ก็ยัง show ข้อมูลเพี้ยนอยู่อ่ะครับ
Re: รบกวนดู เรื่องการแสดงข้อมูลจากฐานข้อมูลตามเงื่อนไขด้วย V
Posted: Fri Nov 25, 2011 4:49 pm
by snasui
bank9597 wrote: 
นั่นไง ผมคงจะโดนเชือดคอโชว์ซะเเล้ว
อธิบายตามความเข้าใจของตัวเองเป็นหลักน่ะครับ ถูกหรือผิดหลักอย่างไร รบกวนอาจารย์ชี้แนะอีกครั้งนึงน่ะครับ
Code: Select all
a(4, lng) = r.Offset(0, -2) And r.Offset(0, -1)
ในชีท FORM คอลัมน์ที่ 4 (a(4, lng)) จะดึงข้อมูลมาแสดงข้อมูลในชีท "2703" โดยเลือกคอลัมน์ที่ถัดจากคอลัมน์ "Location" ไปทางซ้าย 2 คอลัมน์(r.Offset(0, -2)) หรือลำดับที่ 2 ก็ได้ ส่วน And r.Offset(0, -1) คือต้องการให้แสดงข้อมูลถัดจากคอลัมน์ "Location" ไปทางซ้าย 1 คอลัมน์ โดยให้ข้อมูล 2 ส่วนนี้แสดงในเซลล์เดียวกันครับ
เบื้องต้นอธิบายได้แค่นี้ ไม่รู้จะถูกต้องตามที่ต้องการไหม และไม่รู้ถูกต้องตามหลักการที่อาจารย์ท่านได้ถามไหม

ที่อธิบายมาไม่ถูกครับ ที่ดึงข้อมูลมาเก็บไว้
ไม่ได้เก็บไว้ในชีท Form แต่เก็บไว้ใน Array ที่ชือ a โดยเก็บไว้ที่
บรรทัดที่ 4 และ
คอลัมน์ที่ได้จากค่าของ lng
จาก a(4, lng) = r.Offset(0, -2) เป็นการกำหนดค่าให้กับ Array a
กรณีต้องการเชื่อมค่าเข้าด้วยกันก่อนที่จะ Assign ค่าให้ใช้ & หรือ + ดังนั้น ควรจะได้เป็น
a(4, lng) = r.Offset(0, -2) & r.Offset(0, -1) หรือ
a(4, lng) = r.Offset(0, -2) + r.Offset(0, -1)
แต่กรณีที่ไม่ได้เป็น String จะใช้เครื่องหมาย + ไม่ได้ครับ
Re: รบกวนดู เรื่องการแสดงข้อมูลจากฐานข้อมูลตามเงื่อนไขด้วย V
Posted: Fri Nov 25, 2011 4:58 pm
by bank9597
ที่อธิบายมาไม่ถูกครับ ที่ดึงข้อมูลมาเก็บไว้ ไม่ได้เก็บไว้ในชีท Form แต่เก็บไว้ใน Array ที่ชือ a โดยเก็บไว้ที่บรรทัดที่ 4 และคอลัมน์ที่ได้จากค่าของ lng
จาก a(4, lng) = r.Offset(0, -2) เป็นการกำหนดค่าให้กับ Array a กรณีต้องการเชื่อมค่าเข้าด้วยกันก่อนที่จะ Assign ค่าให้ใช้ & หรือ +

โดนเชือดจริงๆด้วย
ขอบคุณอาจารย์ครับ
ที่อธิบายไปนั้น เพราะยังไม่เข้ารูปแบบที่ต้องการ ไม่สามารถบอกได้ชัดเจนว่าต้องระบุโค๊ดอย่างไร
แต่พอเข้าดูใหม่เลยรู้ว่า โค๊ดที่ถูกต้อง น่าจะเป็นด้านล่างครับ
Code: Select all
Option Explicit
Option Base 1
Sub ShowEmp()
Dim a() As Variant, lng As Long
Dim r As Range, rAll As Range
Dim rt As Range, rl As Long
Application.EnableEvents = False
Application.ScreenUpdating = False
rl = Rows.Count
With Worksheets("2703")
Set rAll = .Range("F2", .Range("F" & rl).End(xlUp))
End With
For Each r In rAll
If r = Worksheets("From").Range("A2") Then
lng = lng + 1
ReDim Preserve a(5, lng)
a(1, lng) = lng
a(2, lng) = r.Offset(0, -4)
a(3, lng) = r.Offset(0, -3)
a(4, lng) = r.Offset(0, -1)
a(5, lng) = r.Offset(0, 0)
End If
Next r
If lng > 0 Then
With Worksheets("From")
Set rt = .Range("B4", .Range("F" & lng - 1 + 4))
If .Range("B4") <> "" Then
.Range("B4", .Range("B" & rl).End(xlUp).Offset(0, 4)).ClearContents
End If
.Range("B4:F4").Copy
rt.PasteSpecial xlPasteFormats
rt = Application.Transpose(a)
.Range(.Range("B3").End(xlDown).Offset(1, 0), .Range("F" & rl)).ClearContents
End With
Else
MsgBox "Data not found."
End If
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
ไม่ได้ดูในคอลัมน์ E ของขีทฟอร์มที่กำหนดรูปแบบไว้ ส่วนชื่อ Location ต้องทำให้ถูกต้องก่อนครับ ตัวไหนเป็นรหัสเดียวกัน ก็ต้องตรวจเช็คให้ละเอียดครับ

Re: รบกวนดู เรื่องการแสดงข้อมูลจากฐานข้อมูลตามเงื่อนไขด้วย V
Posted: Fri Nov 25, 2011 5:11 pm
by snoopy1150
ขอบคุณท่านทั้ง 2 ครับ ที่ทำให้ผมได้รู้เกี่ยวกับ Code ได้เยอะเลย และผมก็ได้สิ่งที่ต้องการครับ
ขอบคุณครับ