:D snasui.com ยินดีต้อนรับ :D
ยินดีต้อนรับสู่กระดานถามตอบ Excel and VBA และอื่น ๆ ที่เป็นมิตรกับทุกท่าน มีไฟล์แนบมหาศาล ช่วยให้ท่านค้นหาและติดตามศึกษาได้โดยง่าย :thup: สมาชิกท่านใดที่ยังไม่ได้ระบุ Version ของ Excel ที่ใช้งานจริง สามารถทำตาม Link นี้เพื่อจะได้รับคำตอบที่ตรงกับ Version ของท่านครับ :arrow: ระบุ Version ของ Excel
:!: โปรดทราบ :!:
  1. กรุณาอ่านกฎการใช้บอร์ด (Forum rules) ในตำแหน่งด้านบนของแต่ละบอร์ด
  2. การสมัครสมาชิก การ Login การกู้คืนรหัสผ่าน
    1. สมัครสมาชิกดูขั้นตอนได้ที่ :arrow: สมัครสมาชิก
    2. Login เข้าระบบโดยคลิกปุ่ม Login ตรงมุมขวาบนของหน้านี้ :roll:
    3. การ Login ผ่าน Facebook ดูวิธีที่ :arrow: Login ผ่าน Facebook
    4. ลืมรหัสผ่านสามารถรับรหัสใหม่ได้ที่ :arrow: Reset รหัสผ่าน
  3. มีปัญหาการใช้งาน แจ้งผู้ดูแลระบบได้ที่ :arrow: ติดต่อผู้ดูแลระบบ
  4. กำหนดการตั้งค่าส่วนตัว เช่นตั้งค่าภาษาเป็นไทยหรืออังกฤษดูได้ที่ :arrow: ตั้งค่าส่วนตัว
  5. การตั้งและตอบกระทู้ดูได้ที่ :arrow: วิธีการตั้งและตอบกระทู้
  6. การจัดรูปแบบตัวอักษรด้วย bbcode ในช่องแสดงความคิดเห็นดูได้ที่ :arrow: จัดรูปแบบตัวอักษร
  7. กำหนดขนาดตัวอักษรใน Browser ดูได้ที่ :arrow: กำหนดขนาดตัวอักษรใน Browser

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

ฟอรัมถาม-ตอบปัญหาการใช้งาน Macro และ VBA
Forum rules
  1. ไม่อนุญาตให้ใช้ภาษาแชทในการถามและตอบปัญหา ไม่ใช้คำว่า "คับ" หรือ "อ่ะครับ" แทนคำว่า "ครับ" ไม่ใช้คำว่า "เด๋ว" แทนคำว่า "เดี๋ยว" เป็นต้น เนื่องจากเมื่อแปลเป็นภาษาต่างประเทศแล้วจะให้ความหมายผิดไปจากที่ควรจะเป็น
  2. ห้ามถามโดยระบุชื่อผู้ตอบและต้องตั้งชื่อกระทู้ให้สื่อถึงปัญหาที่จะถาม ไม่ตั้งชื่อว่า ช่วยด้วยครับ, มีปัญหามาปรึกษาครับ เป็นต้น
  3. กรุณาอธิบายปัญหาและระบุคำตอบที่ต้องการมาในกระทู้ด้วยเสมอถึงแม้จะอธิบายไว้ในไฟล์แนบแล้วก็ตาม ทั้งนี้เพื่ออำนวยความสะดวกแก่เพื่อนสมาชิกในการค้นหาข้อมูล
  4. กรุณาแนบไฟล์ตัวอย่างพร้อมแสดงคำตอบที่ถูกต้องมาในไฟล์ด้วยเพื่อให้ง่ายต่อการทำความเข้าใจและสะดวกต่อการตอบคำถาม (ขนาดไฟล์ไม่เกิน 500Kb ขนาดภาพไม่เกิน 800*600 Pixel) ไม่แนบเป็น Link มาจากแหล่งอื่นที่อาจจะถูกลบทิ้งไปโดยต้นทางในภายหลัง นอกจากนี้ไม่ควรแนบไฟล์ที่มีข้อมูลสำคัญอันก่อให้เกิดความเสียหายกับตนเองและผู้อื่น
  5. กรณีเป็นคำถามเกี่ยวกับ Programming เช่น VBA, VB.Net, C#, SQL ฯลฯ ต้องลองเขียนมาเองก่อนเสมอ ถามเฉพาะที่ติดปัญหา ระบุ Module, Procedure ที่ติดปัญหาให้ชัดเจน กรุณาโพสต์ Code ให้แสดงเป็น Code คือเปิดด้วย [code] และปิดด้วย [/code] ตัวอย่างเช่น [code]dim r as range[/code] เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
  6. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
User avatar
DhitiBank
Gold
Gold
Posts: 1676
Joined: Mon Oct 15, 2012 12:07 am

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

#1

Post by DhitiBank »

สวัสดีอาจารย์และเพื่อนๆ ครับ

ผมทำฟอร์มชื่อ AddStuff เพื่อเอาไว้ใส่ข้อมูลใหม่ที่ไม่มีในฐานข้อมูล ตั้งใจจะทำให้มี 3 แท็ป แต่แท็ปแรกก็จอดแล้ว ที่แท็ปแรกใช้เฟรมแบ่งเป็น 3 ส่วน ตั้งใจไว้ว่าจะให้ผู้ใช้งานไล่ทำให้เสร็จทีละส่วน (ทำส่วนที่ 1 เสร็จ ส่วนที่ 2 จึงค่อยสั่งให้ Enable แบบนี้ไปเรื่อยๆ ครับ)
combo1.png
combo1.png (180.47 KiB) Viewed 264 times
combo2.png
combo2.png (8.17 KiB) Viewed 264 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
Attachments
Test.xlsm
(102.69 KiB) Downloaded 29 times
User avatar
DhitiBank
Gold
Gold
Posts: 1676
Joined: Mon Oct 15, 2012 12:07 am

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

#2

Post 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 ด้วยทั้งรหัสและชื่อ ติดแล้วขอมาถามใหม่ครับ
User avatar
bank9597
Guru
Guru
Posts: 3868
Joined: Wed Aug 17, 2011 11:49 am

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

#3

Post 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:
Forum Rules
  1. อย่าใช้ภาษาแชทในการตอบ-ถาม
  2. ตั้งชื่อกระทู้ให้สื่อถึงปัญหาและไม่เจาะจงตัวผู้ตอบ
  3. ให้อธิบายปัญหาและระบุคำตอบที่ต้องการมาในฟอรัม
  4. ควรแนบไฟล์ตัวอย่างมาที่ฟอรั่ม
  5. หากใช้ VBA ให้ลองเขียนมาเองก่อนเสมอ
  6. แจ้งผลการใช้งานทุกครั้งเมื่อได้รับคำตอบ
User avatar
DhitiBank
Gold
Gold
Posts: 1676
Joined: Mon Oct 15, 2012 12:07 am

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

#4

Post by DhitiBank »

ขอสอบถามหน่อยครับ ไม่เกี่ยวกับหัวเรื่องเท่าไรแต่เป็นสิ่งที่คิดจะทำกับไฟล์นี้ครับ

หากจะเขียนให้มีการเชื่อมต่อกับฐานข้อมูลซึ่งผมไม่มีความรู้เลยในตอนนี้ ผมควรจะเริ่มจากตรงไหนหรือหาอ่านได้จากไหนดีครับ (ผมลองไปดูหนังสือแล้ว อ่านคร่าวๆ ... ไม่รู้เรื่องเลย เหมือนกับว่าต้องมีพื้นเรื่องการเขียนโปรแกรมมาบ้างแล้ว) และขอความกรุณาแนะนำว่าผมควรจะใช้ฐานข้อมูลอะไรที่เรียนรู้ค่อนข้างง่ายหน่อยครับ Access หรือเปล่า? เห็นมีอยู่ในชุดของไมโครซอฟท์ แต่ก็ไม่เคยใช้เลยครับ ตอนนี้ไฟล์ที่ใช้อยู่เป็นแบบเก็บข้อมูลทั้งหมดในไฟล์ใช้ได้เดือนเดียวก็ต้องสร้างไฟล์ใหม่เพราะขนาดเริ่มใหญ่และทำงานช้าครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 31253
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

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

#5

Post 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
User avatar
bank9597
Guru
Guru
Posts: 3868
Joined: Wed Aug 17, 2011 11:49 am

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

#6

Post by bank9597 »

:D Access อีกเสียงครับ
Forum Rules
  1. อย่าใช้ภาษาแชทในการตอบ-ถาม
  2. ตั้งชื่อกระทู้ให้สื่อถึงปัญหาและไม่เจาะจงตัวผู้ตอบ
  3. ให้อธิบายปัญหาและระบุคำตอบที่ต้องการมาในฟอรัม
  4. ควรแนบไฟล์ตัวอย่างมาที่ฟอรั่ม
  5. หากใช้ VBA ให้ลองเขียนมาเองก่อนเสมอ
  6. แจ้งผลการใช้งานทุกครั้งเมื่อได้รับคำตอบ
User avatar
DhitiBank
Gold
Gold
Posts: 1676
Joined: Mon Oct 15, 2012 12:07 am

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

#7

Post by DhitiBank »

ขอบคุณอาจารย์มากครับและคุณ bank9597 ด้วย

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

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

(เข้าไปดูลิงค์ที่อาจารย์ให้แล้วรู้สึก :sg: นี่มันคือการเรียนภาษาใหม่ชัดๆ)
User avatar
DhitiBank
Gold
Gold
Posts: 1676
Joined: Mon Oct 15, 2012 12:07 am

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

#8

Post by DhitiBank »

:o อาจารย์ครับ เว็บ
http://www.w3schools.com/sql/sql_intro.asp

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