ลดขนาดไฟล์ที่เก็บ module ไว้มากๆ
ในงานที่ผมใช้ VBA นั้น ผมจะใช้ไฟล์ๆหนึ่ง เป็นที่รวบรวม module ของทั้งระบบ ทำให้มี module รวมๆกันเป็นร้อยเลยทีเดียว ที่สำคัญ...ผมเขียนไป ทดลองไป แก้ไปเรื่อยๆ ขนาดไฟล์ก็เพิ่มขึ้นเรื่อยๆ จึงเรียกเปิดใช้งานได้ช้าลงเรื่อยๆอีกเช่นกัน มาดูวิธีแก้ไขกันครับ...
จากการที่ชอบค้นคว้าของผม ทำให้บังเอิญไปพบบทความอันหนึ่ง ที่แนะนำวิธีทำให้ไฟล์โค้ดมีขนาดเล็กลง อันเกิดจากการลองผิดลองถูกขณะเขียนโค้ด ซึ่งต้องขออภัยจริงๆว่า จำไม่ได้ว่ามาจากใหน ไทยหรือเทศ แต่ก็ต้องขอขอบคุณ ไว้ ณ ที่นี้ด้วยครับผม
หลักการก็คือ
- export module ออกไปให้หมด ให้เหลือแต่ไฟล์เปล่าๆ
- save ไฟล์เปล่าๆนี้ 1 ครั้ง
- import module กลับเข้าไปเหมือนเดิม
- save อีก 1 ครั้ง
ทำตามนี้แล้ว จะเห็นขนาดไฟล์ลดลงอย่างชัดเจนครับ เนื่องจากว่าไฟล์รวมโค้ดของผม ประกอบด้วย module เป็นร้อยดังกล่าว มานั่ง export, import ทีละ module คงไม่ไหวครับ เลยได้ตัวช่วยออกมาดังนี้
Sub ExportModule()
Dim xModule, ModuleName
Application.DisplayAlerts = False
If Dir("c:\modules", vbDirectory) = "" Then
MkDir "c:\modules"
End If
For Each xModule In ThisWorkbook.VBProject.VBComponents
Application.StatusBar = xModule.Name
If xModule.Type = 1 Then
If xModule.Name <> "Module000" Then
xModule.Export filename:="c:\modules\" & xModule.Name
Set ModuleName = ThisWorkbook.VBProject.VBComponents(xModule.Name)
' remove module from thisworkbook
ThisWorkbook.VBProject.VBComponents.Remove ModuleName
'
End If
End If
Next
Application.DisplayAlerts = True
Application.StatusBar = False
End Sub
Sub ImportModule()
Dim xModule As String
xModule = Dir("c:\modules\*")
Application.DisplayAlerts = False
Do Until xModule = ""
ThisWorkbook.VBProject.VBComponents.Import "c:\modules\" & xModule
Kill "c:\modules\" & xModule
xModule = Dir()
Loop
RmDir "c:\modules"
Application.DisplayAlerts = True
End Sub
หน้่าตาดั่งข้างบนละครับ มีข้อที่ต้องระวังอยู่นิดนึง คือจะเห็นว่า ผมยกเว้น module000 เอาไว้ เพราะ module000 นี้ วางโค้ด 2 โค้ดนี้ไว้นั่นเองครับผม
โค้ดตัวอ้วน สามารถทำให้ตัวเล็กลงได้ แต่ตัวคนเขียนโค้ด ชักจะอ้วนขึ้นเสียเองแล้วละครับ เพราะวันๆเอาแต่นั่งกับนั่งเขียนโค้ดนี่แหละ...ออกกำลังกายกันบ้างนะครับ สวัสดีครับผม 
