Page 1 of 1
ปุ่มกด Macro แสดงผลไม่เหมือนกับสั่ง Run
Posted: Tue Jun 23, 2020 2:13 pm
by waritthorn
สอบถามวิธีแก้ไข
พอสั่ง Run ผ่าน VBA โปรแกรมสามารถทำงานได้ปกติ
แต่เมื่อ Run ผ่านปุ่มที่เชื่อมกับ VBA โปรแกรมทำงานผิดพลาด
(ไฟล์ตัวอย่างด้านล่างครับ)
รบกวนช่วยชี้แนะทีครับ
Re: ปุ่มกด Macro แสดงผลไม่เหมือนกับสั่ง Run
Posted: Tue Jun 23, 2020 5:42 pm
by puriwutpokin
ควรแนบโค้ด ตามกฏข้อ 5 และระบุ ปัญหาว่า เกิดจากโค้ดไหน และติดตรงไหนครับ จะได้สะดวกต่อการตอบของเพื่อนๆสมาชิกครับ
Re: ปุ่มกด Macro แสดงผลไม่เหมือนกับสั่ง Run
Posted: Wed Jun 24, 2020 8:38 am
by waritthorn
คือผมสั่งทำงานผ่านปุ่มmacro แต่ผลลัพท์ที่ได้ไม่เหมือนการสั่งทำงานผ่านโค๊ด VBA
ไม่ทราบว่ามันติดที่ตรงไหนรึป่าวครับ
อันนี้คือส่วนโค๊ดที่ผูกกับปุ่มที่ชื่อว่า ยืนยันการเบิก ได้ผลไม่ตรงกันครับ
Code: Select all
Sub getsize()
Dim rng As range
Dim X
Dim i As Integer
Dim R1, R2, R3 As Integer
Dim S1, S2, S3, S4, S5, S6 As Worksheet
Set S1 = ThisWorkbook.Sheets("ÃÒÂÅÐàÍÕ´äÁé")
Set S2 = ThisWorkbook.Sheets("àºÔ¡äÁé")
Set S3 = ThisWorkbook.Sheets("àºÔ¡Íº")
Set S4 = ThisWorkbook.Sheets("àºÔ¡¼èÒ")
Set S5 = ThisWorkbook.Sheets("àºÔ¡á»Å§")
Set S6 = ThisWorkbook.Sheets("àºÔ¡¢ÒÂ")
R2 = S2.range("B4", S2.range("B4").End(xlDown)).Rows.Count
For i = 1 To R2
X = Cells(i + 3, 7).Value
Select Case X
Case "ͺ"
R3 = S3.range("B2", S3.range("B2").End(xlDown)).Rows.Count
S2.range(Cells(i + 3, 2), Cells(i + 3, 9)).Copy
S3.Cells(R3 + 2, 2).PasteSpecial Paste:=xlPasteValues
S2.Cells(1, 8).Copy (S3.Cells(R3 + 2, 10))
Case "¼èÒ"
R3 = S4.range("B2", S4.range("B2").End(xlDown)).Rows.Count
S2.range(Cells(i + 3, 2), Cells(i + 3, 9)).Copy
S4.Cells(R3 + 2, 2).PasteSpecial Paste:=xlPasteValues
S2.Cells(1, 8).Copy (S4.Cells(R3 + 2, 10))
Case "á»Å§"
R3 = S5.range("B2", S5.range("B2").End(xlDown)).Rows.Count
S2.range(Cells(i + 3, 2), Cells(i + 3, 9)).Copy
S5.Cells(R3 + 2, 2).PasteSpecial Paste:=xlPasteValues
S2.Cells(1, 8).Copy (S5.Cells(R3 + 2, 10))
Case "¢ÒÂ"
R3 = S6.range("B2", S6.range("B2").End(xlDown)).Rows.Count
S2.range(Cells(i + 3, 2), Cells(i + 3, 9)).Copy
S6.Cells(R3 + 2, 2).PasteSpecial Paste:=xlPasteValues
S2.Cells(1, 8).Copy (S6.Cells(R3 + 2, 10))
Case Else
MsgBox ("END")
End Select
Next i
End Sub
Re: ปุ่มกด Macro แสดงผลไม่เหมือนกับสั่ง Run
Posted: Wed Jun 24, 2020 9:26 am
by logic
มันติดที่ตอบยากเพราะไม่มีรายละเอียดว่าที่ถูกคือแบบไหน เอาอะไรจากไหนมาโชว์ เงื่อนไขคืออะไรครับ
Re: ปุ่มกด Macro แสดงผลไม่เหมือนกับสั่ง Run
Posted: Wed Jun 24, 2020 9:49 am
by waritthorn
รบกวนโหลดไฟล์ excel ของผมครับ
(ขอโทษด้วยครับ พอดีผมอธิบายไม่ค่อยเก่งครับ)
ตัวโค๊ดอยู่ใน module3 ชื่อ Sub getsize ครับ
ส่วนปุ่มmacro ที่ลิ๊งค์กับโค๊ด อยู่sheetชื่อ เบิกไม้ครับ
**สิ่งที่ไม่เข้าใจคือ มันสมควรที่จะได้ผลลัพท์เหมือนกัน แต่การสั่งผ่านปุ่มได้ค่าผิดจากการสั่งผ่านชุดคำสั่งครับ**
Re: ปุ่มกด Macro แสดงผลไม่เหมือนกับสั่ง Run
Posted: Wed Jun 24, 2020 6:16 pm
by snasui

ผมต้องทำอย่างไรบ้างเพื่อให้ทราบว่าผลลัพธ์ไม่เหมือนกัน ช่วยลำดับขั้นตอนการทดสอบมาเป็นขั้นเป็นตอนครับ
Re: ปุ่มกด Macro แสดงผลไม่เหมือนกับสั่ง Run
Posted: Thu Jun 25, 2020 10:23 am
by waritthorn
ผมจะพยายามอธิบายนะครับอาจารย์
ขั้นแรก
ใน VBA Module3 ใน Sub getsize
หลักการทำงานโดยย่อคือ เมื่อค้นหาเจอคำที่กำหนด จะคัดลอกช่วงข้อมูลไปตามแต่ละ Sheet ที่กำหนดครับ
โดยการสั่งทำงานผ่าน VBA โดยการกดปุ่ม F5 มันสามารถทำงานได้ตามโปรแกรม

- aaa
- Microsoft Visual Basic for Applications - stock คลังไม้.xlsm - [Module3 (Code)] 25_6_2563 10_04_32.png (178.76 KiB) Viewed 38 times
โปรแกรมสามารถทำงานได้

- aaaa
- stock คลังไม้ - Excel 25_6_2563 10_08_43.png (76.91 KiB) Viewed 38 times
แต่เมื่อสั่งทำงานผ่านปุ่ม Macro ที่เชื่อมต่อกับ VBA

- aaaaa
- Screenshot (3).png (117.42 KiB) Viewed 38 times
Re: ปุ่มกด Macro แสดงผลไม่เหมือนกับสั่ง Run
Posted: Thu Jun 25, 2020 10:24 am
by waritthorn
ผลลัพท์ที่ได้ผิดพลาดครับ ไม่เหมือนการสั่งทำงานผ่าน VBA

- Screenshot (4).png (90.75 KiB) Viewed 37 times
มีการทำงานในส่วนของ Select case ผิดพลาดครับอาจารย์
ผมไม่ทราบว่าเป็นเพราะอะไรครับ
Re: ปุ่มกด Macro แสดงผลไม่เหมือนกับสั่ง Run
Posted: Thu Jun 25, 2020 10:50 pm
by snasui

ผมทดลองรันแล้วไม่เกิดความแตกต่างครับ
สิ่งที่จะเป็นปัญหาได้คือเลือกชีตอื่นไปก่อนที่จะเข้าไปรัน Macro แต่ถ้าอยู่ชีตเดียวกันก็ควรจะได้ค่าเดียวกัน
การกดปุ่มใด ๆ จะต้องเข้าไปในชีตที่มีปุ่มจึงจะคลิกปุ่มได้ แต่การรัน Macro อยู่ที่ชีตใดก็สามารถรัน Macro ได้
Code ที่เขียนระบุตำแหน่งชีต ตำแหน่งเซลล์ถูกต้องย่อมจะไม่ผิดพลาดไม่ว่าจะคลิกเลือกชีตใดเอาไว้ก่อนก็ตาม
ลักษณะของ Code ที่สร้างความผิดพลาดได้เช่น
S2.range(Cells(i + 3, 2), Cells(i + 3, 9)).Copy
Cells(i + 3, 2) และ
Cells(i + 3, 9) จะให้ผลลัพธ์เป็นค่าในเซลล์ ไม่ใช่ตำแหน่งเซลล์ที่จะนำไปใช้ใน Range ดังที่เขียนมาได้ ยกเว้นค่าในเซลล์คือตำแหน่งเซลล์ เช่นนี้จึงจะให้ตอบได้
การอ้างอิงถึง Cells ลักษณะที่เขียนมานี้ไม่ได้ระบุว่าเป็น Cells ของชีตใด ย่อมหมายถึง Cells ของชีตที่เลือกอยู่ ณ ขณะรัน Code
การอ้างอิงถึง Cells ควรระบุให้ได้ว่าเป็น Cells ของชีตใด เช่น อ้างเป็น
S2.range(S2.Cells(i + 3, 2).Address, S2.Cells(i + 3, 9).Address).Copy เช่นนี้จึงจะไม่ผิดพลาดไม่ว่าจะคลิกเลือกชีตใดอยู่ก็ตามครับ
Re: ปุ่มกด Macro แสดงผลไม่เหมือนกับสั่ง Run
Posted: Mon Jun 29, 2020 11:33 am
by waritthorn
ขอบคุณอาจารย์มากครับ
ผมแก้ไขได้แล้วตามคำแนะนำการอ้างอิง cell ของชีทครับ
ผมมีอีกคำถาม
ในส่วนของ Sheet รายละเอียดไม้
เงื่อนไขการทำงาน ถ้าใน column C ตั้งแต่ C4 พบค่าเป็น 0 ให้ลบ Row นั้นทิ้ง
Code: Select all
Sub clear0()
Dim S1, S2 As Worksheet
Dim R1 As Integer
Set S1 = Worksheets(1)
Set S2 = Worksheets(2)
R1 = S1.range("C4", S1.range("C4").End(xlDown)).Rows.Count
Dim j As Integer
For j = 1 To R1
If S1.Cells(j + 3, 8) = 0 Then
S1.Rows(j + 3).Delete Shift:=xlUp
j = j - 1
End If
Next j
End Sub
การเขียนรูปแบบนี้ทำให้เกิดข้อผิดพลาด ในส่วนที่เกี่ยวข้องกับ Function ที่เขียนขึ้นมา
พอสั่งทำงานแล้ว มีผลกระทบกับ function ทำให้แสดงผลไม่ได้ครับ
ขอผู้รู้ช่วยชี้แนะด้วยครับ