:D snasui.com ยินดีต้อนรับ :D
ยินดีต้อนรับสู่กระดานถามตอบ Excel and VBA และอื่น ๆ ที่เป็นมิตรกับทุกท่าน มีไฟล์แนบมหาศาล ช่วยให้ท่านค้นหาและติดตามศึกษาได้โดยง่าย :thup: สมาชิกท่านใดที่ยังไม่ได้ระบุ Version ของ Excel ที่ใช้งานจริง สามารถทำตาม Link นี้เพื่อจะได้รับคำตอบที่ตรงกับ Version ของท่านครับ :arrow: ระบุ Version ของ Excel
:!: โปรดทราบ :!:
  1. กรุณาอ่านกฎการใช้บอร์ด (Forum rules) ในตำแหน่งด้านบนของแต่ละบอร์ด
  2. การสมัครสมาชิก การ Login การกู้คืนรหัสผ่าน
    1. สมัครสมาชิกดูขั้นตอนได้ที่ :arrow: สมัครสมาชิก
    2. Login เข้าระบบโดยคลิกปุ่ม Login ตรงมุมขวาบนของหน้านี้ :roll:
    3. การ Login ผ่าน Facebook ดูวิธีที่ :arrow: Login ผ่าน Facebook
    4. ลืมรหัสผ่านสามารถรับรหัสใหม่ได้ที่ :arrow: Reset รหัสผ่าน
  3. มีปัญหาการใช้งาน แจ้งผู้ดูแลระบบได้ที่ :arrow: ติดต่อผู้ดูแลระบบ
  4. กำหนดการตั้งค่าส่วนตัว เช่นตั้งค่าภาษาเป็นไทยหรืออังกฤษดูได้ที่ :arrow: ตั้งค่าส่วนตัว
  5. การตั้งและตอบกระทู้ดูได้ที่ :arrow: วิธีการตั้งและตอบกระทู้
  6. การจัดรูปแบบตัวอักษรด้วย bbcode ในช่องแสดงความคิดเห็นดูได้ที่ :arrow: จัดรูปแบบตัวอักษร
  7. กำหนดขนาดตัวอักษรใน Browser ดูได้ที่ :arrow: กำหนดขนาดตัวอักษรใน Browser

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

ฟอรัมถาม-ตอบปัญหาการใช้งาน Macro และ VBA
Forum rules
  1. ไม่อนุญาตให้ใช้ภาษาแชทในการถามและตอบปัญหา ไม่ใช้คำว่า "คับ" หรือ "อ่ะครับ" แทนคำว่า "ครับ" ไม่ใช้คำว่า "เด๋ว" แทนคำว่า "เดี๋ยว" เป็นต้น เนื่องจากเมื่อแปลเป็นภาษาต่างประเทศแล้วจะให้ความหมายผิดไปจากที่ควรจะเป็น
  2. ห้ามถามโดยระบุชื่อผู้ตอบและต้องตั้งชื่อกระทู้ให้สื่อถึงปัญหาที่จะถาม ไม่ตั้งชื่อว่า ช่วยด้วยครับ, มีปัญหามาปรึกษาครับ เป็นต้น
  3. กรุณาอธิบายปัญหาและระบุคำตอบที่ต้องการมาในกระทู้ด้วยเสมอถึงแม้จะอธิบายไว้ในไฟล์แนบแล้วก็ตาม ทั้งนี้เพื่ออำนวยความสะดวกแก่เพื่อนสมาชิกในการค้นหาข้อมูล
  4. กรุณาแนบไฟล์ตัวอย่างพร้อมแสดงคำตอบที่ถูกต้องมาในไฟล์ด้วยเพื่อให้ง่ายต่อการทำความเข้าใจและสะดวกต่อการตอบคำถาม (ขนาดไฟล์ไม่เกิน 500Kb ขนาดภาพไม่เกิน 800*600 Pixel) ไม่แนบเป็น Link มาจากแหล่งอื่นที่อาจจะถูกลบทิ้งไปโดยต้นทางในภายหลัง นอกจากนี้ไม่ควรแนบไฟล์ที่มีข้อมูลสำคัญอันก่อให้เกิดความเสียหายกับตนเองและผู้อื่น
  5. กรณีเป็นคำถามเกี่ยวกับ Programming เช่น VBA, VB.Net, C#, SQL ฯลฯ ต้องลองเขียนมาเองก่อนเสมอ ถามเฉพาะที่ติดปัญหา ระบุ Module, Procedure ที่ติดปัญหาให้ชัดเจน กรุณาโพสต์ Code ให้แสดงเป็น Code คือเปิดด้วย [code] และปิดด้วย [/code] ตัวอย่างเช่น [code]dim r as range[/code] เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
  6. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
noom5555
Member
Member
Posts: 18
Joined: Fri Feb 25, 2011 1:04 pm

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

#1

Post 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

ผมต้องแก้ไขยังไงครับ
ขอบคุณครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 31253
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

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

#2

Post by snasui »

:D คลิกตามข้อ 6 แล้วเกิด Error ตามภาพครับ

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

การเขียนอธิบาย ช่วยวรรคระหว่างภาษาไทยกับภาษาอังกฤษ อย่าเขียนให้ติดกัน จะได้สะดวกในการอ่านครับ
Attachments
26-1-2556 21-33-38.png
26-1-2556 21-33-38.png (28.96 KiB) Viewed 145 times
noom5555
Member
Member
Posts: 18
Joined: Fri Feb 25, 2011 1:04 pm

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

#3

Post by noom5555 »

เป็นของ frmVehicleAdd ครับ
คือบางครั้งก็ได้บางทีก็ไม่ได้ครับ

ขอบคุณครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 31253
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

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

#4

Post by snasui »

:D ควรแจ้งให้โปรแกรมรู้ว่า Object นั้นเป็นของ Form ไหนโดยการอ้างถึง Form หลักด้วยครับเป็นเช่น

Code: Select all

frmVehicleAdd.License.Text=x
ควรตัดมาเฉพาะ Form และ Code ที่เป็นปัญหาเพื่อจะได้เข้าถึงปัญหาโดยเร็วครับ
noom5555
Member
Member
Posts: 18
Joined: Fri Feb 25, 2011 1:04 pm

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

#5

Post 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
Attachments
AA.jpg
AA.jpg (67.73 KiB) Viewed 131 times
User avatar
tupthai
Bronze
Bronze
Posts: 302
Joined: Sat Feb 04, 2012 2:49 pm

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

#6

Post by tupthai »

License และWeightLi น่าจะเป็นตัวแปรรับค่า
ลองประกาศตัวแปรสองตัวนี้ครับ
Dim License, WeightLi As ....
User avatar
snasui
Site Admin
Site Admin
Posts: 31253
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

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

#7

Post 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 เพื่อสะดวกต่อการอ่านและการนำไปทดสอบ
Post Reply