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

สามารถทำได้ครับ โดยใช้ 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
สามารถปรับได้เลย ตามไฟล์แนบครับ
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

ลองใช้ 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

ลองกำหนดที่ 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

คำตอบคือต้องถามคนเขียน 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

กรณีต้องการให้มีหัวคอลัมน์ด้วย ให้ทำการ 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

ผมตอบไว้ชัดเจนแล้ว ลองทำความเข้าใจจากตรงนั้น ไม่เข้าใจข้อความใดให้ถามต่อจากนั้นครับ

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