: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
🪷 คำแสดงเจตนา
ขอผลแห่งการให้ความรู้นี้ จงกลับไปยังผู้ที่เป็นเจ้าของเดิม แม้ข้าพเจ้าจะไม่รู้จักท่านก็ตาม ขอให้แสงแห่งปัญญาที่ท่านเคยจุดไว้ ได้กลับไปเติมเต็มชีวิตของท่านอีกครั้ง และขอให้เจตนาของข้าพเจ้าเป็นการคืนความดีอย่างสงบ

ปุ่มกด Macro แสดงผลไม่เหมือนกับสั่ง Run

ฟอรัมถาม-ตอบปัญหาการใช้งาน 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. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
waritthorn
Member
Member
Posts: 19
Joined: Fri May 29, 2020 3:35 pm

ปุ่มกด Macro แสดงผลไม่เหมือนกับสั่ง Run

#1

Post by waritthorn »

สอบถามวิธีแก้ไข
พอสั่ง Run ผ่าน VBA โปรแกรมสามารถทำงานได้ปกติ
แต่เมื่อ Run ผ่านปุ่มที่เชื่อมกับ VBA โปรแกรมทำงานผิดพลาด
(ไฟล์ตัวอย่างด้านล่างครับ)
รบกวนช่วยชี้แนะทีครับ
stock คลังไม้.xlsm
(60.41 KiB) Downloaded 5 times
User avatar
puriwutpokin
Guru
Guru
Posts: 3801
Joined: Fri Jan 04, 2013 9:49 pm
Location: Bangkok
Excel Ver: MS.365

Re: ปุ่มกด Macro แสดงผลไม่เหมือนกับสั่ง Run

#2

Post by puriwutpokin »

ควรแนบโค้ด ตามกฏข้อ 5 และระบุ ปัญหาว่า เกิดจากโค้ดไหน และติดตรงไหนครับ จะได้สะดวกต่อการตอบของเพื่อนๆสมาชิกครับ
:shock: :roll: :D
waritthorn
Member
Member
Posts: 19
Joined: Fri May 29, 2020 3:35 pm

Re: ปุ่มกด Macro แสดงผลไม่เหมือนกับสั่ง Run

#3

Post 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
User avatar
logic
Gold
Gold
Posts: 1511
Joined: Thu Mar 18, 2010 1:57 pm
Excel Ver: 365

Re: ปุ่มกด Macro แสดงผลไม่เหมือนกับสั่ง Run

#4

Post by logic »

มันติดที่ตอบยากเพราะไม่มีรายละเอียดว่าที่ถูกคือแบบไหน เอาอะไรจากไหนมาโชว์ เงื่อนไขคืออะไรครับ
waritthorn
Member
Member
Posts: 19
Joined: Fri May 29, 2020 3:35 pm

Re: ปุ่มกด Macro แสดงผลไม่เหมือนกับสั่ง Run

#5

Post by waritthorn »

รบกวนโหลดไฟล์ excel ของผมครับ
(ขอโทษด้วยครับ พอดีผมอธิบายไม่ค่อยเก่งครับ)
ตัวโค๊ดอยู่ใน module3 ชื่อ Sub getsize ครับ
ส่วนปุ่มmacro ที่ลิ๊งค์กับโค๊ด อยู่sheetชื่อ เบิกไม้ครับ

**สิ่งที่ไม่เข้าใจคือ มันสมควรที่จะได้ผลลัพท์เหมือนกัน แต่การสั่งผ่านปุ่มได้ค่าผิดจากการสั่งผ่านชุดคำสั่งครับ**
Attachments
stock คลังไม้.xlsm
(64.16 KiB) Downloaded 6 times
User avatar
snasui
Site Admin
Site Admin
Posts: 31191
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: ปุ่มกด Macro แสดงผลไม่เหมือนกับสั่ง Run

#6

Post by snasui »

:D ผมต้องทำอย่างไรบ้างเพื่อให้ทราบว่าผลลัพธ์ไม่เหมือนกัน ช่วยลำดับขั้นตอนการทดสอบมาเป็นขั้นเป็นตอนครับ
waritthorn
Member
Member
Posts: 19
Joined: Fri May 29, 2020 3:35 pm

Re: ปุ่มกด Macro แสดงผลไม่เหมือนกับสั่ง Run

#7

Post by waritthorn »

ผมจะพยายามอธิบายนะครับอาจารย์

ขั้นแรก
ใน VBA Module3 ใน Sub getsize
หลักการทำงานโดยย่อคือ เมื่อค้นหาเจอคำที่กำหนด จะคัดลอกช่วงข้อมูลไปตามแต่ละ Sheet ที่กำหนดครับ

โดยการสั่งทำงานผ่าน VBA โดยการกดปุ่ม F5 มันสามารถทำงานได้ตามโปรแกรม
aaa
aaa
Microsoft Visual Basic for Applications - stock คลังไม้.xlsm - [Module3 (Code)] 25_6_2563 10_04_32.png (178.76 KiB) Viewed 31 times
โปรแกรมสามารถทำงานได้
aaaa
aaaa
stock คลังไม้ - Excel 25_6_2563 10_08_43.png (76.91 KiB) Viewed 31 times
แต่เมื่อสั่งทำงานผ่านปุ่ม Macro ที่เชื่อมต่อกับ VBA
aaaaa
aaaaa
Screenshot (3).png (117.42 KiB) Viewed 31 times
waritthorn
Member
Member
Posts: 19
Joined: Fri May 29, 2020 3:35 pm

Re: ปุ่มกด Macro แสดงผลไม่เหมือนกับสั่ง Run

#8

Post by waritthorn »

ผลลัพท์ที่ได้ผิดพลาดครับ ไม่เหมือนการสั่งทำงานผ่าน VBA
Screenshot (4).png
Screenshot (4).png (90.75 KiB) Viewed 30 times
มีการทำงานในส่วนของ Select case ผิดพลาดครับอาจารย์
ผมไม่ทราบว่าเป็นเพราะอะไรครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 31191
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: ปุ่มกด Macro แสดงผลไม่เหมือนกับสั่ง Run

#9

Post by snasui »

:D ผมทดลองรันแล้วไม่เกิดความแตกต่างครับ

สิ่งที่จะเป็นปัญหาได้คือเลือกชีตอื่นไปก่อนที่จะเข้าไปรัน 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 เช่นนี้จึงจะไม่ผิดพลาดไม่ว่าจะคลิกเลือกชีตใดอยู่ก็ตามครับ
waritthorn
Member
Member
Posts: 19
Joined: Fri May 29, 2020 3:35 pm

Re: ปุ่มกด Macro แสดงผลไม่เหมือนกับสั่ง Run

#10

Post 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 ทำให้แสดงผลไม่ได้ครับ
ขอผู้รู้ช่วยชี้แนะด้วยครับ
Post Reply