Page 1 of 2

สอบถามเกี่ยวกับการสร้างฟอร์มครับ

Posted: Wed Aug 01, 2012 3:45 pm
by yodpao.b
สอบถามเกี่ยวกับการสร้างฟอร์มครับ
เรียนอาจาร์ยครับ พอดีไปหาหมอมาเห็นคุณหมอเวลาคีย์ขอมูลจ่ายยา เวลาเขา add ตัวยาแล้วข้อมูลจะปรากฎให้เห็นในหน้าต่างด้านล่าง
อยากถามว่า Excel สามารถทำได้ไหมครับ

รุปตัวอย่างที่ต้องการ
untitled1.gif
คำอธิบาย
เมื่อ add ข้อมูลในฟอร์มแล้ว ข้อมูลรายชื่อเครื่องมือ และจำนวน สามารถมาโชว์ใน กรอบด้านล่างได้ไหมครับ
เมื่อ add ครั้งที่1 ก็ได้ 1 บรรทัด
เมื่อ add ครั้งที่2 ก็ให้บรรทัดทัดไป

Re: สอบถามเกี่ยวกับการสร้างฟอร์มครับ

Posted: Wed Aug 01, 2012 7:03 pm
by bank9597
:D สามารถทำได้ครับ โดยใช้ ListBox ครับ

ลองเขียนมาดูก่อนครับ

Re: สอบถามเกี่ยวกับการสร้างฟอร์มครับ

Posted: Wed Aug 01, 2012 11:07 pm
by yodpao.b
ยกตัวอย่างให้ดูหน่อยนะครับ (ซักลำดับครับ)
ต้องการให้ box ในลำดับ ,รายชื่อคุรุภันต์ และ จำนวน ลงใน listbox ด้านล่าง
ดังนี้

listbox
ลำดับ รายชื่อคุรุภันต์ จำนวน
1 COMPUTER 2
2 PRINTER 1

Re: สอบถามเกี่ยวกับการสร้างฟอร์มครับ

Posted: Wed Aug 01, 2012 11:50 pm
by bank9597
:D
สามารถปรับได้เลย ตามไฟล์แนบครับ

Re: สอบถามเกี่ยวกับการสร้างฟอร์มครับ

Posted: Thu Aug 02, 2012 1:38 am
by yodpao.b
สุดยอด
ขอบพระคุณเป็นอย่างสูงครับ
อย่างที่ต้องการเลยครับ

Re: สอบถามเกี่ยวกับการสร้างฟอร์มครับ

Posted: Thu Aug 02, 2012 8:45 pm
by yodpao.b
จากตัวอย่างที่ให้มาในกรณีที่ไม่มีข้อมูลดังภาพ
Untitled11.png
ผลลัพท์ที่ได้
Untitled12.png
ถ้าต้องการให้หัวตารางอยู่ในบรรทัดบนสุดแทน Column A, Column B, Column C ได้ไหมครับ

Re: สอบถามเกี่ยวกับการสร้างฟอร์มครับ

Posted: Thu Aug 02, 2012 9:35 pm
by snasui
:D ลองใช้ If เข้าไปช่วยเพื่อให้แสดงบรรทัดว่าง 1 บรรทัดแทนแสดงแต่ Field อย่างเดียว หากแสดง Field เพียงอย่างเดียวโปรแกรมจะหาหัวคอลัมน์มาใส่ให้ เพราะกำหนดว่าบรรทัดแรกเป็น Field

Code: Select all

Private Sub UserForm_Initialize()
    'Clean data range
    DeleteBlankRows
    DeleteBlankColumns
    
    'Set properties of listbox1
    With Me.ListBox1
        .BoundColumn = 1
        .ColumnCount = 3
        .ColumnHeads = True
        .TextColumn = True
        If Range("A2") = "" Then
            .RowSource = "Sheet1!A2:C2"
        Else
            .RowSource = "Sheet1!A2:C" & xlLastRow("Sheet1")
        End If
        .ListStyle = fmListStyleOption
        .ListIndex = 0
    End With
End Sub

Re: สอบถามเกี่ยวกับการสร้างฟอร์มครับ

Posted: Thu Aug 02, 2012 10:25 pm
by yodpao.b
เรียนอาจาร์ยครับ แก้ไขตามอาจาร์ยได้แล้วครับ
ส่วนในช่อง First Name กำหนดให้แคบได้ไหมครับ

Re: สอบถามเกี่ยวกับการสร้างฟอร์มครับ

Posted: Thu Aug 02, 2012 10:36 pm
by snasui
:D ลองกำหนดที่ Properties ของ ListBox โดยที่ ColumnWidths กำหนดเป็น 50;50;100 ลอง Run เพื่อดูผลครับ สามารถกำหนด Properties ได้ขณะ Runtime ครับ

Re: สอบถามเกี่ยวกับการสร้างฟอร์มครับ

Posted: Thu Aug 02, 2012 11:00 pm
by yodpao.b
หาเจอแล้วครับอยู่ที่ Properties ช่องคอลัมวิช
แต่ถ้า ผมไม่ต้องการปรับตรงกลางแต่จะปรับริมทั้ง 2 ด้าน
ใช้ 50;;50 ถูกต้องไหมครับ

Re: สอบถามเกี่ยวกับการสร้างฟอร์มครับ

Posted: Thu Aug 02, 2012 11:06 pm
by yodpao.b
ขอบคุณครับเรีบร้อยแล้วครับ

Re: สอบถามเกี่ยวกับการสร้างฟอร์มครับ

Posted: Fri Aug 03, 2012 1:55 pm
by yodpao.b

Code: Select all

Sub Macro3()
Msg = "ท่านต้องการแสดงใบนำส่งขอใช้อุปกรณ์เครื่องมือเครื่องใช้ด้วยหรือไม่  ?"
Style = vbYesNo + vbQuestion + vbDefaultButton2
Title = "ขั้นตอนการจัดเก็บฐานข้อมูลและแสดงใบนำส่ง"
Temp = MsgBox(Msg, Style, Title)

'Unload Me
Call MacroPagePaper1PasteFormatA
Call MacroPageHistory_ToolPasteB
MsgBox ("จัดเก็บ Record นี้ลงในฐานข้อมูลเสร็จเรียบร้อย")

    
    If Temp = vbYes Then
        Call MacroPageDocument1CopyPaste
            Else
                Call MacroPageDocument1ClearContents
                Call MacroPagePaper1ClearContents
                Sheets("History_Tool").Select
                Range("B5").Select
                Selection.End(xlDown).Select  'เลือกจุดสุดท้าย
    End If

End Sub
จาก code ด้านบน รองทำงานดู ก็ไม่มีปัญหาอะไร
แต่อยากถามว่า
ทำไมมันถึง Run Code "If Temp = vbYes Then" ก่อน
แทนที่จะเป็น Code ด้านล่าง
Call MacroPagePaper1PasteFormatA
Call MacroPageHistory_ToolPasteB
MsgBox ("จัดเก็บ Record นี้ลงในฐานข้อมูลเสร็จเรียบร้อย")

และถ้าเราจะ Run Code ด้านล่างนี้ก่อน จะเขียนอย่างไรครับ
Call MacroPagePaper1PasteFormatA
Call MacroPageHistory_ToolPasteB
MsgBox ("จัดเก็บ Record นี้ลงในฐานข้อมูลเสร็จเรียบร้อย")

Re: สอบถามเกี่ยวกับการสร้างฟอร์มครับ

Posted: Fri Aug 03, 2012 2:54 pm
by snasui
:D คำตอบคือต้องถามคนเขียน Code ครับว่าต้องการทำอะไรก่อนทำอะไรหลัง เนื่องจากการเขียน Code ต้องทราบลำดับการทำงานเพื่อให้ได้ผลลัพธ์ที่ถูกต้อง

หากต้องการทดสอบผลลัพธ์ เราสามารถเรียงลำดับ Code ใหม่เพื่อดูว่าให้ผลลัพธ์ใด ตรงกับที่เราต้องการหรือไม่

Re: สอบถามเกี่ยวกับการสร้างฟอร์มครับ

Posted: Mon Aug 06, 2012 10:33 am
by yodpao.b
Untitled.gif
Untitled2.gif
จากภาพ ถ้าต้องการเฉพาะคอลัม A และ C ให้โชว์ จะแก้ไข Code อย่างไรครับ

Code: Select all

Private Sub ListBox1_Change()
    Dim SourceRange As Excel.Range
    Dim Val1 As String, Val2 As String, Val3 As String

    If (ListBox1.RowSource <> vbNullString) Then
        'Get Range that the ListBox is bound to
        Set SourceRange = Range(ListBox1.RowSource)
    Else
        'Get first data row
        Set SourceRange = Range("Sheet1!A2:C2")
        Exit Sub
    End If
    
    Val1 = ListBox1.Value
    'Get the value of the second column
    Val2 = SourceRange.Offset(ListBox1.ListIndex, 1).Resize(1, 1).Value
    'Get the value of the third column
    Val3 = SourceRange.Offset(ListBox1.ListIndex, 2).Resize(1, 1).Value

    'Concatenate the three values together and display them in Label1
    Label1.Caption = "Selected Data: " & vbNewLine & Val1 & " " & Val2 & " " & Val3
    
    'Clean Up
    Set SourceRange = Nothing
End Sub


Private Sub UserForm_Initialize()
    'Clean data range
    'DeleteBlankRows
    'DeleteBlankColumns
    
    'Set properties of listbox1
    With Me.ListBox1
        .BoundColumn = 1
        .ColumnCount = 3
        .ColumnHeads = True
        .TextColumn = True
        If Range("A2") = "" Then
            .RowSource = "Sheet1!A2:C2"
        Else
            .RowSource = "Sheet1!A2:C" & xlLastRow("Sheet1")
        End If
        .ListStyle = fmListStyleOption
        .ListIndex = 0
    End With


End Sub

Re: สอบถามเกี่ยวกับการสร้างฟอร์มครับ

Posted: Mon Aug 06, 2012 6:38 pm
by snasui
:D กรณีต้องการให้มีหัวคอลัมน์ด้วย ให้ทำการ Loop มาใส่อีกพื้นที่ตามคอลัมน์ที่ต้องการแล้วค่อยกำหนด RowSource ใน ListBox ให้ดึงข้อมูลจากพื้นที่ใหม่ครับ

กรณีไม่ต้องการหัวคอลัมน์สามารถปรับ Code ตามด้านล่างครับ

Code: Select all

Private Sub UserForm_Initialize()
    Dim i As Integer, j As Integer
    i = Range("A2", Range("A" & Rows.Count).End(xlUp)).Count - 1
    With Me.ListBox1
        .BoundColumn = 1
        .ColumnCount = 3
        .ColumnHeads = True
        .TextColumn = True
        If Range("A2") = "" Then
            .AddItem Range("A2")
            .List(.ListCount - 1, 1) = Range("C2")
        Else
            For j = 0 To i
            .AddItem Range("A" & j + 2)
            .List(.ListCount - 1, 1) = Range("C" & j + 2)
            Next j
        End If
        .ListStyle = fmListStyleOption
        .ListIndex = 0
    End With
End Sub

Re: สอบถามเกี่ยวกับการสร้างฟอร์มครับ

Posted: Mon Aug 06, 2012 7:54 pm
by yodpao.b
ขอโทษครับอาจาร์ย
ผมใช้คำพูดผิด
ผมหมายถึง บรรทัดที่มี First Name,Last Name,Telephone
ผมไม่ต้องการให้ Last Name โชว์ใน Listbox ครับ

Re: สอบถามเกี่ยวกับการสร้างฟอร์มครับ

Posted: Mon Aug 06, 2012 7:55 pm
by yodpao.b
yodpao.b wrote:ขอโทษครับอาจาร์ย
ผมใช้คำพูดผิด
ผมหมายถึง บรรทัดที่มี First Name,Last Name,Telephone
ผมไม่ต้องการให้ คอลัม Last Name โชว์ใน Listbox ครับ

Re: สอบถามเกี่ยวกับการสร้างฟอร์มครับ

Posted: Mon Aug 06, 2012 8:43 pm
by yodpao.b
คำถามแรก
yodpao.b wrote:
yodpao.b wrote:ขอโทษครับอาจาร์ย
ผมใช้คำพูดผิด
ผมหมายถึง บรรทัดที่มี First Name,Last Name,Telephone
ผมไม่ต้องการให้ คอลัม Last Name โชว์ใน Listbox ครับ

อาจาร์ยครับอย่าบอกว่าลบข้อมูลนะครับ
เพราะว่่าบางที่ข้อมูลอาจมีหลายคอลัมต้องเว้นไปเว้นมา และก็มีเป็น 10000 บรรทัด ถ้ามาจัดเรียงข้อมูลใหม่ ก็จะเปลื่องเนื้อที่

Re: สอบถามเกี่ยวกับการสร้างฟอร์มครับ

Posted: Mon Aug 06, 2012 8:48 pm
by snasui
:shock: ผมตอบไว้ชัดเจนแล้ว ลองทำความเข้าใจจากตรงนั้น ไม่เข้าใจข้อความใดให้ถามต่อจากนั้นครับ :roll:

Re: สอบถามเกี่ยวกับการสร้างฟอร์มครับ

Posted: Mon Aug 06, 2012 9:11 pm
by yodpao.b
ขอคำถามถัดไปนะครับ
จากรูป
Untitled12.gif
จะเห็นว่าในวงกลมที่มาร์ค ยังไม่มีข้อมูล และ มีวงกลมที่ไม่มีข้อมูลอยู่มาก
สาเหตุอาจเป็นเพราะในเซลว่างนั้นเป็นสูตรดังรูปด้านล่าง(ที่เป็นสูตรเพราะมีความจำเป็นต้องใช้)
Untitled11.gif
มีวิธีใดบ้างไม่ครับที่สั่งไม่ให้โชว์วงกลมหรือเมื่อมีการมาร์แล้วไม่ให้มันทำงาน