: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

Run-time error '6' Overflow ใน VBA

ฟอรัมถาม-ตอบปัญหาการใช้งาน MS Excel and 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. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
yopkub
Member
Member
Posts: 18
Joined: Thu Jan 17, 2019 6:41 pm

Run-time error '6' Overflow ใน VBA

#1

Post by yopkub »

สวัสดีครับ พอผมมีคำุถามเกี่ยวกับ Over flow error ครับ
คือ ผมเขียนโปรแกรม vba ให้เข้าไปดึงไฟล์ใน Path ที่ตั้งไว้ และ นำไฟล์ใน Path นั้นทั้งหมดมาเพิ่มข้อความที่กำหนด
จากนั้น ก็ให้ output ออกไปยัง path ที่กำหนดครับ

ถ้าผมใช้กับไฟล์ที่ขนาดไม่ใหญ่ มีไม่กี่ร้อยบรรทัด สัก 7-8 file จะไม่มีปัญหาครับ

แต่ปัญหาคือ ถ้าไฟล์ที่ผมไปวางใน Path Input มันมีขนาดใหญ่ (หลายบรรทัด)และหลายไฟล์จะเกิดปัญหา Over flow ครับ

ลอง Search ดูคือ Overflow error จะเกิดก็ต่อเมื่อ ค่าที่มันส่่งกลับมามีขนาดใหญ่กว่าตัวแปรที่กำหนด เช่น Integer ห้ามตัวเลขเกิน 32xxx อะไรประมาณนี้

แต่ที่ผมสงสัยคือ ผมไม่รู้ว่าไฟล์ vba program ที่ผมเขียนมัน Return กลับมาเป็นอะไรแล้วมันเกินได้ไงครับ

Code ตามข้างล่างครับ

Code: Select all

Sub Collect_data_from_NC_code()

    Dim myFile As String
    Dim text As String
    Dim buf As String
    Dim textline() As String
    Const TxtIn1 = "(K:"
    Const TxtIn2 = "(B:"
    Const TxtIn3 = "(S:"
    Const TxtFin = "(ORIGIN 2 NOT USE)"
    Const TxtFin2 = "(END OF FOOTER)"
    Const TxtOut0 = "POPEN;"
    Const TxtOut1 = "DPRNT[SR01*"
    Const TxtOut2 = "DPRNT[SR02*"
    Const TxtOut3 = "DPRNT[SR03*"

    
    Dim K As String
    Dim B As String
    Dim S As String
    Dim i As Integer
    Dim TxtSR01 As String
    Dim TxtSR02 As String
    Dim TxtSR03 As String
    
    
    
    Dim X As Integer



    For X = 9 To 38
    
    'Open file
    strFile_Path_In = Cells(X, 1)
    strFile_Path_Out = Cells(X, 11)
    
    'MsgBox (X)
    'MsgBox (Cells(X, 2))
    
    'strFile_Path_In = "D:\Mr.Jirawat\04_OA-support\02-MC\03_Other\Conprosys\Macro\Macro making\file1"
    'strFile_Path_Out = "D:\Mr.Jirawat\04_OA-support\02-MC\03_Other\Conprosys\Macro\Macro making\fileout2"
    
    'textline = Split(buf, vbLf)
    
    
    Open strFile_Path_In For Input As #1
        L = 1
        
        Do Until EOF(1)
        
            Line Input #1, buf
        Loop
        Close #1
        
               
        textline = Split(buf, vbLf)
        
        
        For i = 0 To UBound(textline)
        
            text = text & textline(i) & vbLf
            If InStr(textline(i), TxtIn1) > 0 Then
                
                'MsgBox (textline(i))
        
                TxtSR01 = Replace(textline(i), TxtIn1, "")
                TxtSR01 = Replace(TxtSR01, " ", "")
                TxtSR01 = Replace(TxtSR01, ")", "")
            End If
            If InStr(textline(i), TxtIn2) > 0 Then
                TxtSR02 = Replace(textline(i), TxtIn2, "")
                TxtSR02 = Replace(TxtSR02, " ", "")
                TxtSR02 = Replace(TxtSR02, ")", "")
            End If
            If InStr(textline(i), TxtIn3) > 0 Then
                TxtSR03 = Replace(textline(i), TxtIn3, "")
                TxtSR03 = Replace(TxtSR03, " ", "")
                TxtSR03 = Replace(TxtSR03, ")", "")
            End If
            
            If InStr(textline(i), TxtFin) > 0 Then
                ' Found line to insert
                text = text & TxtOut0 & vbLf
                text = text & TxtOut1 & TxtSR01 & "];" & vbLf
                text = text & TxtOut2 & TxtSR02 & "];" & vbLf
                text = text & TxtOut3 & TxtSR03 & "];" & vbLf
            End If
          
            If InStr(textline(i), TxtFin2) > 0 Then
                ' Found line to insert
                text = text & TxtOut0 & vbLf
                text = text & TxtOut1 & TxtSR01 & "];" & vbLf
                text = text & TxtOut2 & TxtSR02 & "];" & vbLf
                text = text & TxtOut3 & TxtSR03 & "];" & vbLf
                
            End If
            
        'MsgBox (textline(1))
        
        Next i
        
      'MsgBox (text)
           
           
    Open strFile_Path_Out For Output As #1
    Print #1, text
    MsgBox ("Endloop")
    text = ""
    Close #1
     
     
 
        'Range("A1").Value = Mid(text, K + 3, 5)
        'Range("A2").Value = Mid(text, B + 3, 2)
        'Range("A3").Value = Mid(text, S + 3, 4)
        
    Next X
    
        
End Sub

User avatar
snasui
Site Admin
Site Admin
Posts: 30905
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: Run-time error '6' Overflow ใน VBA

#2

Post by snasui »

:D Overflow เกิดจากการประกาศตัวแปรในขอบเขตที่น้อยกว่าที่ใช้จริง เช่น ประกาศตัวแปรเป็น Integer แต่เวลาใช้จริงเกินขอบเขตของความเป็น Integer (-32768 ถึง 32767) ก็จะเกิด Overflow

สำหรับกรณีนี้ลองประกาศตัวแปร i เป็น Long หรือ Double ดู หากยังไม่ได้ให้แนบไฟล์ที่มีปัญหาพร้อมไฟล์ที่เกี่ยวข้องมาถามกันครับ
yopkub
Member
Member
Posts: 18
Joined: Thu Jan 17, 2019 6:41 pm

Re: Run-time error '6' Overflow ใน VBA

#3

Post by yopkub »

ขอบคุณสำหรับคำแนะนำครับ

ผมทดลองเปลี่ยนตัวแปร i เป็น long หรือ Double แล้วครับ
ผลคือ ไม่เจอ Overflow error แล้วครับ แต่พอเจอไฟล์ใหญ่ (หลายบรรรทัด) มันจะประมวลผล output ให้ผมนานมากๆๆๆ
ผมทดลอง 8ไฟล์ (มีไฟล์ใหญ่ 2ไฟล์) ผมปล่อยให้เครื่องประมวล ใช้เวลาประมาณ 1ชม เลยครับ (ตอนทดลองกลั้นใจไม่กดปิดซะก่อน ผลเลยได้ออกมา Ok แต่นานมากครับ)

ผมจึงแนบไฟล์ vba ให้พี่รบกวนช่วยดูเพิ่มเติมเผื่อมีคำแนะนำไม่ให้ มันวิ่งคำนวณมากๆครับ
ส่วน ไฟล์ Input ผมจะแนบ3 ไฟล์เล็กให้ครับ (ที่คำนวณเร็วๆ) เพราะ ถ้าแนบไฟล์ใหญ่จะไม่พอพื้นที่ครับ รบกวนพี่ลอง Copy ไฟล์ข้างในเองให้มันมีหลายๆ บรรทัดมันจะใหญ่ครับ

ขอบคุณมากๆครับ
(คนใต้เหมือนกันครับ :cp: )
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30905
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: Run-time error '6' Overflow ใน VBA

#4

Post by snasui »

:D เมื่อมีการ Loop หลายไฟล์และแต่ละไฟล์มีขนาดใหญ่ โปรแกรมย่อมต้องทำงานช้าอยู่แล้ว ถือว่าเป็นปกติครับ
yopkub
Member
Member
Posts: 18
Joined: Thu Jan 17, 2019 6:41 pm

Re: Run-time error '6' Overflow ใน VBA

#5

Post by yopkub »

ขอบคุณครับ

เพิ่มเติมครับ พอมีแนวคิด ลดการเข้า loop ที่ต่างจากโปรแกรมผมไหมครับ เผื่อจะช่วยลดการเข้าลูปครับ

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

Re: Run-time error '6' Overflow ใน VBA

#6

Post by snasui »

:D ตอบเป็นแนวทางไว้ก่อนแล้วกัน ลองทำดูว่าแตกต่างจากเดิมหรือไม่อย่างไร ติดตรงไหนค่อย ๆ ถามกันต่อครับ
  1. ปรับการ Loop เฉพาะเซลล์ที่มีค่าแทนการ Loop จากบรรทัดที่ 9 ถึง 38 ถ้ามีแค่ 3 บรรทัดก็ควรจะเป็น for x = 9 to 11 เช่นนี้เป็นต้น หลักการคือหาให้ได้ว่าบรรทัดสุดท้ายที่มีค่าคือบรรทัดใดก็ให้ Loop ไปแค่บรรทัดนั้น
  2. Code สำหรับการ Loop เข้าไปในเนื้อไฟล์สามารถทำได้หลายแบบ ที่เขียนมาก็เป็นวิธีการหนึ่งคือนำข้อมูลทั้งหมดมาใส่ตัวแปรแล้วค่อยแปลงตัวแปรนั้นเป็น Array แล้วค่อย Loop สมาชิกของ Array กับอีกแบบคือ Loop ไปทีละบรรทัดของข้อมูลแล้วนำค่าหลังจากมีการปรับเปลี่ยนให้ตรงกับที่ต้องการใส่ตัวแปร Array เมื่อ Loop ครบทุกบรรทัดค่อยนำ Array นี้ไปเขียนเป็นไฟล์ใหม่
yopkub
Member
Member
Posts: 18
Joined: Thu Jan 17, 2019 6:41 pm

Re: Run-time error '6' Overflow ใน VBA

#7

Post by yopkub »

ขอบคุณครับ จะลองๆดูครับ
Post Reply