: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

On Error GoTo Error

ฟอรัมถาม-ตอบปัญหาการใช้งานสูตรและฟังก์ชัน 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. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
Totem
Silver
Silver
Posts: 650
Joined: Fri Oct 11, 2013 7:52 pm
Excel Ver: 365 , 2007

On Error GoTo Error

#1

Post by Totem »

เรียน อาจารย์และเพื่อนสมาชิก

:D ได้ใช้ On Error GoTo ErrorHandler

ตัวอย่าง

Code: Select all

With Workbooks(Book_a).Sheets(Sheet_r).Select

On Error GoTo ErrorHandler
        Workbooks(Book_1).Sheets(Sheet_A).Range("A1").CurrentRegion.Offset(0, 0). _
        SpecialCells(xlCellTypeVisible).Copy
        
        Range("A1").PasteSpecial xlPasteValuesAndNumberFormats
        Application.CutCopyMode = False
        Resume Next        
ErrorHandler:


On Error GoTo ErrorHandler
        Workbooks(Book_2).Sheets(Sheet_B).Range("A1").CurrentRegion.Offset(0, 0). _
        SpecialCells(xlCellTypeVisible).Copy
        
        Range("G1").PasteSpecial xlPasteValuesAndNumberFormats
        Application.CutCopyMode = False
        Resume Next        
ErrorHandler:

        Workbooks(Book_3).Sheets(Sheet_C).Range("A1").CurrentRegion.Offset(0, 0). _
        SpecialCells(xlCellTypeVisible).Copy
        
        Range("P1").PasteSpecial xlPasteValuesAndNumberFormats
        Application.CutCopyMode = False
 
End With

End Sub
เงือนไข หากไปเปิด Workbooks(Book_1).Sheets(Sheet_A).Range("A1") และหรือ
Workbooks(Book_2).Sheets(Sheet_B).Range("A1") และหรือ
Workbooks(Book_3).Sheets(Sheet_C).Range("A1") และหรือ

ให้ On Error GoTo ErrorHandler

เช่น ต้องการ copy โดยเปิด Workbooks(Book_3).Sheets(Sheet_C).Range("A1") แต่ไม่ได้เปิด Workbooks(Book_1)และ Workbooks(Book_1) ให้ข้ามไปหา Workbooks(Book_3)

แล้วพบปัญหาว่า ไม่สามารถใช้ได้ จะขึ้นข้อความ Duplicate declaration in current scope
ถ้าใช้ On Error GoTo ErrorHandler เพียงข้าม Workbooks(Book_1) ไปใช้ได้ แต่ถ้าเป็น 2 Workbooks ไม่ได้ครับ

ช่วยปรับ Code หรือมีวิธีอื่นที่ดีกว่าการใช้คำสั่ง On Error GoTo ErrorHandler ขอบคุณครับ
User avatar
bank9597
Guru
Guru
Posts: 3868
Joined: Wed Aug 17, 2011 11:49 am

Re: On Error GoTo Error

#2

Post by bank9597 »

ลองปรับโค๊ดตามนี้ดูครับ

Code: Select all

With Workbooks(Book_a).Sheets(Sheet_r).Select

On Error GoTo ErrorHandler
        Workbooks(Book_1).Sheets(Sheet_A).Range("A1").CurrentRegion.Offset(0, 0). _
        SpecialCells(xlCellTypeVisible).Copy
        
        Range("A1").PasteSpecial xlPasteValuesAndNumberFormats
        Application.CutCopyMode = False
        Resume Next        
ErrorHandler:


On Error GoTo ErrorHandler
        Workbooks(Book_2).Sheets(Sheet_B).Range("A1").CurrentRegion.Offset(0, 0). _
        SpecialCells(xlCellTypeVisible).Copy
        
        Range("G1").PasteSpecial xlPasteValuesAndNumberFormats
        Application.CutCopyMode = False
        Resume Next
        exit sub
ErrorHandler:

        Workbooks(Book_3).Sheets(Sheet_C).Range("A1").CurrentRegion.Offset(0, 0). _
        SpecialCells(xlCellTypeVisible).Copy
        
        Range("P1").PasteSpecial xlPasteValuesAndNumberFormats
        Application.CutCopyMode = False
 
End With

End Sub
Forum Rules
  1. อย่าใช้ภาษาแชทในการตอบ-ถาม
  2. ตั้งชื่อกระทู้ให้สื่อถึงปัญหาและไม่เจาะจงตัวผู้ตอบ
  3. ให้อธิบายปัญหาและระบุคำตอบที่ต้องการมาในฟอรัม
  4. ควรแนบไฟล์ตัวอย่างมาที่ฟอรั่ม
  5. หากใช้ VBA ให้ลองเขียนมาเองก่อนเสมอ
  6. แจ้งผลการใช้งานทุกครั้งเมื่อได้รับคำตอบ
Totem
Silver
Silver
Posts: 650
Joined: Fri Oct 11, 2013 7:52 pm
Excel Ver: 365 , 2007

Re: On Error GoTo Error

#3

Post by Totem »

bank9597 wrote:ลองปรับโค๊ดตามนี้ดูครับ

Code: Select all

With Workbooks(Book_a).Sheets(Sheet_r).Select

On Error GoTo ErrorHandler
        Workbooks(Book_1).Sheets(Sheet_A).Range("A1").CurrentRegion.Offset(0, 0). _
        SpecialCells(xlCellTypeVisible).Copy
        
        Range("A1").PasteSpecial xlPasteValuesAndNumberFormats
        Application.CutCopyMode = False
        Resume Next        
ErrorHandler:


On Error GoTo ErrorHandler
        Workbooks(Book_2).Sheets(Sheet_B).Range("A1").CurrentRegion.Offset(0, 0). _
        SpecialCells(xlCellTypeVisible).Copy
        
        Range("G1").PasteSpecial xlPasteValuesAndNumberFormats
        Application.CutCopyMode = False
        Resume Next
        exit sub
ErrorHandler:

        Workbooks(Book_3).Sheets(Sheet_C).Range("A1").CurrentRegion.Offset(0, 0). _
        SpecialCells(xlCellTypeVisible).Copy
        
        Range("P1").PasteSpecial xlPasteValuesAndNumberFormats
        Application.CutCopyMode = False
 
End With

End Sub
:D เกิด error
End With without With

ผมจึงนำ End With ออก

code ทำงาน แต่ ถ้า Exit sub ใส่เข้าไป มันไม่ทำงานในส่วน

Code: Select all

        Workbooks(Book_3).Sheets(Sheet_C).Range("A1").CurrentRegion.Offset(0, 0). _
        SpecialCells(xlCellTypeVisible).Copy
        
        Range("P1").PasteSpecial xlPasteValuesAndNumberFormats
        Application.CutCopyMode = False
ซึ่งยังไม่ผลตามที่ต้องการครับ
User avatar
bank9597
Guru
Guru
Posts: 3868
Joined: Wed Aug 17, 2011 11:49 am

Re: On Error GoTo Error

#4

Post by bank9597 »

:D ถ้าไม่เห็นไฟล์แนบก็จะตอบยากครับ

ส่วนคำสั่ง On Error GoTo Error จะทำงานเมื่อเกิด Error เท่านั้น
Forum Rules
  1. อย่าใช้ภาษาแชทในการตอบ-ถาม
  2. ตั้งชื่อกระทู้ให้สื่อถึงปัญหาและไม่เจาะจงตัวผู้ตอบ
  3. ให้อธิบายปัญหาและระบุคำตอบที่ต้องการมาในฟอรัม
  4. ควรแนบไฟล์ตัวอย่างมาที่ฟอรั่ม
  5. หากใช้ VBA ให้ลองเขียนมาเองก่อนเสมอ
  6. แจ้งผลการใช้งานทุกครั้งเมื่อได้รับคำตอบ
Totem
Silver
Silver
Posts: 650
Joined: Fri Oct 11, 2013 7:52 pm
Excel Ver: 365 , 2007

Re: On Error GoTo Error

#5

Post by Totem »

bank9597 wrote::D ถ้าไม่เห็นไฟล์แนบก็จะตอบยากครับ

ส่วนคำสั่ง On Error GoTo Error จะทำงานเมื่อเกิด Error เท่านั้น

Code: Select all

Sub_On ErrorGoTo()	


On Error GoTo ErrorHandler
        Workbooks(Book_1).Sheets(Sheet_A).Range("A1").CurrentRegion.Offset(0, 0). _
        SpecialCells(xlCellTypeVisible).Copy
       
        Range("A1").PasteSpecial xlPasteValuesAndNumberFormats
        Application.CutCopyMode = False
        Resume Next       
ErrorHandler:
      On Error GoTo 0

        Workbooks(Book_2).Sheets(Sheet_B).Range("A1").CurrentRegion.Offset(0, 0). _
        SpecialCells(xlCellTypeVisible).Copy
       
        Range("G1").PasteSpecial xlPasteValuesAndNumberFormats
        Application.CutCopyMode = False

        Workbooks(Book_3).Sheets(Sheet_C).Range("A1").CurrentRegion.Offset(0, 0). _
        SpecialCells(xlCellTypeVisible).Copy
       
        Range("P1").PasteSpecial xlPasteValuesAndNumberFormats
        Application.CutCopyMode = False


End Sub
ตัวอย่างข้างต้นสามารถใช้งานได้แต่ ใช้ได้กรณีเดียวครับ

ตัวอย่าง 1.หากไม่เปิด Workbooks(Book_1) และ Workbooks(Book_2) ด้วย ให้ข้าม Error Workbooks(Book_1) และ Workbooks(Book_2) ไป แต่ Workbooks(Book_3) ทำงานได้ตามคำสั่งที่ต้องการ

2.หากไม่เปิด Workbooks(Book_1) และ Workbooks(Book_3) ด้วย ให้ข้าม Error Workbooks(Book_2) และWorkbooks(Book_3) ไป แต่ Workbooks(Book_1) ทำงานได้ตามคำสั่งที่ต้องการ
User avatar
snasui
Site Admin
Site Admin
Posts: 31257
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: On Error GoTo Error

#6

Post by snasui »

:D ช่วยเล่าว่าต้องการจะทำอะไรและปัญหาคืออะไรมาอีกรอบ จะได้เข้าใจในสิ่งที่ต้องการจะทำ จากที่เขียนมายังไม่กระจ่างครับ

การดัก Error จะดักได้ก็ต่อเมื่อเกิด Error หากไม่ Error แต่่เรามีทางเลือกในการทำงาน สามารถใช้ Select Case หรือ If เข้ามาช่วยได้

คำว่าไปเปิด เป็นการกระทำลักษณะใดครับ ในกรณีการเปิดไฟล์ ให้ตรวจสอบแค่เพียงชื่อไฟล์ก็เพียงพอ ไม่จำเป็นต้องตรวจสอบไปถึงตำแหน่งเซลล์แต่อย่างใดครับ
Totem
Silver
Silver
Posts: 650
Joined: Fri Oct 11, 2013 7:52 pm
Excel Ver: 365 , 2007

Re: On Error GoTo Error

#7

Post by Totem »

snasui wrote::D ช่วยเล่าว่าต้องการจะทำอะไรและปัญหาคืออะไรมาอีกรอบ จะได้เข้าใจในสิ่งที่ต้องการจะทำ จากที่เขียนมายังไม่กระจ่างครับ

การดัก Error จะดักได้ก็ต่อเมื่อเกิด Error หากไม่ Error แต่่เรามีทางเลือกในการทำงาน สามารถใช้ Select Case หรือ If เข้ามาช่วยได้

คำว่าไปเปิด เป็นการกระทำลักษณะใดครับ ในกรณีการเปิดไฟล์ ให้ตรวจสอบแค่เพียงชื่อไฟล์ก็เพียงพอ ไม่จำเป็นต้องตรวจสอบไปถึงตำแหน่งเซลล์แต่อย่างใดครับ
:D มีเอกสารรายงาน 1 ฉบับ ขอเรียกเป็น Workbook ชื่อ Book_report

และมีข้อมูลที่ต้องนำมาใช้ใน Book_report ซึ่งขอยกข้อมูลมา 3 ข้อมูล งานจริงมีมากว่านั้น ในแต่ละข้อมูลอยู่คนละไฟล์

ข้อมูลที่ 1 เป็น Book_1

ข้อมูลที่ 2 เป็น Book_2

ข้อมูลที่ 2 เป็น Book_3

ทั้ง 3 ข้อมูล อยู่คนละ Workbooks

จึงเขียน code ให้ Book_report คัดลอกข้อมูลใน Book_1,2,3 มาใช้งานในแต่ละเดือน

ซึ่งในแต่ละเดือนนั้น บางเดือนอาจไม่มีข้อมูลที่ 1 แต่มี ข้อมูล 2,3 หรือ บางเดือนอาจมีข้อมูลที่ 2 ไม่มีข้อมูล 1,3

มีความไม่แน่นอน หากในเดือนที่มีข้อมูลครบทั้ง 3 ข้อมูล (ครบทุกWorkbooks) การคัดลอกก็จะไม่มีปัญหา

แต่หากไม่ครบ เกิดปัญหา Error เพราะไฟล์ Workbooks นั้นๆ ไม่มี ผมจึงใช้ On Error GoTo ErrorHandler

เข้าไปจับ ให้สามารถข้าม Error นั้นๆ ได้ แต่เมื่อทำแล้ว ผมใส่ code On Error GoTo ErrorHandler ใช้ได้แค่

ดัก Error ได้ครั้งเดียว ใส่เพิ่ม code เข้าไปอีกแล้วพบปัญหาว่า ไม่สามารถใช้ได้ จะขึ้นข้อความ

Duplicate declaration in current scope น่าจะเกิดจากมีการใช้คำสั่ง On Error GoTo ErrorHandler ซ้ำกัน

จึงต้องการให้ปรับ code ให้ หรือถ้ามีวิธีอื่นที่ดีกว่าขอ code ตัวอย่าง โดยไม่ใช้ On Error GoTo ก็ได้ครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 31257
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: On Error GoTo Error

#8

Post by snasui »

:D แนบไฟล์ตัวอย่างพร้อม Code พร้อมไฟล์ต้นทางที่จะใช้ในการทดสอบ จะได้ช่วยดูได้ครับ
Totem
Silver
Silver
Posts: 650
Joined: Fri Oct 11, 2013 7:52 pm
Excel Ver: 365 , 2007

Re: On Error GoTo Error

#9

Post by Totem »

snasui wrote::D แนบไฟล์ตัวอย่างพร้อม Code พร้อมไฟล์ต้นทางที่จะใช้ในการทดสอบ จะได้ช่วยดูได้ครับ
:D ตัวอย่าง code

Code: Select all

Sub OnErrorGoTO()

Dim Book_report As String


Book_report = "report.xlsm"
Book_1 = "1.xls"
Book_2 = "2.xls"
Book_3 = "3.xls"

Sheet_report = "report"
Sheet_A = "A"
Sheet_B = "B"
Sheet_C = "C"


With Workbooks(Book_report).Sheets(Sheet_report).Select


On Error GoTo ErrorHandler
        Workbooks(Book_1).Sheets(Sheet_A).Range("A1").CurrentRegion.Offset(0, 0). _
        SpecialCells(xlCellTypeVisible).Copy
       
        Range("A1").PasteSpecial xlPasteValuesAndNumberFormats
        Application.CutCopyMode = False
        Resume Next
        
ErrorHandler:

      On Error GoTo 0
      
On Error GoTo ErrorHandler

        Workbooks(Book_2).Sheets(Sheet_B).Range("A1").CurrentRegion.Offset(0, 0). _
        SpecialCells(xlCellTypeVisible).Copy
       
        Range("G1").PasteSpecial xlPasteValuesAndNumberFormats
        Application.CutCopyMode = False
        Resume Next
        
ErrorHandler:

        On Error GoTo 0
        
On Error GoTo ErrorHandler
        
        Workbooks(Book_3).Sheets(Sheet_C).Range("A1").CurrentRegion.Offset(0, 0). _
        SpecialCells(xlCellTypeVisible).Copy
       
        Range("P1").PasteSpecial xlPasteValuesAndNumberFormats
        Application.CutCopyMode = False
        Resume Next
        
ErrorHandler:

        On Error GoTo 0


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: 31257
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: On Error GoTo Error

#10

Post by snasui »

:D แนบไฟล์ข้อมูลที่เกี่ยวข้องมาด้วยครับ
Totem
Silver
Silver
Posts: 650
Joined: Fri Oct 11, 2013 7:52 pm
Excel Ver: 365 , 2007

Re: On Error GoTo Error

#11

Post by Totem »

snasui wrote::D แนบไฟล์ข้อมูลที่เกี่ยวข้องมาด้วยครับ
:D แนบไฟล์มาให้แล้วครับ
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 31257
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: On Error GoTo Error

#12

Post by snasui »

:D กรณีมี ErrorHandler หลายตัวจะให้ชือซ้ำกันไม่ได้ Code ควรอยู่ใน Form ตามด้านล่างครับ

Code: Select all

Sub OnErrorGoTO()
    
    Dim Book_report As String
    
    Book_report = "report.xlsm"
    Book_1 = "1.xls"
    Book_2 = "2.xls"
    Book_3 = "3.xls"
    
    Sheet_report = "report"
    Sheet_A = "A"
    Sheet_B = "B"
    Sheet_C = "C"
        
    With Workbooks(Book_report).Sheets(Sheet_report).Select
        
    On Error GoTo ErrorHandler
            Workbooks(Book_1).Sheets(Sheet_A).Range("A1").CurrentRegion.Offset(0, 0). _
            SpecialCells(xlCellTypeVisible).Copy
           
            Range("A1").PasteSpecial xlPasteValuesAndNumberFormats
            Application.CutCopyMode = False
            Resume Next
            
ErrorHandler:
    
          On Error GoTo 0
          
    On Error GoTo ErrorHandler1
    
            Workbooks(Book_2).Sheets(Sheet_B).Range("A1").CurrentRegion.Offset(0, 0). _
            SpecialCells(xlCellTypeVisible).Copy
           
            Range("G1").PasteSpecial xlPasteValuesAndNumberFormats
            Application.CutCopyMode = False
            Resume Next
            
ErrorHandler1:
    
            On Error GoTo 0
            
    On Error GoTo ErrorHandler2
            
            Workbooks(Book_3).Sheets(Sheet_C).Range("A1").CurrentRegion.Offset(0, 0). _
            SpecialCells(xlCellTypeVisible).Copy
           
            Range("P1").PasteSpecial xlPasteValuesAndNumberFormats
            Application.CutCopyMode = False
            Resume Next
            
ErrorHandler2:
    
            On Error GoTo 0
    
    End With
End Sub
Totem
Silver
Silver
Posts: 650
Joined: Fri Oct 11, 2013 7:52 pm
Excel Ver: 365 , 2007

Re: On Error GoTo Error

#13

Post by Totem »

snasui wrote::D กรณีมี ErrorHandler หลายตัวจะให้ชือซ้ำกันไม่ได้ Code ควรอยู่ใน Form ตามด้านล่างครับ

Code: Select all

Sub OnErrorGoTO()
    
    Dim Book_report As String
    
    Book_report = "report.xlsm"
    Book_1 = "1.xls"
    Book_2 = "2.xls"
    Book_3 = "3.xls"
    
    Sheet_report = "report"
    Sheet_A = "A"
    Sheet_B = "B"
    Sheet_C = "C"
        
    With Workbooks(Book_report).Sheets(Sheet_report).Select
        
    On Error GoTo ErrorHandler
            Workbooks(Book_1).Sheets(Sheet_A).Range("A1").CurrentRegion.Offset(0, 0). _
            SpecialCells(xlCellTypeVisible).Copy
           
            Range("A1").PasteSpecial xlPasteValuesAndNumberFormats
            Application.CutCopyMode = False
            Resume Next
            
ErrorHandler:
    
          On Error GoTo 0
          
    On Error GoTo ErrorHandler1
    
           W orkbooks(Book_2).Sheets(Sheet_B).Range("A1").CurrentRegion.Offset(0, 0). _
            SpecialCells(xlCellTypeVisible).Copy
           
            Range("G1").PasteSpecial xlPasteValuesAndNumberFormats
            Application.CutCopyMode = False
            Resume Next
            
ErrorHandler1:
    
            On Error GoTo 0
            
    On Error GoTo ErrorHandler2
            
            Workbooks(Book_3).Sheets(Sheet_C).Range("A1").CurrentRegion.Offset(0, 0). _
            SpecialCells(xlCellTypeVisible).Copy
           
            Range("P1").PasteSpecial xlPasteValuesAndNumberFormats
            Application.CutCopyMode = False
            Resume Next
            
ErrorHandler2:
    
            On Error GoTo 0
    
    End With
End Sub
:D ติดปัญหา Run-time error '9': Subscript out of range ตั้งแต่บรรทัดนี้ครับ

Code: Select all

W orkbooks(Book_2).Sheets(Sheet_B).Range("A1").CurrentRegion.Offset(0, 0). _
            SpecialCells(xlCellTypeVisible).Copy
โดยที่ผมไม่เปิดไฟล์ "1.xls", "2.xls" แต่ เปิดไฟล์ "3.xls" ครับ
niwat2811
Bronze
Bronze
Posts: 350
Joined: Thu Jan 06, 2011 12:51 pm
Excel Ver: 2016

Re: On Error GoTo Error

#14

Post by niwat2811 »

ลองแบบนี้ดูว่าใช้ได้ตามต้องการไหมครับ

Code: Select all

Sub test()
Dim wbk As Workbook
Dim Book_report As String
Application.ScreenUpdating = False
    Book_report = "report.xlsm"
    Book_1 = "1.xls"
    Book_2 = "2.xls"
    Book_3 = "3.xls"
    
    Sheet_report = "report"
    Sheet_A = "A"
    Sheet_B = "B"
    Sheet_C = "C"

For Each wbk In Workbooks
If wbk.Name = "1.xls" Then
    wbk.Activate
    Sheets(Sheet_A).Range("A1").CurrentRegion.Offset(0, 0). _
            SpecialCells(xlCellTypeVisible).Copy
           
            Workbooks(Book_report).Sheets(Sheet_report).Range("A1").PasteSpecial xlPasteValuesAndNumberFormats
            Application.CutCopyMode = False
End If
If wbk.Name = "2.xls" Then
    wbk.Activate
    Sheets(Sheet_B).Range("A1").CurrentRegion.Offset(0, 0). _
            SpecialCells(xlCellTypeVisible).Copy
           
            Workbooks(Book_report).Sheets(Sheet_report).Range("G1").PasteSpecial xlPasteValuesAndNumberFormats
            Application.CutCopyMode = False
End If
If wbk.Name = "3.xls" Then
    wbk.Activate
    Sheets(Sheet_C).Range("A1").CurrentRegion.Offset(0, 0). _
            SpecialCells(xlCellTypeVisible).Copy
           
            Workbooks(Book_report).Sheets(Sheet_report).Range("P1").PasteSpecial xlPasteValuesAndNumberFormats
            Application.CutCopyMode = False
End If
Next
Workbooks(Book_report).Activate
Application.ScreenUpdating = True
End Sub
Totem
Silver
Silver
Posts: 650
Joined: Fri Oct 11, 2013 7:52 pm
Excel Ver: 365 , 2007

Re: On Error GoTo Error

#15

Post by Totem »

niwat2811 wrote:ลองแบบนี้ดูว่าใช้ได้ตามต้องการไหมครับ

Code: Select all

Sub test()
Dim wbk As Workbook
Dim Book_report As String
Application.ScreenUpdating = False
    Book_report = "report.xlsm"
    Book_1 = "1.xls"
    Book_2 = "2.xls"
    Book_3 = "3.xls"
    
    Sheet_report = "report"
    Sheet_A = "A"
    Sheet_B = "B"
    Sheet_C = "C"

For Each wbk In Workbooks
If wbk.Name = "1.xls" Then
    wbk.Activate
    Sheets(Sheet_A).Range("A1").CurrentRegion.Offset(0, 0). _
            SpecialCells(xlCellTypeVisible).Copy
           
            Workbooks(Book_report).Sheets(Sheet_report).Range("A1").PasteSpecial xlPasteValuesAndNumberFormats
            Application.CutCopyMode = False
End If
If wbk.Name = "2.xls" Then
    wbk.Activate
    Sheets(Sheet_B).Range("A1").CurrentRegion.Offset(0, 0). _
            SpecialCells(xlCellTypeVisible).Copy
           
            Workbooks(Book_report).Sheets(Sheet_report).Range("G1").PasteSpecial xlPasteValuesAndNumberFormats
            Application.CutCopyMode = False
End If
If wbk.Name = "3.xls" Then
    wbk.Activate
    Sheets(Sheet_C).Range("A1").CurrentRegion.Offset(0, 0). _
            SpecialCells(xlCellTypeVisible).Copy
           
            Workbooks(Book_report).Sheets(Sheet_report).Range("P1").PasteSpecial xlPasteValuesAndNumberFormats
            Application.CutCopyMode = False
End If
Next
Workbooks(Book_report).Activate
Application.ScreenUpdating = True
End Sub
:D code ที่ให้มา นำไปปฏิบัติจริงใช้ได้ดีตามจุดประสงค์ ไม่มีสะดุด :thup: ขอขอบคุณ niwat2811 และ อาจารย์ มา ณ ที่นี้
Post Reply