Page 1 of 1

ขอคำแนะนำหรือตัวอย่าง เพื่อนำไปสร้างข้อมูลตามที่ออกแบบได้ครับ

Posted: Fri Feb 23, 2018 12:19 am
by tstctbtb
อยากขอ คำแนะนำ หรือ ตัวอย่าง จะเป็น Link ให้ลองไปศึกษาต่อเองก็ได้ครับ เพื่อช่วยให้ผมได้นำไปพัฒนาตามรูปแบบที่ผมได้วางแผนไว้ดังนี้ได้ครับ


หน้า sheet ต่างๆ ที่ผมต้องการกำหนด มีดังนี้ครับ

control

- ปุ่ม Add = เมื่อกดปุ่มแล้ว จะเข้าหน้า UseerForm2 โดยสามารถกรอกข้อมูลตาม TextBox6 - TextBox8 ตามที่กำหนด
*******
UserForm2
- TextBox1-TextBox5 = กรอกข้อมูลตามแต่ละ textbox ที่กำหนด แล้วบันทึกข้อมูลที่กรอกลงใน data_1 ตาม คอลัมน์1-คอลัมน์5
- save = เมื่อกดปุ่มแล้ว ข้อมูลจะไปบันทึกที่ data_1 ในช่องคอลัมน์1-คอลัมน์5 ตามที่กำหนด ,และป้องกันไม่ให้กดปุ่มซ้ำได้ จนกว่าจะกดปุ่ม clear 1 ครั้ง , ถ้าเพิ่มข้อมูลอีกจะต่อไปยังบรรทัดต่อไปจากข้อมูลที่มีอยู่
- clear = เครียร์ข้อมูลในช่องคอลัมน์1-คอลัมน์5 ทั้งหมด
- close = เมื่อกดแล้วจะปิดหน้า UserForm2
*******
- ปุ่ม Search = ค้นหาข้อมูลที่ได้รับจากช่อง TextBox1 หรือ TextBox2 หรือ TextBox3 เมื่อค้นหาแล้วให้ข้อมูลที่ตรงกันแสดงที่ คอลัมน์1-คอลัมน์5
- ปุ่ม update = เมื่อแก้ไขข้อมูลใน คอลัมน์1-คอลัมน์5 เสร็จแล้ว พอกดปุ่ม update แล้วข้อมูลเดิมจะถูกแก้ไขตาม

- ปุ่ม Export_txt = ให้ข้อมูลที่อยู่ใน sheet ชื่อ send_txt ออกเป็นไฟล์ text (.txt) โดย แต่ละบรรทัดในไฟล์ text จะขึ้นบรรทัดใหม่เสมอ

==============================
data_1

- บันทึกข้อมูลที่ได้จากการเพิ่มข้อมูลใน ปุ่ม Add ของ sheet ชื่อ control โดยเรียงลำดับกันต่อไปเรื่อยๆ ตามการบันทึก
- และแก้ไขข้อมูลตามการกดปุ่ม update

==============================
data_2

- ข้อมูลจะถูกบันทึกลงใน คอลัมน์ 1, คอลัมน์ 3, คอลัมน์ 5 ของ data_1 ต่อไปเรื่อยๆ ตามจำนวนที่ data_1 มี

==============================
send_txt

- เป็นการรวมข้อมูลที่ได้จากการรวมข้อมูลให้เป็นแถวเดียวกันด้วยคำสั่ง=CONCATENATE()
- และจะต้องนำข้อมูลนี้ไป export เป็น file text (.txt) ด้วย
==============================

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

ขอบคุณครับ

Re: ขอคำแนะนำหรือตัวอย่าง เพื่อนำไปสร้างข้อมูลตามที่ออกแบบได้ครับ

Posted: Fri Feb 23, 2018 3:59 pm
by tstctbtb
สิ่งที่อยากทราบหลักๆ คือ

1- code ปุ่ม save ซึ่งอยู่ในหน้า UserForm ให้สามารถบันทึกใน sheet หน้าอื่นๆ ได้ (ในไฟล์ตัวอย่าง คือ sheet >> data_1)
และเมื่อมีการบันทึกข้อมูลใน sheet >> data_1 แล้ว ใน sheet >> data_2 จะ มีบาง column ถูกบันทึก ลงไปด้วย โดยข้อมูลจะเรียงต่อไปเรื่อยๆ จากการบันทึก
2- การค้นหาข้อมูล ด้วย ปุ่ม Search โดยค้นจาก Textbox6 - Textbox8 แล้วไปแสดงข้อมูลใน column ของ sheet เดียวกัน
3- เมื่อมีการแก้ไข column ที่ได้จากการค้นหาแล้ว เมื่อกด ปุ่ม update ข้อมูลจะถูกบันทึกการแก้ไขใน sheet >> data_1 รวมทั้ง sheet >> data_2
4- sheet >> send_txt ต้องการให้ข้อมูลเรียงต่อกันไปเรื่อยๆ หลังจากใช้สูตร =CONCATENATE() ที่ได้จากการรวมข้อความใน cell ของ sheet >> data_2
5- เมื่อกด ปุ่ม Export_txt ต้องการให้ ได้รับเป็นไฟล์ text(.txt)
โดยข้อความที่ได้ในไฟล์ คือ ข้อมูล cell ละ 1 บรรทัด ตามข้อมูลใน sheet >> send_txt ออกมา

ขอคำชี้แนะด้วยครับ ขอบคุณครับ

Re: ขอคำแนะนำหรือตัวอย่าง เพื่อนำไปสร้างข้อมูลตามที่ออกแบบได้ครับ

Posted: Fri Feb 23, 2018 8:32 pm
by snasui
:D ค่อย ๆ ถามตอบกันไปครับ

ปัจจุบันติดปัญหาข้อใด ขั้นตอนใด ให้ถามเป็นข้อ ๆ ไป แก้ไขไปทีละเปลาะครับ

Re: ขอคำแนะนำหรือตัวอย่าง เพื่อนำไปสร้างข้อมูลตามที่ออกแบบได้ครับ

Posted: Fri Feb 23, 2018 10:58 pm
by tstctbtb
ครับอาจารย์

ถ้ายังงั้นเป็นข้อที่ 1 ครับ

1- code ปุ่ม save ซึ่งอยู่ในหน้า UserForm ให้สามารถบันทึกใน sheet หน้าอื่นๆ ได้ (ในไฟล์ตัวอย่าง คือ sheet >> data_1)

ตอนนี้ผมหา code ได้แต่แบบ เมื่อกดลงปุ่ม save ใน UserForm2 ที่สร้างขึ้นแล้ว ข้อมูลจะบันทึกได้แต่ภายในหน้า sheet นั้นๆ เท่านั้นครับ

Code: Select all

Private Sub CommandButton1_Click()

    emptyRow = WorksheetFunction.CountA(Range("B:B")) + 1
    Cells(emptyRow, 1).Value = TextBox1.Value
    Cells(emptyRow, 2).Value = TextBox2.Value
    Cells(emptyRow, 3).Value = TextBox3Value
    Cells(emptyRow, 4).Value = TextBox4.Value
    Cells(emptyRow, 5).Value = TextBox5Value

End Sub
สอบถามเพิ่มเติมครับ : พอมีวิธีไหน บังคับให้ปุ่ม save นี้ กดได้เพียงครั้งเดียว แล้วรอจนกว่าจะกดปุ่ม clear 1 ครั้งก่อน จึงจะสามารถกดปุ่ม save ได้อีกครั้ง ได้หรือไม่ครับ

Re: ขอคำแนะนำหรือตัวอย่าง เพื่อนำไปสร้างข้อมูลตามที่ออกแบบได้ครับ

Posted: Sat Feb 24, 2018 10:15 pm
by snasui
:D ตัวอย่างที่ถามมานี้เป็นการใช้ Table การเข้าถึง Range ใน Table จะค่อนข้างยุ่งยากกว่าปกติ

ตัวอย่าง Code สำหรับการวางข้อมูลเมื่อกดปุ่ม Save ใน UserForm โดยจะนำข้อมูลไปวางที่ชีต data_1 และ data_2 ตามด้านล่างครับ

Code: Select all

For Each sh In Worksheets
    Select Case sh.Name
        Case "data_1"
            With sh.ListObjects(1)
                i = .Range.Count
                .ListColumns(1).Range(i).Value = TextBox1.Value
                .ListColumns(2).Range(i).Value = TextBox2.Value
                .ListColumns(3).Range(i).Value = TextBox3.Value
                .ListColumns(4).Range(i).Value = TextBox4.Value
                .ListColumns(5).Range(i).Value = TextBox5.Value
            End With
        Case "data_2"
            With sh.ListObjects(1)
                i = .Range.Count
                .ListColumns(1).Range(i).Value = TextBox1.Value
                .ListColumns(2).Range(i).Value = TextBox3.Value
                .ListColumns(3).Range(i).Value = TextBox5.Value
            End With
    End Select
Next sh
การกำหนดให้กดปุ่ม Save เพียงครั้งเดียวสามารถทำได้ง่าย ๆ โดยเมื่อกดปุ่ม Save ไปแล้วให้แสดงข้อมูลไว้เซลล์ใด ๆ เช่นแสดง True และหากมีคำว่า True อยู่ในเซลล์นี้จะต้องกำหนดให้ Save อีกไม่ได้จนกว่าจะคลิกปุ่ม Clear และเมื่อคลิกปุ่ม Clear จะทำการ Clear ค่า True ทิ้งไป ก็จะทำให้สามารถ Save ได้อีก เช่นนี้เป็นต้นครับ

Re: ขอคำแนะนำหรือตัวอย่าง เพื่อนำไปสร้างข้อมูลตามที่ออกแบบได้ครับ

Posted: Sat Feb 24, 2018 10:47 pm
by tstctbtb
:D ขอบคุณครับอาจารย์ เดี่ยวผมขอลองปรับแก้ดูก่อนนะครับ เดี๋ยวผมขอมาถามต่อครับ

Re: ขอคำแนะนำหรือตัวอย่าง เพื่อนำไปสร้างข้อมูลตามที่ออกแบบได้ครับ

Posted: Sun Feb 25, 2018 12:16 am
by tstctbtb
อาจารย์ครับ ตอนนี้ผมได้ลองแก้ไขสูตรแล้วครับ สามารถบันทึกได้ทั้ง 2 sheet ครับ

1. แต่ข้อมูลที่ได้ใน data_2 มีการบันทึกนอก table ครับ (ดังรูปที่แนบ) โดย code นั้นเป็นแบบเดียวกันกับ data_1 ซึ่งผลลัพท์น่าจะเหมือนกันครับ แบบนี้ต้องแก้ไขอย่างไรดีครับ

2. แล้วถ้าเกิดสมมติว่าเราสร้าง คอลัมน์6 ขึ้นมาต่อท้าย คอลัมน์5 ใน data_1 แล้วใช้คำสั่งใด ในการคัดลอกทั้ง column ไปใน data_2 ได้บ้างครับ
Private Sub CommandButton1_Click()
For Each sh In Worksheets
Select Case sh.Name
Case "data_1"
With sh.ListObjects(1)
i = WorksheetFunction.CountA(Range("B:B")) + 1
.ListColumns(1).Range(i).Value = TextBox1.Value
.ListColumns(2).Range(i).Value = TextBox2.Value
.ListColumns(3).Range(i).Value = TextBox3.Value
.ListColumns(4).Range(i).Value = TextBox4.Value
.ListColumns(5).Range(i).Value = TextBox5.Value
End With
Case "data_2"
With sh.ListObjects(1)
i = WorksheetFunction.CountA(Range("B:B")) + 1
.ListColumns(1).Range(i).Value = TextBox1.Value
.ListColumns(2).Range(i).Value = TextBox3.Value
.ListColumns(3).Range(i).Value = TextBox5.Value
End With
End Select
Next sh

End Sub

Re: ขอคำแนะนำหรือตัวอย่าง เพื่อนำไปสร้างข้อมูลตามที่ออกแบบได้ครับ

Posted: Mon Feb 26, 2018 2:12 pm
by logic
ข้อ 1 อาจารย์เขียนมาให้ถูกอยู่แล้วในเรื่องการนับบรรทัดให้วางใน Table ที่ไม่ได้คำตอบเพราะไปเปลี่ยนเป็นแบบอื่นครับ :P

ในข้อ 2 ให้ช่วยเขียนโค้ดมาดูครับ

Re: ขอคำแนะนำหรือตัวอย่าง เพื่อนำไปสร้างข้อมูลตามที่ออกแบบได้ครับ

Posted: Mon Feb 26, 2018 11:26 pm
by tstctbtb
1. ผมลองใช้ code ของอาจารย์แล้วครับ แต่ข้อความแสดงไม่ตรงกับจุดที่ต้องการครับ ข้อความแสดงดังภาพครับ ผมจึงทดลองใช้สูตรอื่นดูครับ

2. เนื่องจากผมยังไม่มีตัวอย่าง หรือแนวคิดเกี่ยวกับ code ครับ ผมจึงยังนึกไม่ออกว่าจะต้องเขียนอย่างไรครับ รบกวนแนะแนวทางหรือยกตัวอย่างทีครับ

ขอบคุณครับ

Re: ขอคำแนะนำหรือตัวอย่าง เพื่อนำไปสร้างข้อมูลตามที่ออกแบบได้ครับ

Posted: Tue Feb 27, 2018 6:08 am
by snasui
:D ข้อที่ 1 ไม่ตรงกับที่ผมแนะนำไป กรุณาเขียนให้ตรงกันทุกบรรทัดแล้วแจ้งปัญหามาใหม่ครับ

การกำหนดค่าตัวแปร i จะต้องเป็นตามที่ผมเขียนไปให้ ไม่ใช่ i = WorksheetFunction.CountA(Range("B:B")) + 1 ครับ

ส่วนข้อ 2 ให้หาวิธีปรับปรุงมาเองก่อน กรณียังไม่มีความรู้ต้องศึกษาเพิ่มเติมมาก่อน ปรับมาได้เท่าไรก็เท่านั้น เพียงต้องการให้เกิดการทดสอบทดลองด้วยตนเองซึ่งเป็นหัวใจหลักของการเขียน Code ครับ