Page 1 of 1

VBA: ใส่รายการไม่ซ้ำใน combobox หลังจากเลือก option button ครับ

Posted: Sun Dec 06, 2015 11:01 pm
by DhitiBank
สวัสดีอาจารย์และเพื่อนๆ ครับ

ผมทำฟอร์มชื่อ AddStuff เพื่อเอาไว้ใส่ข้อมูลใหม่ที่ไม่มีในฐานข้อมูล ตั้งใจจะทำให้มี 3 แท็ป แต่แท็ปแรกก็จอดแล้ว ที่แท็ปแรกใช้เฟรมแบ่งเป็น 3 ส่วน ตั้งใจไว้ว่าจะให้ผู้ใช้งานไล่ทำให้เสร็จทีละส่วน (ทำส่วนที่ 1 เสร็จ ส่วนที่ 2 จึงค่อยสั่งให้ Enable แบบนี้ไปเรื่อยๆ ครับ)
combo1.png
combo1.png (180.47 KiB) Viewed 265 times
combo2.png
combo2.png (8.17 KiB) Viewed 265 times
ที่คิดไว้คือ พอเลือก option ในส่วนที่ 1 เสร็จแล้ว สมมติว่าเลือก option1 โค้ดก็จะรับว่าเลือกค่าที่ 1 แล้วก็จะไปมองหากลุ่มย่อย (เป็นรหัส 3 หลัก) ในชีท 9SD คอลัมน์ B แล้วเลือกรหัสที่ขึ้นต้นด้วย 1 มาทั้งหมดแบบไม่ซ้ำ แล้วเอาไปใส่ใน combo box ที่อยู่ในเฟรมที่ 2

ตอนแรกใส่ใน combo box ได้แล้วแต่มาหมดเลยทั้งซ้ำและไม่ซ้ำ ก็เลยลองเอาคำสั่ง collection มาใช้เพื่อเลือกรายการไม่ซ้ำก่อน ทำยังไงก็ไม่ได้ ผมควรปรับอย่างไรดีครับ โค้ดอยู่ที่ตัวฟอร์มเลยครับ

หากเลือก option1 (เพิ่งเขียนคำสั่งของ option1 ไว้อย่างเดียวครับ) จะได้สมาชิกใน combo box คือ 100, 101, 102, 103, 104, 105 ครับ

Code: Select all

Private Sub obMain1_Click()
    Dim i%, iRow%, bNum%
    Dim cSubCode As New Collection
    
    ' Variables
    Set wsSTDB = ThisWorkbook.Sheets("9sd")
    With wsSTDB
        iRow = .Range("b" & .Rows.Count).End(xlUp).Row
    End With
    If obName = "" Then obName = obMain1.Name
    bNum = Right(obName, 1)
    Debug.Print bNum, IsNumeric(bNum)
    
    ' Enable some controls
    cbbSub1.Enabled = True
    cbbSub1.Clear
    
    'Call SubCodeUnique(iRow, bNum)
    On Error Resume Next
    With wsSTDB
        For i = 5 To iRow
            If bNum < VBA.Left(.Cells(i, "b"), 1) Then Exit For
            If bNum = VBA.Left(.Cells(i, "b"), 1) Then _
                cSubCode.Add .Cells(i, "b").Value, .Cells(i, "b").Value
        Next i
    End With
    On Error GoTo 0
    
    'Add item(s) to combo box
    If cSubCode.Count = 0 Then Exit Sub
    For i = 1 To cSubCode.Count
        cbbSub1.AddItem cSubCode.Item(i)
    Next i
    
End Sub

Re: VBA: ใส่รายการไม่ซ้ำใน combobox หลังจากเลือก option button ครับ

Posted: Sun Dec 06, 2015 11:43 pm
by DhitiBank
เจอแล้วครับ กว่าจะหาเจอ เข้าไปดูตัวอย่างโค้ดของไมโครซอฟท์ เหมือนกับว่าก่อนจะเพิ่มค่าเข้าไปใน collection ได้ ต้องทำให้เป็น string ก่อน (ไม่รู้ว่าเข้าใจถูกไหมครับ) เลยมั่วปรับตรง

cSubCode.Add .Cells(i, "b").Value, .Cells(i, "b").Value
เป็น
cSubCode.Add .Cells(i, "b").Value, CStr(.Cells(i, "b").Value)
ตอนนี้รันได้แล้วครับ ขอบคุณมากครับ เดี๋ยวจะเอารายการพวกนี้ยัดเข้าไปใน Listbox ที่อยู่ในเฟรม 2 ด้วยทั้งรหัสและชื่อ ติดแล้วขอมาถามใหม่ครับ

Re: VBA: ใส่รายการไม่ซ้ำใน combobox หลังจากเลือก option button ครับ

Posted: Mon Dec 07, 2015 9:13 am
by bank9597
DhitiBank wrote:เจอแล้วครับ กว่าจะหาเจอ เข้าไปดูตัวอย่างโค้ดของไมโครซอฟท์ เหมือนกับว่าก่อนจะเพิ่มค่าเข้าไปใน collection ได้ ต้องทำให้เป็น string ก่อน (ไม่รู้ว่าเข้าใจถูกไหมครับ) เลยมั่วปรับตรง

cSubCode.Add .Cells(i, "b").Value, .Cells(i, "b").Value
เป็น
cSubCode.Add .Cells(i, "b").Value, CStr(.Cells(i, "b").Value)
ตอนนี้รันได้แล้วครับ ขอบคุณมากครับ เดี๋ยวจะเอารายการพวกนี้ยัดเข้าไปใน Listbox ที่อยู่ในเฟรม 2 ด้วยทั้งรหัสและชื่อ ติดแล้วขอมาถามใหม่ครับ
:thup:

Re: VBA: ใส่รายการไม่ซ้ำใน combobox หลังจากเลือก option button ครับ

Posted: Mon Dec 07, 2015 9:41 am
by DhitiBank
ขอสอบถามหน่อยครับ ไม่เกี่ยวกับหัวเรื่องเท่าไรแต่เป็นสิ่งที่คิดจะทำกับไฟล์นี้ครับ

หากจะเขียนให้มีการเชื่อมต่อกับฐานข้อมูลซึ่งผมไม่มีความรู้เลยในตอนนี้ ผมควรจะเริ่มจากตรงไหนหรือหาอ่านได้จากไหนดีครับ (ผมลองไปดูหนังสือแล้ว อ่านคร่าวๆ ... ไม่รู้เรื่องเลย เหมือนกับว่าต้องมีพื้นเรื่องการเขียนโปรแกรมมาบ้างแล้ว) และขอความกรุณาแนะนำว่าผมควรจะใช้ฐานข้อมูลอะไรที่เรียนรู้ค่อนข้างง่ายหน่อยครับ Access หรือเปล่า? เห็นมีอยู่ในชุดของไมโครซอฟท์ แต่ก็ไม่เคยใช้เลยครับ ตอนนี้ไฟล์ที่ใช้อยู่เป็นแบบเก็บข้อมูลทั้งหมดในไฟล์ใช้ได้เดือนเดียวก็ต้องสร้างไฟล์ใหม่เพราะขนาดเริ่มใหญ่และทำงานช้าครับ

Re: VBA: ใส่รายการไม่ซ้ำใน combobox หลังจากเลือก option button ครับ

Posted: Mon Dec 07, 2015 10:10 am
by snasui
:D ศึกษาจาก Microsoft Access น่าจะง่ายที่สุดแล้วครับ เนื่องจากเราสามารถใช้ความคุ้นเคยกับเมนูต่าง ๆ ของ Microsoft Office ที่มีลักษณะคล้ายกันมาก และหากต้องการทำระบบงานควรจะทำด้วย Microsoft Access เป็นหลักเนื่องจากเป็น Relational Database Management System ซึ่งสะดวกในการ Query ข้อมูลในตารางอื่นๆ ที่มีข้อมูลสัมพันธ์กับตารางปัจจุบัน นอกจากนี้ Object ของ Access จะผูกโยงกับข้อมูลพร้อมมีคำสั่งที่เตรียมไว้ให้สำหรับการจัดการข้อมูลเรียบร้อยแล้ว ไม่เหมือนกับ Excel หรือ Application ที่เขียนขึ้นมาเองด้วย VB, C# ฯลฯ ต้องวาด Control และผูกข้อมูลเองทั้งหมดครับ

ในเรื่องการเขียนให้ติดต่อฐานข้อมูลใน Excel จำเป็นต้องเรียนรู้เกี่ยวกับ Connection String ศึกษาได้จาก Link นี้ครับ Connection String Reference และคำสั่ง SQL ที่ใช้ในการ Select, Insert, Update, Delete ข้อมูล ลองศึกษาจากที่นี่ประกอบครับ SQL Introduction

Re: VBA: ใส่รายการไม่ซ้ำใน combobox หลังจากเลือก option button ครับ

Posted: Mon Dec 07, 2015 10:23 am
by bank9597
:D Access อีกเสียงครับ

Re: VBA: ใส่รายการไม่ซ้ำใน combobox หลังจากเลือก option button ครับ

Posted: Mon Dec 07, 2015 11:01 am
by DhitiBank
ขอบคุณอาจารย์มากครับและคุณ bank9597 ด้วย

ขอเริ่มด้วยโค้ดติดต่อฐานข้อมูลก่อนครับ (เพราะทำไฟล์มาไกลแล้ว T_T) ระหว่างนี้จะค่อยๆ ศึกษา Access ครับ

ขอบคุณอีกครั้งครับ

(เข้าไปดูลิงค์ที่อาจารย์ให้แล้วรู้สึก :sg: นี่มันคือการเรียนภาษาใหม่ชัดๆ)

Re: VBA: ใส่รายการไม่ซ้ำใน combobox หลังจากเลือก option button ครับ

Posted: Mon Dec 07, 2015 12:38 pm
by DhitiBank
:o อาจารย์ครับ เว็บ
http://www.w3schools.com/sql/sql_intro.asp

เจ๋งมากครับ มีส่วนให้ลองทำเลยในหน้าเว็บด้วย เรียนแล้วเพลิน :thup: