: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

หาผลลัพธ์ที่ต้องการไม่ได้

ฟอรัมถาม-ตอบปัญหาการใช้งานสูตรและฟังก์ชัน Excel
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. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
yodpao.b
Gold
Gold
Posts: 1608
Joined: Tue Jul 19, 2011 2:47 pm
Excel Ver: 2013,excel standard

หาผลลัพธ์ที่ต้องการไม่ได้

#1

Post by yodpao.b »

หาผลลัพธ์ที่ต้องการไม่ได้
เรียนอาจาร์ยช่วยแก้ โคดให้ด้วยครับ
ผมเคยทำแล้วและได้ผลที่ต้องการ แต่เมื่อมาลองใช้ดูกลับใช้ไม่ได้
สังสัยคงทดลองไม่มากพอ

1.เปิดฟอร์ม UserForm7Borrow
2.แล้วเลือก "รายชื่อครุภัณฑ์"
3.แล้วเลือก"รหัส " เช่น 1000-111400084937-00ตัวที่1
สังเกตุที่ช่อง " สถานะเบิกใช้เครื่องมือ(TB30) " จะต้องขึ้นคำว่า "เบิกออกจากคลังแล้ว"
4.เปลี่ยนรหัสไปเรื่อย จนถึง 1000-111400084938-00ตัวที่1 จะต้องขึ้นคำว่า "เบิกได้"

ที่ขึ้นข้อความ "เบิกออกจากคลังแล้ว" หรือ "เบิกได้"
มันจะ ลิงค์กับเซล Sheets("ReportReturn").Range("V4") ครับ


โคดด้านล่างเป็นโคดที่ใช้อยู่ครับ

Code: Select all

Private Sub ListBox11_Click()
On Error Resume Next

Sheets("HistoryDurable").Select
MyListBox11 = ListBox11.Text
Range("F7").Select
      Do While True
            If MyListBox11 = ActiveCell.Value Then
                        TextBox1 = MyListBox11
                        TB22.Text = ActiveCell.Offset(0, 2).Value
                        TB23.Text = ActiveCell.Offset(0, 37).Value
                            TB23.Text = Format(TB23.Text, "#0.#0")
                        TB24.Text = ActiveCell.Offset(0, 38).Text
                        TB25.Text = ActiveCell.Offset(0, 1).Value
                        TB26.Text = ActiveCell.Offset(0, 6).Value
                        TB27.Text = ActiveCell.Offset(0, 36).Value
                        'TB28.Text = ActiveCell.Offset(0, 5).Value
                        TB29.Text = ActiveCell.Offset(0, 25).Value
                        TB31.Text = ActiveCell.Offset(0, 39).Value
                        TB32.Text = ActiveCell.Offset(0, 40).Text
                        
                        Sheets("ReportReturn").Range("O4") = MyListBox11
                        TB30.Text = Sheets("ReportReturn").Range("V4")
                        
                  Exit Do
            End If
               ActiveCell.Offset(1, 0).Select
 Loop

End Sub
You do not have the required permissions to view the files attached to this post.
yodpao.b
Gold
Gold
Posts: 1608
Joined: Tue Jul 19, 2011 2:47 pm
Excel Ver: 2013,excel standard

Re: หาผลลัพธ์ที่ต้องการไม่ได้

#2

Post by yodpao.b »

ผมลองปิดExcel ทั้งหมดครับ แล้วลองเปิดไฟล์ทดลองดู ใช้ได้ดีครับ ผลลัพธ์ถูกต้อง
แต่พอลองเปิดไฟล์ที่ทำจริงทิ้งไว้ แล้วกลับไปเล่นไฟล์ทดลอง ผลลัพธ์ไม่ถูกต้อง และ
ที่สำคัญอีกอย่างพอปิดไฟล์ที่ทำจริง แล้วกลับไปเล่นไฟล์ทดลอง ผลลัพธ์ก็ยังไม่ถูกต้อง

ต้องปิด Excel แล้วลองเปิดไฟล์ทดลองถึงจะใช้ได้ครับ ไม่ทราบว่าเป็นเพราะอะไร
User avatar
snasui
Site Admin
Site Admin
Posts: 31256
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: หาผลลัพธ์ที่ต้องการไม่ได้

#3

Post by snasui »

:D การใช้ ActiveCell จะต้องมั่นใจได้ว่าขณะ Run Code เรากำลังทำงาน หรือ Active อยู่ที่ไฟล์เป้าหมาย อยู่ในชีทเป้าหมาย อยู่ในเซลล์เป้าหมาย กรณีเปิดไฟล์อื่นขึ้นมาทีหลัง ActiveCell ย่อมจะเป็นของไฟล์ที่เปิดขึ้นมาทีหลังสุด หากต้องการกลับไปยังไฟล์เป้าหมาย สามารถใช้ .Selectเข้ามาช่วยครับ ยกตัวอย่างเช่น

Code: Select all

Workbook(1).Select
Sheets(1).Select
Range("a1").Select
yodpao.b
Gold
Gold
Posts: 1608
Joined: Tue Jul 19, 2011 2:47 pm
Excel Ver: 2013,excel standard

Re: หาผลลัพธ์ที่ต้องการไม่ได้

#4

Post by yodpao.b »

เรียนอาจาร์ยครับ
อาจาร์ยช่วยแก้ไขให้หน่อยครับ
จากไฟล์ที่แนบชื่อ สมุดงาน2
Code นั้นน่าจะทำงานถูกต้อง
ผมเห็นส่วนที่ผิดปกติคือ ในเซล V4 Sheets "ReportReturn"ทำงานช้ามาก
untitled.JPG
พอสัก 3 วินาที ในเซล V4 Sheets "ReportReturn" ค่าที่ได้จะเปลี่ยนไป แต่ในฟอร์มไม่เปลี่ยนดังรุปด้านล่าง
untitled1.JPG
จะแก้ปัญหาอย่างไรครับ

ขั้นตอนการทำงาน
1.เปิด ฟอร์ม UserForm7Borrow
2.คลิกเลือก 1000-111400084937-00ตัวที่6 ผลลัพธ์ที่ได้ คือ "เบิกออกจากคลังแล้ว" ทั้งในฟอร์ม และ ในเซล V4 Sheets "ReportReturn" (ถูกต้อง)
3.คลิกเลือก 1000-111400084937-00ตัวที่7 ผลลัพธ์ที่ได้ คือ "เบิกออกจากคลังแล้ว" ทั้งในฟอร์ม และ ในเซล V4 Sheets "ReportReturn" (ถูกต้อง)
4.คลิกเลือก 1000-111400084937-00ตัวที่8 ผลลัพธ์ที่ได้
- เมื่อคลิกเลือกแล้วผลลัพธ์ในครั้งแรกจะได้ดังนี้ ในฟอร์มจะขึ้น "เบิกออกจากคลังแล้ว" ส่วนในเซล V4 Sheets "ReportReturn"
ก็จะขึ้น คำว่า "เบิกออกจากคลังแล้ว" ผลลัพธ์นี้ผิด
-เมือ่ทิ้งไว้ซัก 3 วินาที ผลลัพธใน Sheets "ReportReturn" จะเปลี่ยนไปเป็น "เบิกได้" แต่ในฟอร์มยังเหมือนเดินขึ้นคำว่า"เบิก
ออกจากคลังแล้ว"

หมายเหตุ ผลลัพธ์ที่ถุกต้องคือ ทั้งสองที่ต้องเปลี่ยนค่าพร้อมกันเป็น "เบิกได้"
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 31256
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: หาผลลัพธ์ที่ต้องการไม่ได้

#5

Post by snasui »

:D ช่วยแจ้งผลว่าปัญหาที่ถามมาก่อนหน้านี้ตามด้านบนสามารถแก้ปัญหาได้แล้วหรือไม่ ถ้าไม่ ติดตรงไหน อย่างไร ค่อย ๆ ถามตอบกันไปทีละปัญหาให้จบ ๆ ไปครับ
yodpao.b
Gold
Gold
Posts: 1608
Joined: Tue Jul 19, 2011 2:47 pm
Excel Ver: 2013,excel standard

Re: หาผลลัพธ์ที่ต้องการไม่ได้

#6

Post by yodpao.b »

ปัญหาที่เคยถาม
ผมลองปิดExcel ทั้งหมดครับ แล้วลองเปิดไฟล์ทดลองดู ใช้ได้ดีครับ ผลลัพธ์ถูกต้อง
แต่พอลองเปิดไฟล์ที่ทำจริงทิ้งไว้ แล้วกลับไปเล่นไฟล์ทดลอง ผลลัพธ์ไม่ถูกต้อง และ
ที่สำคัญอีกอย่างพอปิดไฟล์ที่ทำจริง แล้วกลับไปเล่นไฟล์ทดลอง ผลลัพธ์ก็ยังไม่ถูกต้อง
ต้องปิด Excel แล้วลองเปิดไฟล์ทดลองถึงจะใช้ได้ครับ ไม่ทราบว่าเป็นเพราะอะไร
ตามที่อาจาร์ยได้อธิบายมา ผมก็พอเข้าใจหลักการอยู่ครับ คือ มันจะทำงาน
ActiveCell เป็นของไฟล์ที่เปิดขึ้นมาทีหลังสุด

ผมลองเปิดไฟล์เฉพาะ สมุดงาน1 ก็ทำงานได้ตามปกติครับ
หลังจากนั้นก็ลองเปิด เฉพาะ สมุดงาน 2 ผลลัพธ์ผิดจากที่ต้องการ
เพราะ คำลั่ง if ใน V4 ทำงานช้า ช่วยช่วยแก้ไขให้ด้วยครับ งงมาก ทำไมมันถึงไม่ทำงานตามขั้นตอน
User avatar
snasui
Site Admin
Site Admin
Posts: 31256
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: หาผลลัพธ์ที่ต้องการไม่ได้

#7

Post by snasui »

:D แนบไฟล์ที่ได้ปรับ Code แล้วมาด้วยครับ
yodpao.b
Gold
Gold
Posts: 1608
Joined: Tue Jul 19, 2011 2:47 pm
Excel Ver: 2013,excel standard

Re: หาผลลัพธ์ที่ต้องการไม่ได้

#8

Post by yodpao.b »

สงสัยโคดนี้จะผิดครับ เพราะคำสั่ง if ใน V4 ทำงานช้ามาก จึงทำให้ฟอร์มนำค่าเดิมมาแสดง

Code: Select all

Private Sub ListBox11_Click()
On Error Resume Next

Sheets("HistoryDurable").Select
MyListBox11 = ListBox11.Text
Range("F7").Select
      Do While True
            If MyListBox11 = ActiveCell.Value Then
                        TextBox1 = MyListBox11
                        TB22.Text = ActiveCell.Offset(0, 2).Value
                        TB23.Text = ActiveCell.Offset(0, 37).Value
                            TB23.Text = Format(TB23.Text, "#0.#0")
                        TB24.Text = ActiveCell.Offset(0, 38).Text
                        TB25.Text = ActiveCell.Offset(0, 1).Value
                        TB26.Text = ActiveCell.Offset(0, 6).Value
                        TB27.Text = ActiveCell.Offset(0, 36).Value
                        'TB28.Text = ActiveCell.Offset(0, 5).Value
                        TB29.Text = ActiveCell.Offset(0, 25).Value
                        TB31.Text = ActiveCell.Offset(0, 39).Value
                        TB32.Text = ActiveCell.Offset(0, 40).Text
                        
                        Sheets("ReportReturn").Select
                        Range("O4") = MyListBox11
                        TB30.Text = Range("V4")
                        
                  Exit Do
            End If
               ActiveCell.Offset(1, 0).Select
 Loop

End Sub
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 31256
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: หาผลลัพธ์ที่ต้องการไม่ได้

#9

Post by snasui »

:D ลองปรับ Code เป็นตามด้านล่างครับ

Code: Select all

Private Sub ListBox11_Click()
    'On Error Resume Next
    
    Sheets("HistoryDurable").Select
    MyListBox11 = ListBox11.Text
    Range("F7").Select
    Do
        If MyListBox11 = ActiveCell.Value Then
            TextBox1 = MyListBox11
            TB22.Text = ActiveCell.Offset(0, 2).Value
            TB23.Text = ActiveCell.Offset(0, 37).Value
            TB23.Text = Format(TB23.Text, "#0.#0")
            TB24.Text = ActiveCell.Offset(0, 38).Text
            TB25.Text = ActiveCell.Offset(0, 1).Value
            TB26.Text = ActiveCell.Offset(0, 6).Value
            TB27.Text = ActiveCell.Offset(0, 36).Value
            'TB28.Text = ActiveCell.Offset(0, 5).Value
            TB29.Text = ActiveCell.Offset(0, 25).Value
            TB31.Text = ActiveCell.Offset(0, 39).Value
            TB32.Text = ActiveCell.Offset(0, 40).Text
            
            Sheets("ReportReturn").Select
            DoEvents
            Range("O4") = MyListBox11
            TB30.Text = Range("V4")
            
            Exit Do
        End If
        ActiveCell.Offset(1, 0).Select
    Loop Until ActiveCell = ""

End Sub
สังเกตการเยื้อง Code ด้วยว่าโดยทั่วไปแล้วเยื้องแต่พอสมควร Code ที่อยู่ภายใต้ Code อื่นเท่านั้นที่จะเยื้องเข้าไป หากระดับเดียวกันไมจำเป็นต้องเยื้อง เพราะจะทำให้อ่านแล้วเข้าใจยากครับ
yodpao.b
Gold
Gold
Posts: 1608
Joined: Tue Jul 19, 2011 2:47 pm
Excel Ver: 2013,excel standard

Re: หาผลลัพธ์ที่ต้องการไม่ได้

#10

Post by yodpao.b »

ใช้ได้ครับ ขอบคุณครับ
เรียนถามอาจารย์ครับ

Code: Select all

DoEvents

Code: Select all

Loop Until ActiveCell = ""
code ด้านบน หมายถึงอะไรครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 31256
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: หาผลลัพธ์ที่ต้องการไม่ได้

#11

Post by snasui »

:D DoEvent เป็นการส่งการประมวลผลไปยัง Application เมื่อประมวลผลจบค่อยทำตาม Statement ถัดไปใน Userform ที่เป็นปัญหาเพราะว่า Application ยังประมวลผลไม่จบแต่ Userform เอาผลลัพธ์มาใช้ก่อนแล้ว

Loop Until ActiveCell = "" ความหมายตรงตัวอยู่แล้วคือ Loop ไปจนกระทั่งพบว่า ActiveCell เป็นค่าว่างจึงหยุด Loop ครับ
yodpao.b
Gold
Gold
Posts: 1608
Joined: Tue Jul 19, 2011 2:47 pm
Excel Ver: 2013,excel standard

Re: หาผลลัพธ์ที่ต้องการไม่ได้

#12

Post by yodpao.b »

ครับ เข้าใจแล้วครับ
yodpao.b
Gold
Gold
Posts: 1608
Joined: Tue Jul 19, 2011 2:47 pm
Excel Ver: 2013,excel standard

Re: หาผลลัพธ์ที่ต้องการไม่ได้

#13

Post by yodpao.b »

เรียนอาจารย์ครับ
ผมสงสัยว่าเครื่องที่บ้าน ต้องใช้คำสั่ง " DoEvent " ถึงจะทำงานถูกต้อง
แต่เครื่องที่ทำงานไม่จำเป็นต้องใช้คำสั่ง " DoEvent " ก็ทำงานถูกต้องเหมือนกัน
เพราะอะไรครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 31256
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: หาผลลัพธ์ที่ต้องการไม่ได้

#14

Post by snasui »

:D ถ้าเครื่องทำงานเร็ว มีการ Return ค่ากลับมาเร็ว จะไม่ใช้ DoEvents ก็ไม่น่าจะมีปัญหาครับ
yodpao.b
Gold
Gold
Posts: 1608
Joined: Tue Jul 19, 2011 2:47 pm
Excel Ver: 2013,excel standard

Re: หาผลลัพธ์ที่ต้องการไม่ได้

#15

Post by yodpao.b »

เข้าใจแล้วครับ
วังวู ช่ง
Silver
Silver
Posts: 811
Joined: Thu May 31, 2012 2:27 pm
Location: Laos
Excel Ver: MS Excel for office 365 MSO
Contact:

Re: หาผลลัพธ์ที่ต้องการไม่ได้

#16

Post by วังวู ช่ง »

snasui wrote::D DoEvent เป็นการส่งการประมวลผลไปยัง Application เมื่อประมวลผลจบค่อยทำตาม Statement ถัดไปใน Userform ที่เป็นปัญหาเพราะว่า Application ยังประมวลผลไม่จบแต่ Userform เอาผลลัพธ์มาใช้ก่อนแล้ว

Loop Until ActiveCell = "" ความหมายตรงตัวอยู่แล้วคือ Loop ไปจนกระทั่งพบว่า ActiveCell เป็นค่าว่างจึงหยุด Loop ครับ
:thup: :cp:

กำลังศึกษา VBA อย่างหนัก :cp:
Post Reply