Page 1 of 1

สอบถามเกี่ยวกับการแก้ไขจาก TextBox เป็น Combo Box ครับ

Posted: Sat Jun 25, 2016 2:55 pm
by kanyaow007
สอบถามอาจารย์และท่านผู้รู้ ดังนี้ครับ
1. ถ้าผมมีความต้องการแก้ไขจาก TextBox เป็น Combo Box จะต้องดำเนินการแก้ไขที่ Code ที่จุดใดบ้าง
2. ถ้าผมต้องการช่องแสดงรายละอียดให้มากกว่า 10 ช่อง ต้องแก้ไขจุดใดบ้าง (รายละเอียดแนวบนลงล่าง)
3. ถ้าผมต้องการเพิ่มข้อมูลที่จะแสดงคล้ายๆ ข้อ 2 แต่เป็นแถบแนวนอน ต้องแก้ไขจุดใดบ้าง
ตามเอกสารแนบ และ Code ที่แนบมาครับ
ขอบคุณครับ

Code: Select all

Public Sub search_quotation()

Dim quotation_search As String
Dim search_row As Single
Dim quotation_no As String

Dim i As Integer
Dim c As Integer

Const quotation_sheet = "Quotation"
Const quotation_db_sheet = "db_quotation"

Const q_no_col = 1
Const q_date_col = 2

Const q_customercode_col = 3
Const q_contactperson_col = 4
Const q_customeraddr_col = 5

Dim q_item_details_col(1 To 10) As Byte
Dim q_item_amount_col(1 To 10) As Byte
Dim q_item_price_col(1 To 10) As Byte

Const item_details_range = "c"
Const item_amount_range = "d"
Const item_price_range = "e"

'************************************************************************************************

quotation_search = Worksheets(quotation_sheet).quotation_no_txtbox.Value

search_row = 2
quotation_no = Worksheets(quotation_db_sheet).Cells(search_row, q_no_col).Value

    Do Until quotation_no = quotation_search
    
        search_row = search_row + 1
        quotation_no = Worksheets(quotation_db_sheet).Cells(search_row, q_no_col).Value
        
    Loop
    
With Worksheets(quotation_sheet)
    
    .Range("f8").Value = Worksheets(quotation_db_sheet).Cells(search_row, q_no_col).Value
    .Range("f9").Value = Worksheets(quotation_db_sheet).Cells(search_row, q_date_col).Value
    .Range("f10").Value = Worksheets(quotation_db_sheet).Cells(search_row, q_customercode_col).Value
    
    .Range("c12").Value = Worksheets(quotation_db_sheet).Cells(search_row, q_contactperson_col).Value
    .Range("c13").Value = Worksheets(quotation_db_sheet).Cells(search_row, q_customeraddr_col).Value
    
     
    q_item_details_col(1) = 6
    q_item_amount_col(1) = 7
    q_item_price_col(1) = 8
    
    i = 1
    For i = 2 To 10
        
        q_item_details_col(i) = q_item_details_col(i - 1) + 3
        q_item_amount_col(i) = q_item_amount_col(i - 1) + 3
        q_item_price_col(i) = q_item_price_col(i - 1) + 3
    
    Next i
     
     
     i = 1
     c = 1
     For i = 17 To 26
    
        .Range(item_details_range & i).Value = Worksheets(quotation_db_sheet).Cells(search_row, q_item_details_col(c)).Value
        .Range(item_amount_range & i).Value = Worksheets(quotation_db_sheet).Cells(search_row, q_item_amount_col(c)).Value
        .Range(item_price_range & i).Value = Worksheets(quotation_db_sheet).Cells(search_row, q_item_price_col(c)).Value
        
         c = c + 1
    
     Next i     

End With

End Sub

Public Sub search_invoice()

Dim invoice_search As String
Dim search_row As Single
Dim invoice_no As String

Dim i As Integer
Dim c As Integer

Const invoice_sheet = "invoice"
Const invoice_db_sheet = "db_invoice"

Const i_no_col = 1
Const i_date_col = 2

Const i_customercode_col = 3
Const i_contactperson_col = 4
Const i_customeraddr_col = 5

Dim i_item_details_col(1 To 10) As Byte
Dim i_item_amount_col(1 To 10) As Byte
Dim i_item_price_col(1 To 10) As Byte

Const item_details_range = "c"
Const item_amount_range = "d"
Const item_price_range = "e"

'************************************************************************************************
invoice_search = Worksheets(invoice_sheet).invoice_no_txtbox.Value

search_row = 2
invoice_no = Worksheets(invoice_db_sheet).Cells(search_row, i_no_col).Value

    Do Until invoice_no = invoice_search
    
        search_row = search_row + 1
        invoice_no = Worksheets(invoice_db_sheet).Cells(search_row, i_no_col).Value
        
    Loop
    
With Worksheets(invoice_sheet)
    
    .Range("f8").Value = Worksheets(invoice_db_sheet).Cells(search_row, i_no_col).Value
    .Range("f9").Value = Worksheets(invoice_db_sheet).Cells(search_row, i_date_col).Value
    .Range("f10").Value = Worksheets(invoice_db_sheet).Cells(search_row, i_customercode_col).Value
    
    .Range("c12").Value = Worksheets(invoice_db_sheet).Cells(search_row, i_contactperson_col).Value
    .Range("c13").Value = Worksheets(invoice_db_sheet).Cells(search_row, i_customeraddr_col).Value   
     
    i_item_details_col(1) = 6
    i_item_amount_col(1) = 7
    i_item_price_col(1) = 8
    
    i = 1
    For i = 2 To 10
        
        i_item_details_col(i) = i_item_details_col(i - 1) + 3
        i_item_amount_col(i) = i_item_amount_col(i - 1) + 3
        i_item_price_col(i) = i_item_price_col(i - 1) + 3
    
    Next i
     
     
     i = 1
     c = 1
     For i = 17 To 26
    
        .Range(item_details_range & i).Value = Worksheets(invoice_db_sheet).Cells(search_row, i_item_details_col(c)).Value
        .Range(item_amount_range & i).Value = Worksheets(invoice_db_sheet).Cells(search_row, i_item_amount_col(c)).Value
        .Range(item_price_range & i).Value = Worksheets(invoice_db_sheet).Cells(search_row, i_item_price_col(c)).Value
        
         c = c + 1
    
     Next i

End With

End Sub

Re: สอบถามเกี่ยวกับการแก้ไขจาก TextBox เป็น Combo Box ครับ

Posted: Sat Jun 25, 2016 3:05 pm
by snasui
:D อันนี้ต้องทราบเองว่าจะแก้ไขตรงไหน เมื่อแก้แล้วติดปัญหาค่อยมาถามกันต่อครับ

Code ที่แนบมาถามเขียนขึ้นเองหรือผู้อื่่นเขียนให้ หากไม่ได้เขียนขึ้นมาเองก็ควรจะศึกษาให้เข้าใจจะได้ปรับปรุงเองได้ หากยังไม่มีความรู้เกียวกับ VBA ต้องศึกษามาตามลำดับก่อนครับ

อีกประการควรจะทำตัวอย่างคำตอบที่ต้องการมาแสดงด้วย จะได้ทราบว่าต้องการจะให้คำตอบเป็นอย่างไรครับ

Re: สอบถามเกี่ยวกับการแก้ไขจาก TextBox เป็น Combo Box ครับ

Posted: Sat Jun 25, 2016 3:25 pm
by kanyaow007
เรียนอาจารย์ Code กับไฟล์ที่แนบมานั้น รุ่นพี่ที่ทำงานให้ผมมาทำการแก้ไข เพื่อนำเสนอเป็นการประเมินการทำงานของผมเอง
ในส่วนของการศึกษาเกี่ยว VBA นั้น ผมได้ลองทำการศึกษาเพิ่มเติมแล้วจากหนังสือที่แนบมานั้น แต่ก็ยังคงขาดความเข้าใจอย่างมาก ยังไงผมจะลองไปทำตามที่อาจารย์บอกมาก่อนก็แล้วกันครับ หากติดปัญหาอื่นใด จะมารบกวนอาจารย์อีกครั้ง ขอบคุณครับ

Re: สอบถามเกี่ยวกับการแก้ไขจาก TextBox เป็น Combo Box ครับ

Posted: Sat Jun 25, 2016 3:33 pm
by snasui
:D ขอเอาใจช่วยครับ

Code ที่เขียนมานั้นเป็นการค้นหาแล้ววางยังตำแหน่งที่ต้องการ เราสามารถใช้สูตรมาช่วยแทนการเขียนด้วย VBA ก็ได้เช่นกัน สำหรับ Code ที่แนบมานั้นสามารถเขียนให้สั้นลงได้อีกมาก

กรณีจำเป็นต้องใช้ VBA ควรจะศึกษาเกี่ยวกับ Object Oriented ของ Excel เช่น Workbook, Worksheet, Range, Cells ฯลฯ

ศึกษา Data Type การวนลูป For...Each...Next, For...Next เป็นต้นครับ

Re: สอบถามเกี่ยวกับการแก้ไขจาก TextBox เป็น Combo Box ครับ

Posted: Sun Jun 26, 2016 4:28 pm
by kanyaow007
เรียนอาจารย์
จากเมื่อวันก่อนที่ได้สอบถามปัญหาจากอาจารย์ไป แล้วได้ทดลองค้นหาและลงมือทำดู มีความคืบหน้าจนเกือบสมบูรณ์แล้ว และก็เป็นอย่างที่อาจารย์บอกคือ Code สามารถทำให้สั้นลงได้ ซึ่งผมก็สามารถเพิ่มข้อความตามที่ต้องการได้แล้ว เพียงแต่ยังคงมีปัญหาตรงที่ผมต้องการเปลี่ยนจาก TextBox ที่ใช้สำหรับกรอกข้อความ ไปเป็น ComboBox แทน แต่ก็ลองทำดูแล้ว ก็ยังไม่สามารถใส่เพิ่มเข้าไปได้ รบกวนอาจารย์ช่วยลองดูว่าผมควรเพิ่มอะไรบ้าง (ตามเอกสารแนบ) ขอบคุณครับ

Re: สอบถามเกี่ยวกับการแก้ไขจาก TextBox เป็น Combo Box ครับ

Posted: Sun Jun 26, 2016 5:16 pm
by snasui
:D ตัวอย่างการปรับ Code ครับ

Code: Select all

'Other code
Dim cbObj As Object

Set cbObj = Worksheets(invoice_sheet).Shapes("Drop Down 6")
invoice_search = cbObj.ControlFormat.List(cbObj.ControlFormat.Value)
'Other code
'Other code คือ Code เดิมที่เขียนไว้แล้วครับ

Re: สอบถามเกี่ยวกับการแก้ไขจาก TextBox เป็น Combo Box ครับ

Posted: Mon Jun 27, 2016 12:20 pm
by kanyaow007
ขอบคุณอาจารย์มากเลยครับ สำหรับคำแนะนำในการแก้ไข ผมลองทำตามแล้ว แต่ก็ยังติดปัญหา Debug อยู่ ยังไงจะค่อยๆ ลองแก้ไขดูก่อนนะครับ ขอบคุณครับ

Re: สอบถามเกี่ยวกับการแก้ไขจาก TextBox เป็น Combo Box ครับ

Posted: Mon Jun 27, 2016 1:31 pm
by logic
ดีบักที่บรรทัดไหน จับภาพให้เพื่อนสมาชิกช่วยดูได้ครับ :)

Re: สอบถามเกี่ยวกับการแก้ไขจาก TextBox เป็น Combo Box ครับ

Posted: Tue Jun 28, 2016 1:14 pm
by kanyaow007
เรียบร้อยแล้วครับ ขอบคุณอาจารย์มากที่ให้คำแนะนำ และขอบคุณเพื่อนๆ สมาชิกที่ให้ความสนใจ Code ที่ผมทำอาจจะแตกต่างจากที่อาจารย์แนะนำมา แต่ก็สามารถใช้งานได้เหมือนกันครับ (ตัวอย่าง caode ที่ผมทำ)

Code: Select all

Private Sub Workbook_Open()
Dim NowRow As Long
NowRow = 2
Sheets("search").ComboBox1.Clear
Do While Sheets("db_service").Range("A" & NowRow) <> ""
    Sheets("search").ComboBox1.AddItem Sheets("db_service").Range("A" & NowRow)
    NowRow = NowRow + 1
Loop
End Sub

Re: สอบถามเกี่ยวกับการแก้ไขจาก TextBox เป็น Combo Box ครับ

Posted: Tue Jun 28, 2016 1:36 pm
by logic
เดี๋ยวคนอ่านจะงง

โค้ดที่อาจารย์ตอบเป็นการเอาค่าใน combobox คือเลือกค่ามาแล้วไปค้นค่านั้น

ที่คุณ kanyaow007เขียนมาเป็นการลูปเติมค่าใน combobox

คนละวัถตุประสงค์ครับ