Page 1 of 1

ช่วย VBA ให้ด้วยครับ

Posted: Sat Jan 26, 2013 7:26 pm
by noom5555
วิธีใช้งานดังนี้
1 เข้าไปที่ชีท Calculation
2 คลิกโซน 1 แล้วเลือกลูกค้า พร้อมกับ ใส่น้ำหนักที่ลูกค้าต้องการ
กรณีทดสอบนี้ให้เลือกตั้งแต่ชื่อมาสเตอร์โปร ถึงสปริง (เพราะข้อมูลมีสำหรับทดสอบแค่นั้น) เลือกลูกค้าแต่ละรายให้กดคำว่าเพิ่ม
3 เมื่อเลิกลูกค้าได้ครบแล้วให้กำปุ่ม ค้นหาระยะทาง
4 หน้าต่างจะเด้งไปที่ชีท Calculation 2 กดกากบาทเพื่อปิดฟอร์มล
5 กดปุ่มระยะทางประหยัดเพื่อเปลี่ยนค่าในเซลล์จากสูตรเป็นตัวเลข
6 กดปุ่มเลือกรถบรรทุกที่ใช้ได้ ทำการเลือกรถมา 1 คัน แล้วปิดฟอร์ม
7 กดปุ่มจัดรถขนส่ง โปรแกรมจะทำการหาค่าMaxบนตารางระยะทางแบบประหยัด (สีเขียวอ่อน) เมื่อได้ค่าMax จะให้ลบค่าMaxทิ้ง ให้ดูว่าช่องที่มีค่าMaxตรงกับชื่อลูกค้ารายใดบนหัวตาราง(แถว1ตั้งแต่Kเป็นต้นไป) และซ้ายมือของตาราง(คอลัมJสีชมพู) ให้ชื่อทั้งสองไปเทียบหาน้ำหนักที่ชีทCalculation คอลัมC เอาน้ำหนักของสองลูกค้ามาบวกกัน น้ำหนักลูกค้า 2รายบวกกันน้อยกว่าค่าของคอลัมF2ชีทCalculation2 ให้เอาน้ำหนักของลูกค้าทั้งสองไปลบกับคอลัมF2ชีทCalculation2
ค่าMaxตรงกับลูกค้ารายไหนให้ลบชื่อนั้นทิ้งหรือให้ค่าในเซลล์เป็น0เพื่อจะได้ไม่ต้องมีการจับคู่หาน้ำหนัก เช่น ถ้าตรงกับกาญจนาโลหะการด้านซ้าย และตรงกับเอสวีด้านบน ให้ลบชื่อ กาญจนาโลหการที่คอลัมJและลบเอสวีที่คอลัมJด้วย และให้ลบชื่อ กาญจนาโลหการที่แถว1และลบเอสวีที่แถว1ด้วย แล้วเอาเลขทะเบียนรถจากคอลัมB2 ไปใส่ในคอลัมH ให้ตรงกับช่องชื่อลูกค้าที่หายไป ถ้านอกเหนือเงื่อนไขดังกล่าว คือไม่มีอะไรเกิดขึ้น
ให้กดปุ่มจนกว่าค่าตัวเลขในตารางหายไปหมด แล้วจึงกดเลือกรถคันใหม่ ทำแบบนี้ไปเรื่อยๆจนกว่าจะจัดรถได้ทุกลูกค้า
ปัญหาคือ
1โปรแกรมไม่ยอมเพิ่มรถให้ลูกค้าสุดท้ายของรถที่สามารถบรรทุกได้
2 ลูกค้าที่ได้รับการจัดรถนั้น บนหัวตาราง และซ้ายมือของตาราง ไม่ยอมเป็น0

ผมต้องแก้ไขยังไงครับ
ขอบคุณครับ

Re: ช่วย VBA ให้ด้วยครับ

Posted: Sat Jan 26, 2013 9:36 pm
by snasui
:D คลิกตามข้อ 6 แล้วเกิด Error ตามภาพครับ

ไม่ทราบว่า License Object ของ Form ใด

การเขียนอธิบาย ช่วยวรรคระหว่างภาษาไทยกับภาษาอังกฤษ อย่าเขียนให้ติดกัน จะได้สะดวกในการอ่านครับ

Re: ช่วย VBA ให้ด้วยครับ

Posted: Sun Jan 27, 2013 10:21 am
by noom5555
เป็นของ frmVehicleAdd ครับ
คือบางครั้งก็ได้บางทีก็ไม่ได้ครับ

ขอบคุณครับ

Re: ช่วย VBA ให้ด้วยครับ

Posted: Sun Jan 27, 2013 10:47 am
by snasui
:D ควรแจ้งให้โปรแกรมรู้ว่า Object นั้นเป็นของ Form ไหนโดยการอ้างถึง Form หลักด้วยครับเป็นเช่น

Code: Select all

frmVehicleAdd.License.Text=x
ควรตัดมาเฉพาะ Form และ Code ที่เป็นปัญหาเพื่อจะได้เข้าถึงปัญหาโดยเร็วครับ

Re: ช่วย VBA ให้ด้วยครับ

Posted: Sun Jan 27, 2013 1:37 pm
by noom5555
อาจาย์ครับแล้วตรงเพิ่มส่วนไหนครับผมลองมันก็ error ครับ
ต้องแก้ไขสวนไหนครบ


Private Sub cboVehicleAdd_Change()
License = cboVehicleAdd.Text
Worksheets("Vehicle").Activate
Range("B2").Select
Do While Not IsEmpty(ActiveCell.Value)
If License = ActiveCell.Value Then
WeightLi = ActiveCell.Offset(0, 1).Value
End If
ActiveCell.Offset(1, 0).Select
Loop
Worksheets("Calculation2").Select
txtWeightLi.Value = WeightLi

End Sub

Re: ช่วย VBA ให้ด้วยครับ

Posted: Sun Jan 27, 2013 2:04 pm
by tupthai
License และWeightLi น่าจะเป็นตัวแปรรับค่า
ลองประกาศตัวแปรสองตัวนี้ครับ
Dim License, WeightLi As ....

Re: ช่วย VBA ให้ด้วยครับ

Posted: Sun Jan 27, 2013 2:31 pm
by snasui
noom5555 wrote:อาจาย์ครับแล้วตรงเพิ่มส่วนไหนครับผมลองมันก็ error ครับ
ต้องแก้ไขสวนไหนครับ
ต้องแก้ไขส่วนไหนนั้น ยังไม่สามารถบอกได้ครับ จนสามารถบอกมาก่อนว่า

License คืออะไร มาจากไหน ต้องการจะทำอะไรกับ License

จาก Error ที่เกิดขึ้น แสดงว่าที่แจ้งมาตามด้านล่างนั้น แจ้งมาไม่ถูกต้องครับ
noom5555 wrote:เป็นของ frmVehicleAdd ครับ
ลองประกาศตัวแปรตามที่คุณ tupthai แจ้งมา การประกาศตัวแปรใน Office VBA จะประกาศรวดเหมือน VB หรือ VB6 ไม่ได้เนื่องจากให้ความหมายต่างกันครับ

เช่น

Code: Select all

Dim r, s, v as Integer
ตัวที่เป็น Integer คือ v เท่านั้น ส่วนตัวอื่นเป็น Variant ทั้งหมด หากต้องการให้เป็น Integer ทุกตัวต้องประกาศเป็น

Code: Select all

Dim r As Integer, s As Integer, v As integer
เช่นนี้เป็นต้น

ปกติการไม่ประกาศตัวแปร โปรแกรมจะถือว่าเป็น Variant โดยอัตโนมัติครับ

การโพสต์ Code ให้เป็น Code ดูได้จากที่นี่ viewtopic.php?f=3&t=1187 เพื่อสะดวกต่อการอ่านและการนำไปทดสอบ