copy ข้อมูลจาก subform แบบ Datasheet มายัง Textbox
กระทู้เก่าบอร์ด อ.Yeadram

 1,691   5
URL.หัวข้อ / URL
copy ข้อมูลจาก subform แบบ Datasheet มายัง Textbox

รบกวนสอบถามเซียน Access VBA ครับ (ผมใช้ ver.2007)
คือต้องการ copy ข้อมูล จาก subform ที่เป็นแบบ Datasheet หลายแถวมายัง Textbox เดียว ในฟอร์มหลัก ผมใช้ Code ด้านล่างนี้ แต่สามารถ Copy ได้แค่แถวเดียว ส่วนแถวอื่นๆ จะถูกมองข้าม

If Not IsNull(Form![0_TBL_EVALUATE_Query subform]![eva_note]) Then
        Me.Comment.Value = Form![0_TBL_EVALUATE_Query subform]![eva_note]
End If

คำถามคือ ถ้าหากมีข้อมูลใน Subform แบบ Datasheet 2 บรรทัด หรือมากกว่า แล้วต้องการ Copy ข้อมูลทั้งหมดมายัง Textbox โดยใช้รูปแบบนี้

1.> ข้อเสนอแนะจากแถวที่ 1
2.> ข้อเสนอแนะจากแถวที่ 2
3.> ข้อเสนอแนะจากแถวที่ n)

(หรือต่อกันก็ได้)

**หมายเหตุ**
(ผมตั้งชื่อ Textbox ในฟอร์มหลัก ว่า Comment ส่วนข้อมูลใน Subform ที่ต้องการ copy ตั้งชื่อฟิลด์ว่า eva_note ครับ)
ผมพยายามหาคำตอบจากเว็บบอร์ดหลายที่แล้ว ยัง Google ไม่เจอ รบกวนผู้รู้ชี้แนะด้วยครับ.

ขอบพระคุณอย่างสูง.

5 Reply in this Topic. Dispaly 1 pages and you are on page number 1

1 @R17832
วนลูปอ่านฟิลด์ที่ต้องการในซับฟอร์มจากเรคอร์ดทีละเรคอร์ดที่เกิดจาก RecordsetClone ได้ครับ ลองดูใน http://www.thai-access.com/yeadram_view.php?topic_id=2812
2 @R18281
ขอบคุณครับ ขออภัยที่ไม่ได้ตอบกลับ จะลองดูครับ
3 @R18370
เรียน พี่สันติสุขครับ
ผมทำตามลิงค์ที่แนะนำได้แล้วครับ แต่ติดปัญหาเรื่องการจัดรูปแบบ เช่น ขึ้นบรรทัดใหม่ใน เมื่ออ่านจบในแต่ละแถวข้อมูล หรือ การเพิ่มหัวข้อครับ สามารถทำได้ไหมครับ
ขอบคุณครับ.
:::::::::::::::::

อันนี้ Code ที่ผมทดสอบครับ

Option Compare Database
Option Explicit
'รูปแบบแรก
Private Sub Command1_Click()
Dim RS As DAO.Recordset
Dim strMyValues As String
Set RS = Me.[tblUsers subform].Form.RecordsetClone
   Do While Not RS.EOF
        strMyValues = strMyValues & "" & RS!EmpName & ""
        RS.MoveNext
   Loop
   Me.txtRecieveValue.Value = strMyValues
End Sub

'รูปแบบที่ 2
Private Sub Command2_Click()
Dim RS As DAO.Recordset
Dim strMyValues As String
Set RS = Me.[tblUsers subform].Form.RecordsetClone
With RS
Do Until .EOF
        strMyValues = strMyValues & "" & RS!EmpName & ""
        RS.MoveNext
Loop
        Me.txtRecieveValue.Value = strMyValues
.Close: Set RS = Nothing
End With
End Sub
4 @R18373
Dim LineNo as Integer

Set RS = Me.[tblUsers subform].Form.RecordsetClone
With RS
Do Until .EOF
        LineNo = LineNo + 1
        if strMyValues <> "" then strMyValues = strMyValues & vbCRLF
        strMyValues = strMyValues & CStr(LineNo) & " ข้อความที่ต้องการ(ถ้ามี) " & !EmpName
        .MoveNext
Loop
Me.txtRecieveValue = strMyValues
.Close: Set RS = Nothing
End With

หมายเหตุ :
- vbCRLF คือค่าคงที่ที่ภาษา VBA มีมาให้อยู่แล้ว เป็นโค้ดเพื่อขึ้นบรรทัดใหม่ครับ
- .Value ไม่จำเป็นต้องเขียน เพราะมันเป็น dafault property ของคอนโทรลต่างๆบนฟอร์มอยู่แล้ว
- ในกรอบของ With อ็อปเจ็ค ... End With   เมื่อใดที่ต้องการอ้างถึงชื่ออ็อปเจ็คนั้น ก็สามารถละได้ เช่น RS.MoveNext ก็เขียนเฉพาะ .MoveNext ได้ ยกเว้นในคำสั่งที่เราต้องเขียนชื่ออ็อปเจ็คนั้นเดี่ยวๆ เช่น Set RS = Nothing จะเป็นแค่ Set = Nothing ไม่ได้ เพราะผิด syntax ของภาษา VBA เอง
5 @R18374
อ่านหนังสือร้อยเล่ม ไม่สู้ ได้ความรู้จากอาจารย์
ขอบพระคุณอย่างสูงครับ.
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.3762s