Page 1 of 1
ป้อนข้อมูลผ่านฟอร์ม
Posted: Sat Sep 22, 2012 2:40 pm
by bundit
เรียนท่านอาจารย์
รบกวนแนะนำด้วยครับ
ป้อนข้อมูลผ่านฟอร์มแล้วข้อมูลไม่ลงตามตำแหน่งที่ต้องการ
ขอแสดงความนับถือ
Re: ป้อนข้อมูลผ่านฟอร์ม
Posted: Sat Sep 22, 2012 3:35 pm
by bank9597

ในโค๊ดคุณระบุไว้ว่า ให้ทำการหาบรรทัดสุดท้ายแล้วทำการบรรทึกข้อมูลลงไปเรื่อยๆ
การจะแบบนั้น จำเป็นต้องระบุตำแหน่งเซลล์ที่ต้องการให้ข้อมูลไปวาง
ลองปรับโค๊ดตามนี้ดูครับ
ก็อื่นให้สร้าง TextBox ขึ้นมาอีก 1 TaxtBox จะได้ TextBox6 ขึ้นมา
ปรับโค๊ดตามนี้
Code: Select all
Private Sub Save_Click()
If Me.TextBox1.Value <> "" Then
Dim irow As Long
Dim ws As Worksheet
Set ws = Worksheets("Sheet1")
Me.TextBox1.Text = Application.Trim(Me.TextBox1.Text)
'Find first empty row in database
irow = ws.Cells("2").Range(TextBox6.Value).Row
'Copy The Data To The Database
ws.Cells(irow, 2).Value = Me.TextBox1.Value
ws.Cells(irow, 3).Value = Me.TextBox2.Value
ws.Cells(irow, 4).Value = Me.TextBox3.Value
ws.Cells(irow, 5).Value = Me.TextBox4.Value
ws.Cells(irow, 6).Value = Me.TextBox5.Value
Unload Me
UserForm1.Show
Else
MsgBox "Please check Data", vbCritical
End If
End Sub
เวลาทำการทดสอบบันทึกข้อมูล ให้ระบุเซลล์ปลายทางที่จะบันทึกข้อมูลลงไปที่ TextBoxt6 เช่น B1 เป็นต้น
ส่วนการทำ ComboBox ให้สร้าง ComboBox ขึ้นมา
แล้ววางโค๊ดนี้ลงไปครับ
Code: Select all
Private Sub UserForm_Initialize()
a = "List!B3:B19"
ComboBox1.RowSource = a
End Sub
Re: ป้อนข้อมูลผ่านฟอร์ม
Posted: Sat Sep 22, 2012 5:25 pm
by bundit
เรียนท่านอาจารย์รบกวนด้วยครับ
ถ้าไม่ต้องการระบุตำแหน่งในฟอร์มแต่เราใช้เคอร์เซอร์วางที่ตำแหน่งเริ่มต้นแล้วป้อนข้อมูลลงมาเรื่อยๆ
มีวิธีหรือเปล่าครับ
ขอแสดงความนับถือ
Re: ป้อนข้อมูลผ่านฟอร์ม
Posted: Sat Sep 22, 2012 5:54 pm
by snasui

ให้เพิ่มเข้าเมนู Insert แล้วเลือก Module เพื่อแทรก Module ขึ้นมาใหม่ จากนั้นนำ Code นี้ไปวาง และทำการ Assign Macro ให้กับปุ่ม Input
Code: Select all
Sub Show()
UserForm1.Show vbModeless
End Sub
และปรับ Code ด้านล่างนี้เพื่อให้สามารถเลือกวางที่เซลล์ใด ๆ ได้ตามต้องการ
Code: Select all
Private Sub Save_Click()
If Me.TextBox1.Value <> "" Then
Dim irow As Long
Dim ws As Worksheet
Set ws = Worksheets("Sheet1")
Me.TextBox1.Text = Application.Trim(Me.TextBox1.Text)
'Find first empty row in database
irow = ActiveCell.Row
'Copy The Data To The Database
ws.Cells(irow, 2).Value = Me.TextBox1.Value
ws.Cells(irow, 3).Value = Me.TextBox2.Value
ws.Cells(irow, 4).Value = Me.TextBox3.Value
ws.Cells(irow, 5).Value = Me.TextBox4.Value
ws.Cells(irow, 6).Value = Me.TextBox5.Value
ActiveCell.Offset(1, 0).Activate
' Unload Me
' UserForm1.Show
Else
MsgBox "Please check Data", vbCritical
End If
End Sub
Re: ป้อนข้อมูลผ่านฟอร์ม
Posted: Mon Sep 24, 2012 2:17 pm
by bundit
เรียนท่านอาจารย์
รบกวนช่วยดู Code ให้ด้วยครับ(ไม่แน่ใจว่าผมทำผิดจุดไหน)
ขอแสดงความนับถือ
Re: ป้อนข้อมูลผ่านฟอร์ม
Posted: Mon Sep 24, 2012 4:21 pm
by snasui

Code ที่นำไปไว้ใน Module ที่แทรกขึ้นมาใหม่คือ Code ด้านล่างนี้เท่านั้นครับ
Code: Select all
Sub Show()
UserForm1.Show vbModeless
End Sub
Re: ป้อนข้อมูลผ่านฟอร์ม
Posted: Tue Sep 25, 2012 8:02 am
by kio2002
เรียน ท่านอาจารย์
ต่อจากคุณ bundit
แล้วถ้าเราจะ ให้ลำดับมันลงอัติโนมัติ โดยที่ไม่ต้องคีย์ใส่ในฟอร์ม จะปรับโค้ดยังไงดีครับ
ผมแนบไฟล์มาแล้วครับ
Re: ป้อนข้อมูลผ่านฟอร์ม
Posted: Tue Sep 25, 2012 1:11 pm
by snasui

Code ที่เขียนไว้แล้วอยู่ที่ Procedure ใด Module ใด ติดขัดตรงบรรทัดใด ช่วยเขียนแจ้งมาด้วยจะได้เข้าถึงปัญหาได้โดยไวครับ
Re: ป้อนข้อมูลผ่านฟอร์ม
Posted: Tue Sep 25, 2012 2:18 pm
by kio2002
โค้ดอยู่ที่ UserForm1 และ Module1 ครับ
คือติดตรงที่ว่า ลำดับ เราไม่ต้องป้อนได้ไหมครับ แต่ให้โปรแกรมมันป้อนลงตารางให้อัติโนมัติครับ
ไม่รู้ว่าท่านอาจารย์ เข้าใจที่ผมอธิบายรึเปล่าครับ
ขอบคุณครับ
Re: ป้อนข้อมูลผ่านฟอร์ม
Posted: Tue Sep 25, 2012 3:35 pm
by bank9597
kio2002 wrote:โค้ดอยู่ที่ UserForm1 และ Module1 ครับ
คือติดตรงที่ว่า ลำดับ เราไม่ต้องป้อนได้ไหมครับ แต่ให้โปรแกรมมันป้อนลงตารางให้อัติโนมัติครับ
ไม่รู้ว่าท่านอาจารย์ เข้าใจที่ผมอธิบายรึเปล่าครับ
ขอบคุณครับ

ผมก็ยังไม่เข้าใจครับ ลองอธิบายให้ละเอียดอีกครั้งได้ไหมครับ เพื่อว่าท่านอื่นที่เข้ามาจะได้ช่วยดูให้ครับ
Re: ป้อนข้อมูลผ่านฟอร์ม
Posted: Tue Sep 25, 2012 4:51 pm
by snasui

ตัวอย่างการให้แสดงลำดับต่อจากเดิมตามด้านล่างครับ
Code: Select all
Private Sub Add_Click()
' If Me.TextBox1.Value <> "" Then
Dim irow As Long
Dim ws As Worksheet
Set ws = Worksheets("S_Column1")
Me.TextBox1.Text = Application.Trim(Me.TextBox1.Text)
'Find first empty row in database
irow = ws.Cells(Rows.Count, 1) _
.End(xlUp).Offset(1, 0).Row
'Copy The Data To The Database
If Range("A10") = "" Then
ws.Cells(irow, 1).Value = 1
Else
ws.Cells(irow, 1).Value = Range("A9").End(xlDown) + 1
End If
ws.Cells(irow, 2).Value = Me.TextBox2.Value
ws.Cells(irow, 4).Value = Me.TextBox3.Value
ws.Cells(irow, 5).Value = Me.TextBox4.Value
ws.Cells(irow, 9).Value = Me.TextBox5.Value
ws.Cells(irow, 10).Value = Me.TextBox6.Value
ws.Cells(irow, 11).Value = Me.TextBox7.Value
ws.Cells(irow, 12).Value = Me.TextBox8.Value
ws.Cells(irow, 15).Value = Me.TextBox9.Value
ws.Cells(irow, 14).Value = Me.TextBox10.Value
ws.Cells(irow, 16).Value = Me.TextBox11.Value
Unload Me
UserForm1.Show
' Else
' MsgBox "¡Ãسһé͹ÅӴѺ·Õè¡è͹", vbCritical
' End If
End Sub
Re: ป้อนข้อมูลผ่านฟอร์ม
Posted: Wed Sep 26, 2012 1:38 pm
by kio2002
ขอบคุณ อาจารย์snasui ครับ อย่างนี้แหละที่ผมต้องการ
การเขียนโค้ด VBA ผมรู้ครับ ว่ามันยาก ยิ่งถ้าคนอ่านแปลอังกฤษ ไม่ได้ ก็ไม่ต้องพูดกันครับ
ซึ่ง VBA ใน Excel ผมไม่เคยรู้มาก่อน ว่ามันมี พอผมได้เห็นและได้ใช้ จึงสนใจมากที่จะเขียนขึ้นมาด้วยตัวเอง
ซึ่งถ้าเราได้เขียนมันขึ้นมาด้วยตัวของเราเอง ก็ยิ่งภูมิใจ
โปรเจ็กผมที่กำลังทำ ยังอีกยาวไกล ต้องรบกวนท่านอาจารย์ Snasui ช่วยผมอีกเยอะเลยครับ
ซึ่งโค้ดที่ท่านแนะนำมาหรือเขียนให้ดู ผมก็พยายามเอาไป ประยุกต์ใช้ครับ แต่ในบางครั้งก็คิดไม่ออก จึงเอามาโพสถามท่านครับ
เดี๋ยวถ้าผมติดขัดตรงไหน แล้วจะมาถามท่านต่อไป หวังว่าท่าน คงไม่ว่าอะไรน่ะครับ ถ้าผมถามจุกจิก
ขอบคุณครับ
Re: ป้อนข้อมูลผ่านฟอร์ม
Posted: Wed Sep 26, 2012 1:45 pm
by snasui

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

Re: ป้อนข้อมูลผ่านฟอร์ม
Posted: Wed Oct 17, 2012 6:11 pm
by kio2002
เรียนท่านอาจารย์ครับ
รบกวนท่านปรับโค้ดให้หน่อยครับ
1 คืออยากให้ตรงช่องชื่อเสา ขึ้นตัวพิมพ์ใหญ่อัติโนมัติ หลังจากที่ Enter ไปแล้ว
2 ตรงช่อง (กว้าง_W), (ยาวฐาน_L) อยากให้มันขึ้นตัวเลขเต็มครับ อย่างเช่นเราพิมพ์ 0.2 พอเรา Enter ให้มันขึ้น 0.20 หรือ 0.200 ครับ
3 ตรงช่องจำนวนเหล็ก A และจำนวนชุด ให้มันโชว์เลขอัติโนมัติตามที่เราต้องการให้มันโชว์
แต่เราสามารถแก้ไขตอนที่เราบันทึกค่าได้
4 ไม่ให้ปุ่ม Add มันโชว์จนกว่าเราจะป้อนค่าช่อง (ยาวฐาน_L) ครับ (เพื่อป้องกัน Error)
ผมได้แนบไฟล์ และได้เอารูปมาลงให้ท่านดูด้วยครับ
ขอบคุณท่านมากครับ

Re: ป้อนข้อมูลผ่านฟอร์ม
Posted: Wed Oct 17, 2012 6:17 pm
by snasui

Code ในแต่ละข้อที่ถามอยู่ที่ Module ใด, Procedure ใด ลองโพสต์มาดูและบอกว่าที่ทำไปแล้วนั้นติดตรงส่วนใดด้วยครับ
Re: ป้อนข้อมูลผ่านฟอร์ม
Posted: Wed Oct 17, 2012 6:45 pm
by snasui

กรณีไม่ได้โพสต์ถามเรื่องเดียวกันต่อเนื่องกันมาควรตั้งเป็นกระทู้ใหม่ เพื่อที่ว่าหากเจ้าของกระทู้เข้ามาถามต่อในส่วนของตนเองจะได้ไม่เกิดความสับสน
Re: ป้อนข้อมูลผ่านฟอร์ม
Posted: Thu Oct 18, 2012 10:40 pm
by kio2002
ขอโทษครับ ที่ใช้กระทู้ของคนอื่นในการโพส แต่ว่าขอโจทย์นี้ให้เสร็จไปก่อนได้ไหมครับ
Code อยู่ที่ UserForm1
1 ติดตรงที่ช่อง Text c1-0 (ชื่อเสา) คืออยากให้มันเป็นตัวพิมพ์ใหญ่อัติโนมัติครับ โดยที่เราไม่ต้องกด Caps lock เวลาพิมพ์ อย่างเช่นเราพิมพ์
c1-0 แล้วให้มันขึ้น C1-0 เป็นตัวพิมพ์ใหญ่หลังจากที่เรา Enter ครับ
2 ตรงที่ช่อง Text .2 (กว้าง_W) อยากให้มันเป็นตัวเลขเต็มจำนวนตามที่เราต้องการครับ อย่างเราพิมพ์ .2 แล้วให้มันขึ้น 0.200 หลังจาก Enter
3 ตรงช่อง Text จำนวนเสา ให้มันขึ้นเลข 4 ในขณะที่เราคลิกเข้าฟอร์ม โดยที่เราไม่ต้องพิมพ์ครับ
4 ก็คือไม่อยากให้ปุ่ม Add มันโชว์ ขณะที่เราคลิกเข้าฟอร์ม จนกว่าเราจะป้อน Text ลงช่องชื่อเสา อย่างเช่นเราพิมพ์ c1-0 Enter แล้วค่อยให้ปุ่ม Add มันโชว์ครับ
4 หัวข้อนี่แหละครับ ที่ผมอยากรู้ แต่ไม่รู้จะปรับโค้ดยังไง แต่ตรงส่วนอื่นไม่ติดปัญหาอะไร แต่อยากให้ท่านช่วยปรับโค้ด 4 หัวข้อนี้ให้หน่อย
ขอบคุณท่านมากครับ แต่ไม่รู้ว่าท่านเข้าใจตามที่ผมอธิบายรึเปล่า
Re: ป้อนข้อมูลผ่านฟอร์ม
Posted: Thu Oct 18, 2012 10:41 pm
by snasui
kio2002 wrote:ขอโทษครับ ที่ใช้กระทู้ของคนอื่นในการโพส แต่ว่าขอโจทย์นี้ให้เสร็จไปก่อนได้ไหมครับ
เมื่อทราบแล้วควรปฏิบัติครับ
Re: ป้อนข้อมูลผ่านฟอร์ม
Posted: Sun Oct 21, 2012 10:58 am
by kio2002
ตั้งกระทู้ใหม่แล้วครับ