widebase.net: vba references vba references

152
เรียบเรียงครั้งที1, วันที15 ธันวาคม 2545 widebase.net: VBA References VBA References VBA References เปนการรวบรวมคําจํากัดความ วิธีการประยุกต และคําแนะนํของ VBA Function และ VBA Statement สํ าหรับการประยุกตฟงกชัน และประโยคคําสั่ง ใน VBA (Visual Basic for Application) โดย ในสวน ประโยคคําสั่งเปนการรวบรวมเฉพาะ ประโยคคําสั่งที่ไมเกี่ยวของกับ การประกาศ (Declaration), โครง สรางการควบคุม (เชน If … Then), คุณสมบัติ, เมธอด และ event รวมถึงการควบคุมความผิดพลาด

Upload: others

Post on 16-Oct-2021

98 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: widebase.net: VBA References VBA References

เรียบเรียงครั้งที่ 1, วันที่ 15 ธันวาคม 2545

widebase.net: VBA ReferencesVBA References

VBA References เปนการรวบรวมคํ าจํ ากัดความ วิธีการประยุกต และคํ าแนะนํ า ของ VBA Function และ VBA Statement สํ าหรับการประยุกตฟงกชัน และประโยคคํ าส่ัง ใน VBA (Visual Basic for Application) โดยในสวน ประโยคคํ าส่ังเปนการรวบรวมเฉพาะ ประโยคคํ าส่ังที่ไมเกี่ยวของกับ การประกาศ (Declaration), โครงสรางการควบคุม (เชน If … Then), คุณสมบัติ, เมธอด และ event รวมถึงการควบคุมความผิดพลาด

Page 2: widebase.net: VBA References VBA References

widebase.net –VBA References

2

Abs Functionสงออกคาเปนผลลัพธของคาสัมบูรณที่คาและประเภทขอมูลเหมือนเดิม

ไวยากรณAbs(number)อากิวเมนต number เปนคาที่มีประเภทขอมูลตัวเลข หรือ Expression ที่ใหคาดังกลาว ถาคาที่สงเขา

เปนคา Null (คาวาง) จะไดผลลัพธเปนคาวาง

ลักษณะการประยุกตคาสัมบูรณเปนคาที่ไมมีเครื่องหมายนํ าหนา เชน Abs(1) และ Abs(-1) จะไดผลลัพธเปน 1

ดูเพ่ิมเติมฟงกชัน Sgn

ตัวอยางDim myNumberDim A as doubleA = 37.5myNumber = Abs(A) ' ผลลัพธ คือ 37.5myNumber = Abs(-A) ' ผลลัพธ คือ 37.5

APPActivate Statementทํ าการ activate สวน window ของโปรแกรมประยุกต

ไวยากรณAppActivate title [, wait]ไวยากรณ AppActivate มีรายละเอียดของสวนดังนี้

สวน คํ าอธิบายtitle บังคับ, เปน string expression ที่ระบุไตเติลในแถบไตเติลของ window โปรแกรม

ประยุกต ที่ตองการ activate คา task ID ที่สงออกจากฟงกชัน Shell สามารถใชแทนที่ title ในการ activate โปรแกรมประยุกต

wait ไมบังคับ, คา Boolean ระบุการเรียกโปรแกรมประยุกตตองโฟกัสกอน activateโปรแกรมประยุกตอื่น ถาเปน False (คาเริ่มตน) โปรแกรมประยุกตที่ระบุไดรับการactivate ทันที ถึงแมวาโปรแกรมประยุกตที่เรียกจะไมไดรับโฟกัส ถาเปน True การเรียกโปรแกรมประยุกต รอจนกระทั่งไดรับโฟกัส จึงจะได รับการ activate

Page 3: widebase.net: VBA References VBA References

widebase.net –VBA References

3

ลักษณะการประยุกตAppActivate เปล่ียนโฟกัสไปที่ชื่อโปรแกรมประยุกตหรือ window แตไมมีผลกระทบกับ window ทั้งกรณีเต็มจอภาพหรือลดขนาด การโฟกัสยายจาก window โปรแกรมประยุกตที่ไดรับ activate เมื่อผูใชกระทํ าการเปล่ียนโฟกัส หรือปด window การใชฟงกชัน Shell เพื่อเริ่มตนโปรแกรมประยุกต และตั้งคารูปแบบ windowการหาโปรแกรมประยุกตที่จะ activate เปนการใช title ในการเปรียบเทียบชื่อไตเติล ของแตละโปรแกรมประยุกต ถาไมพบ โปรแกรมประยุกตที่ขอความไตเติลเริ่มตนดวย title จะไดรับการ activate ถามีหลาย instance ของโปรแกรมประยุกตมีชื่อไตเติลตรงกับ title จะเลือกหนึ่ง instance

ดูเพ่ิมเติมSendKeys Statement, ฟงกชัน Shell

ตัวอยางตัวอยางการใชประโยคคํ าส่ัง AppActivate สวนประโยคคํ าส่ัง Shell ใชกับโปรแกรมประยุกตที่อยูในพารทที่ระบุ

Dim MyAppID, ReturnValue' ใน Microsoft WindowsAppActivate "Microsoft Word" ' Activate Microsoft Word' AppActivate สามารถใชสงออกคาของฟงกชัน ShellMyAppID = Shell("C:\Word\WinWord.exe", 1) ' สงออก Microsoft WordAppActivate MyAppID ' Activate Microsoft WordReturnValue = Shell("C:\Excel\Excel.exe", 1) ' สงออก Microsoft ExcelAppActivate ReturnValue ' Activate Microsoft Excel

Array Functionสงออกประเภทขอมูล Variant ที่เก็บคา array

ไวยากรณArray(arglist)arglist เปนอากิวเมนตบังคับที่ใชเครื่องหมายจุลภาค (,) แบงแตละคาอากิวเมนตซึ่งกํ าหนดใหกับ

element array ที่ไดรับการเก็บภายในประเภทขอมูล Variant ถาไมมีการระบุอากิวเมนต จะเปนการสราง array แบบ zero-length

ลักษณะการประยุกตการอางอิง element ของ array ประกอบดวยชื่อตัวแปรตามดวยวงเล็บที่เก็บคาหมายเลขดัชนี สํ าหรับระบุถึงelement ที่ตองการ ตามตัวอยาง ประโยคคํ าส่ังแรก สรางตัวแปรชื่อ A เปน Variant ประโยคคํ าส่ังที่ 2 กํ าหนด array ใหตัวแปร A ประโยคคํ าส่ังสุดทายกํ าหนดคาที่เก็บใน element ที่ 2 ไปที่ตัวแปร

Dim A As VariantA = Array(10,20,30)B = A(2)

Page 4: widebase.net: VBA References VBA References

widebase.net –VBA References

4

ขอบเขตดานลางของ array ที่สรางดวยฟงกชัน Array เปนศูนยเสมอ และแตกตางจาก array ประเภทอื่นๆ เนื่องจากไมมีผลกระทบจากขอบเขตดานลางที่ระบุดวยประโยคคํ าส่ัง Option Baseหมายเหตุตัวแปร Variant ที่ไมมีการประกาศเปน array สามารถเก็บ array ได ตัวแปรประเภท Variant สามารถเก็บarray ประเภทตางๆ ยกเวน fixed-length string และ user-defined type ถึงแมวาตัวแปร Variant เก็บ array มีแนวคิดตางจาก array ที่ element มีประเภทขอมูล Variant แต element ของ array ไดรับการเขาถึงดวยวิธีเดียวกัน

ดูเพ่ิมเติมDeftype Statement, Dim Statement, Let Statement, Option Base Statement, ประเภทขอมูล Variant

ตัวอยางตัวอยางการใชฟงกชัน Array สงออกตัวแปร Variant เก็บ array

Dim MyWeek, MyDayMyWeek = Array("Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun")' สมมตสิงออกคาขอบเขตลางเปน 1 ดวยการใชประโยคคํ าส่ัง Option BaseMyDay = MyWeek(2) ' MyDay เก็บคา "Tue"MyDay = MyWeek(4) ' MyDay เก็บคา "Thu"

ตัวอยางการประยุกตใน Excelตัวอยางการเพิ่มคาในชวง A1:C5 บน Sheet1, Sheet3 และ Sheet5 ดวยขอมูลของชวงเดียวกันบน Sheet1

x = Array("Sheet1", "Sheet3", "Sheet5")Sheet(x).FillAcrossSheets Worksheets("Sheet1").Range("A1:C5")

ตัวอยางการหาผลรวมจาก Sheet2 และ Sheet3 ไปที่ Sheet1 ดวยฟงกชัน SUMWorksheets("Sheet1").Range("A1").Consolidate _

sources := Array("Sheet2!R1C1:R37C6", "Sheet3!R1C1:R37C6"), _Function :=xlSum

ตัวอยางการเพิ่ม array ของ String ตามรายการที่เจาะจงApplication.AddCustomList Array("Computer", "Monitor", "RAM", "CD ROM", "Modem")

Asc Functionสงออกคาเปนเลขจํ านวนเต็ม (Integer) ที่ใชแสดงคารหัสตัวอักษรซึ่งตรงกับอักษรตัวแรกของขอความ

ไวยากรณAsc(string)string เปนอากิวเมนตบังคับ ซึ่งเปน string expression ที่มีอยูจริง ถา strng ไมมีตัวอักษรจะเกิด

ความผิดพลาด runt-ime

Page 5: widebase.net: VBA References VBA References

widebase.net –VBA References

5

ลักษณะการประยุกตคาที่สงออกอยูในชวง 0 ถึง 255 สํ าหรับระบบ non-DBCS, แตเปน –32768 ถึง 32767 สํ าหรับระบบ DBCSหมายเหตุ

• ฟงกชัน AscB ใชสงคาไบตแรกของขอความ แทนที่การสงคืนรหัสของตัวอักษรตัวแรก• ฟงกชัน AscW ใชสงคาเปนรหัส Unicode ถา Platform ไมสนับสนุนรหัส Unicode จะแสดงคาเชน

เดียวกับฟงกชัน Asc

ดูเพ่ิมเติมฟงกชัน Chr ตัวอยางฟงกชัน Asc เปล่ียนตัวอักษรเปนรหัสตัวอักษรDim myAscmyAsc = Asc("A") ' สงออกคา 65myAsc = Asc("a") ' สงออกคา 97myAsc = Asc("Apple") ' สงออกคา 65

Atn Functionสงออกคาเปนผลลัพธของ Arctangent ในตรีโกณมิติ โดยผลลัพธมีประเภทขอมูล Double

ไวยากรณAtn(number)อากิวเมนต number เปนคาที่มีประเภทขอมูลตัวเลข หรือ Expression ที่ใหคาดังกลาว

ลักษณะการประยุกตฟงกชัน Atn เปนคาอินเวิรส ของ tan (1 / tan) และมีผลลัพธเปนคามุมเรเดียนชวงของผลลัพธอยูระหวาง - π/2 ถึง π/2การแปลงคาองศาใหเปนเรเดียน องศา คูณ π/180การแปลงเรเดียนใหเปนองศา เรเดียน คูณ 180/π

ดูเพ่ิมเติมฟงกชัน Cos, ฟงกชัน Sin, ฟงกชัน Tan

ตัวอยางDim myAtanmyAtan = 4 * Atn(1)

Page 6: widebase.net: VBA References VBA References

widebase.net –VBA References

6

Beep Statementใหเสียงผานลํ าโพงของเครื่องคอมพิวเตอร

ไวยากรณBeep

การประยุกตความถี่ และ duration ของ beep ขึ้นกับ ฮารดแวร, ระบบซอฟตแวร และสวนประกอบตาง ๆ ของเครื่องคอมพิวเตอร

ตัวอยางDim iFor i = 1 To 3

BeepNext i

Call Statementยายตัว control ไปที่ Sub procedure, Function procedure หรือ Dynamic - link library (DLL) procedure

ไวยากรณ[Call] name [argumentlist]ไวยากรณประโยคคํ าส่ัง Call มีรายละเอียดของสวน ดังนี้

สวน คํ าอธิบายCall ไมบังคับ, คียเวิรด ถาระบุ argumentlist ตองอยูในวงเล็บ เชน Call Myproc(0)name บังคับ, ชื่อ Procedure ที่เรียกargumentlist ไมบังคับ, ใชจุลภาค (,) แบงตัวแปร, array หรือ expression เพื่อสงไปยัง procedure

สวนประกอบของ argumentlist อาจจะรวมถึงคียเวิรด ByVal หรือ ByRef เพื่ออธิบายลักษณะการสงอากิวเมนตจาก procedure ที่เรียกการใช ByVal และ ByRefสามารถใชกับ Call ไดเฉพาะเมื่อเรียก DLL procedure

การประยุกตตามปกติไมจํ าเปนใชคียเวิรด Call เมื่อเรียก procedure ถาใชคียเวิรด Call เพื่อเรียก procedure ที่ตองการ การกํ าหนดอากิวเมนต argumentlist ตองอยูในวงเล็บ ถาละคียเวิรด Call ตองไมใชวงเล็บกับ argumentlistถาใชไวยากรณ Call ในการเรียกฟงกชัน คาที่สงออกของฟงกชันจะถูกลบทิ้งการสงผาน array ไปที่ procedure ใชชื่อ array ตามดวยวงเล็บวาง

Page 7: widebase.net: VBA References VBA References

widebase.net –VBA References

7

ดูเพ่ิมเติมDeclare Statement, Function Statement, Sub Statement

ตัวอยางตัวอยางการแสดงประโยคคํ าส่ัง Call ที่ใชสงผานตัว control ไปที่ Sub procedure, Function procedure และ DLL procedure

' Call sub procedureCall PrintToDebugWindow("Hello World")' ประโยคคํ าส่ังขางบนทํ าใหตัว control ไดรบัการสงไปที่ sub procedure ตอไปนี้Sub PrintToDebugWindow(AnyString)

Debug.Print AnyString ' พมิพออก Debug windowEnd Sub' Call built-in function คาสงออกของฟงกชันถูกลบCall Shell(AppName, 1) ' AppName เกบ็พารทไฟล execute

' Call Microsoft Word DLL procedure ประโยคคํ าส่ัง Declare ตองเปน' private ใน class module แตไมใชใน โมดูลมาตรฐานPrivate Declare Sub MessageBeep Lib "User" (ByVal N As Integer)Sub CallMyDLL()

Call MessageBeep(0) ' Call windows dll procedure MessageBeep 0 ' Call โดยไมใชคียเวิรด Call

End Sub

ChDir Statementเปล่ียนไดเรคทอรี หรือโฟลเดอรปจจุบัน

ไวยากรณChDir pathpath เปนอากิวเมนตบังคับ, string expression ที่ระบุไดเรคทอรี หรือโฟลเดอร ซึ่งจะเปนไดเรคทอรี

หรือโฟลเดอรเริ่มตน path อาจจะรวมไดรฟ ถาไมระบุไดรฟ ChDir เปล่ียนไดเรคทอรี หรือโฟลเดอรบนไดรฟปจจุบัน

การประยุกตประโยคคํ าส่ัง ChDir เปล่ียนไดเรคทอรีเริ่มตน แตไมใชไดรฟเริ่มตน ตัวอยาง ถาไดรฟเริ่มตน คือ C ประโยคคํ าส่ังตอไปเปล่ียนไดเรคทอรี่เริ่มตนบนไดรฟ D แต C ยังคงเปน ไดรฟเริ่มตนChDir “D:\TMP”

ดูเพ่ิมเติมChDrive Statement, CurDrive Statement, ฟงกชัน Dir, MkDir Statement, RmDir Statement

ตัวอยางตัวอยางประโยคคํ าส่ัง ChDir เพื่อเปล่ียนไดเรคทอรี หรือโฟลเดอรปจจุบัน

Page 8: widebase.net: VBA References VBA References

widebase.net –VBA References

8

' เปลีย่นไดเรคทอรีหรือโฟลเดอรปจจุบันไปที่ "MYDIR"ChDir "MyDir"

' การเปลีย่นไดเรคทอรีหรือโฟลเดอรไปที่ไดเรคทอรีหรือโฟลเดอรบนไดรฟ D' แตไดรฟปจจุบันยังคง เปน CChDir "D:\WINDOWS\SYSTEM"

ChDrive Statementเปล่ียนไดรฟปจจุบัน

ไวยากรณChDrive drivedrive เปนอากิวเมนตบังคับที่เปน string expression สํ าหรับการระบุไดรฟที่มีอยู ถาใหคาเปน zero-

length string (” ”) ไดรฟปจจุบันไมมีการเปลี่ยน ถาอากิวเมนต drive มีหลายตัวอักษร ChDrive ใชเฉพาะตัวอักษรตัวแรก

ดูเพ่ิมเติมChDir Statement, ฟงกชัน CurDir, MkDir Statement, RmDir Statement

ตัวอยางตัวอยางการใชประโยคคํ าส่ัง ChDir ในการเปลี่ยนไดรฟปจจุบันChDrive "D"

Choose Functionใชสํ าหรับการเลือกและสงออกคาที่เลือกจากรายการอากิวเมนต

ไวยากรณChoose(index,choice-1[,choice-2,…[,choice-n]])ฟงกชัน Choose มีไวยากรณของสวน คือ

สวน รายละเอียดindex บังคับ, เปน expression ของตัวเลขหรือฟลดที่เปนผลลัพธในคาระหวาง 1 ถึง จํ านวน

ของทางเลือก (choice) ที่มีchoice บังคับ, เปน expression ของ Variant ที่เก็บคาของแตละทางเลือก

ลักษณะการประยุกตฟงกชัน Choose สงออกคาจากรายการของอากิวเมนต choice ตามคาของอากิวเมนต index ถาคาอากิวเมนต index เปน 1 ฟงกชัน Choose จะเลือก choice แรก ถาคาอากิวเมนต index เปน 2 ฟงกชัน Choose จะเลือก choice ที่ 2 ตามลํ าดับ

Page 9: widebase.net: VBA References VBA References

widebase.net –VBA References

9

ฟงกชัน Choose สามารถใชในหาคาในรายการที่เปนไปได เชน ถาอากิวเมนต index หาคาไดเปน 3 และ อากิวเมนต choice-1 = “one”, choice-2 = “two”, และ choice-3 = “three” ฟงกชัน Choose จะสงออกคาเปน “three” การทํ างานในลักษณะนี้สามารถใชประโยชนไดดีถาอากิวเมนต index ใชหาคาใน Option groupฟงกชัน Choose จะหาคา choice ทุกทางเลือกในรายการแตจะสงออกคาเปนคาเดียว สํ าหรับเหตุผล ทํ าใหมีผลกระทบขางเคียง เชน การใชฟงกชัน MsgBox เปนสวนของ expression ในตัวเลือกทั้งหมด MsgBox จะแสดงคาสํ าหรับแตละตัวเลือกที่หาคาได แตฟงกชัน Choose จะสงออกคาเปนคาเดียวฟงกชัน Choose สงออกคาวางถาคาอากิวเมนต index นอยกวา 1 หรือมากกวาจํ านวนอากิวเมนต choice ที่มีถาคาของอากิวเมนต index ไมเปนจํ านวนเต็ม จะไดรับการปรับใหเปนจํ านวนเต็มกอนการหาคา

ดูเพ่ิมเติมฟงกชัน IIf, Select Case Statement, ฟงกชัน Switch

วิธีการประยุกตใน Accessฟงกชัน Choose สามารถใชในตัว control บนฟอรมหรือรายงานใน Microsoft Access ตัวอยางเชน การใชฟงกชัน Choose กํ าหนดคาของตัว control เพื่อแสดคาตามคาของฟลดอื่น ใหตั้งคาคุณสมบัติ ControlSourceของตัว control ดวย expression ของฟงกชัน Choose ตามตัวอยางตอไปนี้ ไดใชการกํ าหนด expression ในคุณสมบัติ ControlSource ของตัว control ตามคาที่หาไดจากฟลด ShipVia ใน Table ชื่อ Orders=Choose([ShipVia], "Speedy", "United", "Federal")

สํ าหรับตัวอยางขางบน ถา ShipVia มีคาเปน 1 ฟงกชัน Choose จะสงออกคาเปน “Speedy” ถา ShipVia มีคาเปน 2 ฟงกชัน Choose จะสงออกคาเปน “United” เปนตน ถา ShipVia มีคาเปน 0 ฟงกชัน Choose จะสงออกคาเปนคาวางตัวอยางตอไปแสดงการกํ าหนด expression ที่ทํ าใหการสงขอความไดถามีฟลดเก็บคา 0=Choose([ShipVia] + 1, "none", "Speedy", "United", "Federal")

หมายเหตุ ในโมดูล Visual Basic สามารถใชคํ าส่ัง Select Case เต็มรูปแบบในการสงคาออกจากกลุมของตัวเลือก (choice)

ตัวอยางตัวอยางการใชฟงกชัน Choose ในการแสดงชื่อตามคาที่อากิวเมนต index สงมาไปใน procedure ในพารามิเตอร Ind

Function GetChoice(Ind As Integer) GetChoice = Choose(Ind, "Speedy", "United", "Federal")End Function

Page 10: widebase.net: VBA References VBA References

widebase.net –VBA References

10

ตัวอยางการประยุกตใน Accessฟงกชัน Choose สามารถใชในการสรางตัว control ที่คาหาไดโดยคาของฟลดใน Table ของฐานขอมูล เชน สมมติใหมี Table ชื่อ Shippers ที่มีฟลด ShipperID ซึ่งสามารถสรางตัว control แบบคํ านวณบนฟอรมในการแสดงขอความของชื่อผูสงตามคาที่หาไดในฟลด ShipperID=Choose([ShipperID], "Speedy", "United", "Federal")

Chr Function, Chr$ Functionฟงกชัน Chr สงออกคาเปนประเภทขอมูล Variant (String) ที่เปนตัวอักษรซึ่งตรงกับรหัสอักษรฟงกชัน Chr$ สงออกคาเปนประเภทขอมูล String ที่เปนตัวอักษรซึ่งตรงกับรหัสอักษร

ไวยากรณChr(charcode)Chr$(charcode)อากิวเมนต charcode ตองเปนเลขจํ านวนเต็มชนิด Long ที่สามารถระบุตัวอักษร

ลักษณะการประยุกตตัวเลข 0 – 31 เปนคามาตรฐาน รหัสแบบ nonprintable ASCII code เชน Chr(10) สงคาการเลื่อนบรรทัด ชวงปกติของ charcode คือ 0 – 255 แตถาเปนระบบ DBCS คาของชวงเปน –32768 ถึง 32767

หมายเหตุ• ฟงกชัน ChrB ใชสงคาไบตขอมูลของขอความ แทนที่การสงออกตัวอักษร ซึ่งอาจจะเปนหนึ่งหรือสอง

ไบต• ฟงกชัน ChrW ใชสงคาเปนขอความตามรหัส Unicode ถา Platform ไมสนับสนุนรหัส Unicode จะ

แสดงคาเชนเดียวกับฟงกชัน Chr

ดูเพ่ิมเติมฟงกชัน Asc, ฟงกชัน Str

ตัวอยางฟงกชัน Chr เปล่ียนรหัสตัวเลขเปนตัวอักษรDim myChrmyChr = Chr("65") ' สงออกคา AmyChr = Chr("97") ' สงออกคา amyChr = Chr("62") ' สงออกคา >myChr = Chr("37") ' สงออกคา %

การเวนบรรทัดใน MsgBox โดยใช Chr(13)msgText = "Caution" & Chr(13) & "When open this door"MsgBox msgText

Page 11: widebase.net: VBA References VBA References

widebase.net –VBA References

11

Close Statementรวมถึง input / output (I/O) ที่เปดไฟลดวยการใชประโยคคํ าส่ัง Open

ไวยากรณClose [filenumberlist]filenumberlist เปนอากิวเมนตไมบังคับ, สามารถเปนหลายหมายเลข ตามไวยากรณนี้ โดยที่

filenumber เปนหมายเลขไฟลที่มีจริง[[#]filenumber] [,[#]filenumber]…

การประยุกตถาละอากิวเมนต filenumberlist ไฟลที่แอคทีฟ ซึ่งเปดโดยประโยคคํ าส่ัง Open จะไดรับการปดทั้งหมดเมื่อปดไฟลที่เปดสํ าหรับ Output หรือ Append บัฟเฟอรสุดทายของผลลัพธจะไดรับการเขียนไปที่บัฟเฟอรของระบบปฏิบัติสํ าหรับไฟล พื้นที่บัฟเฟอรทั้งหมดที่เกี่ยวของกับไฟลที่ปดจะไดรับการปลอยเมื่อประมวลผลประโยคคํ าส่ัง Close ความสัมพันธระหวางไฟลกับหมายเลขไฟลจะส้ินสุดลง

ดูเพ่ิมเติมEnd statement, Open statement, Reset statement, Stop statement

ตัวอยางตัวอยางการใชประโยคคํ าส่ัง Close เพื่อปดไฟล 3 ไฟลที่เปดสํ าหรับ Output

Dim i, FileNameFor i = 1 To 3

FileName = "TEST" & iOpen FileName For Output AS # iPrint # i, "This is a test"

Next iClose

Command Functionสงออกคาเปนอากิวเมนตของ Command line ใชในการเริ่มโปรแกรม Visual Basic หรือโปรแกรมที่พัฒนาดวย Visual Basic

ไวยากรณCommandอากิวเมนต drive ไมบังคับ ซึ่งมีคาเปน Expression ของขอความที่ระบุ Drive ที่มีอยูจริง ถาไมมีการ

กํ าหนด drive หรือ drive เปน zero-length string (“”) ฟงกชัน CurDir จะสงคาของ Drive ปจจุบัน

Page 12: widebase.net: VBA References VBA References

widebase.net –VBA References

12

ลักษณะการประยุกตเมื่อใชภาษา Visual Basic จาก command line โดยสวนตางๆของ command line ที่ตามดวย /cmd ไดรับการสงไปที่โปรแกรมในฐานะอากิวเมนตของ command line ในตัวอยางตอไป cmdlineargs แสดงสารสนเทศของอากิวเมนตที่สงออกโดยฟงกชัน CommandVB = /cmd cmdlineargs

สํ าหรับการพัฒนาโปรแกรมประยุกตดวย Visual Basic และคอมไพลเปนไฟล .exe ฟงกชัน Command สงออกอากิวเมนตที่ปรากฏภายหลังชื่อของโปรแกรมประยุกตบน command lineMyApp cmdlineargs

ในการคนหาอากิวเมนต command line สามารถเปลี่ยนการอินเตอรเฟซกับผูใชโปรแกรมประยุกต

การประยุกตใน Accessการเปลี่ยนอากิวเมนต command line กับฐานขอมูลที่เปดอยู ใหไปที่เมนู Tools เลือกคํ าส่ัง Options บนแท็บAdvanced ของไดอะลอกบอกซ Options ปอนอากิวเมนตใหมใน Command-Line Arguments box ฟงกชัน Command จะสงออกอากิวเมนตใหมที่ปอนเขาไปเมื่อฟงกชัน Command ไดรับการใชนอกจากคํ าส่ัง Visual Basic ในโมดูล ตองมีการเพิ่มวงเล็บหลังฟงกชัน เชน การใชฟงกชัน Command ใน text box บนฟอรม ตองตั้งคาคุณสมบัติ ControlSource ของ text box เปนexpression ดังนี้=Command()

ตัวอยางตัวอยางการใชฟงกชัน Command ดึงอากิวเมนต command line ในฟงกชันที่สงออกเปน array

' ในสวนการประกาศDim ArgArray() As Variant

Function GetCommandLine(Optional MaxArgs) ' ประกาศตัวแปร Dim C, CmdLine, CmdLnLine, InArg, I, NumArgs ' ตรวจสอบ MaxArgs If IsMissing(MaxArgs) Then MaxArgs = 10 ' ทํ าให array มขีนาดถูกตอง ReDim ArgArray(MaxArgs) Numarg = 0 InArg = False

' ดึงอากิวเมนต command line CmdLine = Command() CmdLnLine = Len(CmdLine)

' เขาสู command line ทีละ 1 ตัวอักษร For I = 1 To CmdLnLine C = Mid(CmdLine, I, 1)

' ตรวจสอบ ชองวางหรือแท็บ If C <> "" And C <> vbTab Then ' ตรวจสอบอากิวเมนต If Not InArg Then

Page 13: widebase.net: VBA References VBA References

widebase.net –VBA References

13

' เริม่อากวิเมนตใหม ทดสอบอากิวเมนตมากเกินไป If NumArgs = MaxArgs Then Exit For NumArgs = NumArgs + 1 InArg = True End If ' เพิม่ตวัอักษรไปที่อากิวเมนตปจจุบัน ArgArray(NumArgs) = ArgArray(NumArgs) + C Else ' พบ ชองวางหรือแท็บ ตั้งคา InArg เปน False InArg = False End If Next I

' ปรับขนาด array ใหเพยีงพอกับการเก็บอากิวเมนต ReDim Preserve ArgArray(NumArgs) ' สงออก array ในชื่อฟงกชัน GetCommandLine = ArgArray()

End Function

Cos Functionสงออกคาเปนผลลัพธของคา Cosine ของมุม โดยมีประเภทขอมูล Double

ไวยากรณCos(number)อากิวเมนต number เปนคาที่มีประเภทขอมูลตัวเลข หรือ Expression ที่ใหคาดังกลาว ตองเปนของ

มุมที่เปนเรเดียน

ลักษณะการประยุกตฟงกชัน Cos เปนสัดสวนของความยาวดานประชิดมุมหารดวยความยาวดานตรงขามมุมฉากคาของ Cos อยูระหวาง –1 ถึง 1การแปลงคาองศาใหเปนเรเดียน องศา คูณ π/180การแปลงเรเดียนใหเปนองศา เรเดียน คูณ 180/π

ดูเพ่ิมเติมฟงกชัน Atn, ฟงกชัน Sin, ฟงกชัน Tan

ตัวอยางDim myAngle, mySecantmyAngle = 1.5 ' กํ าหนดองศาเปน เรเดียนmySecant = 1/ Cos(myAngle) ' ค ํานวณคา Secant

Page 14: widebase.net: VBA References VBA References

widebase.net –VBA References

14

CreateObject Functionใชในการสรางออบเจค และสงออกคาเปนการอางอิงออบเจค ActiveX

ไวยากรณCreateObject(class)อากิวเมนต class ใชไวยากรณ appname.objectivetype มีรายละเอียดของสวน คือ

อากิวเมนต รายละเอียดappname บังคับ, เปนประเภทขอมูล Variant (String), เปนชื่อโปรแกรมประยุกตที่ใหออบเจคobjectivetype บังคับ, เปนประเภทขอมูล Variant (String), เปนประเภทหรือ class ของออบเจคที่

ตองการสราง

ลักษณะการประยุกตโปรแกรมประยุกตที่สนับสนุนระบบอัตโนมัติตองใหออบเจคอยางนอย 1 ประเภท เชน โปรแกรมประมวลผลคํ าจะใหออบเจค Application, ออบเจค Document และออบเจค Toolbar การสรางออบเจค ActiveX เปนการกํ าหนดออบเจคที่ตองสงคาออก โดยฟงกชัน CreateObject ใหเปนตัวแปรออบเจค

' ประกาศตัวแปรออบเจคเก็บคาการอางอิงออบเจคDim ExcelSheet As ObjectSet ExcelSheet = CreateObject("Excel.Sheet")

ในชุดคํ าส่ังขางบนเริ่มการประยุกตดวยสรางออบเจค ในกรณีนี้ คือ Microsoft Excel เมื่อมีการสรางออบเจคการอางอิงถึงออบเจคเปนการอางดวยตัวแปรออบเจคที่กํ าหนดขึ้น ในสวนตัวอยางตอไปเปนการเขาถึงคุณสมบัติ และเมธอดของการสรางออบเจคใหมดวยตัวแปรออบเจค (ExcelSheet) และออบเจค Microsoft Excelรวมถึงออบเจค Application และ Cells Collection

' ทํ าใหมองเห็นตัวแปร Excel ตลอดจนถึงออบเจค ApplicationExcelSheet.Application.Visible = True' เพิม่ขอความในเซลลแรกของเวิรกชีตExcelSheet.Application.Cells(1, 1).Value = "This is column A, row 1"' บนัทกึเวิรกชีตไวท่ี C:\test.xls directory.ExcelSheet.SaveAs "C:\TEST.XLS"' ปด Excel ดวยเมธอด Quit ของออบเจค ApplicationExcelSheet.Application.Quit' ปลอยตัวแปรออบเจคSet ExcelSheet = Nothing

ประกาศตัวแปรออบเจคดวย As Object เพราะเปนการสรางตัวแปรที่สามารถเก็บการอางอิงเปนออบเจคประเภทตางๆ แตการเขาถึงออบเจคตลอดจนถึงตัวแปรเปนขอบเขตมา เนื่องจากมีความเกี่ยวพันเมื่อเรียกใชโปรแกรม ในการสรางตัวแปรออบเจคที่เกิดจากผลลัพธของในความเกี่ยวพันที่เกิดกอน เมื่อโปรแกรมไดรับการคอมไพล การประกาศตัวแปรออบเจคนี้ทํ าไดโดยการระบุ class ID ใหดูจากตัวอยางแสดงการอางอิง

Dim xlApp As Excel.ApplicationDim xlBook As Excel.Workbook

Page 15: widebase.net: VBA References VBA References

widebase.net –VBA References

15

Dim xlSheet As Excel.WorkSheetSet xlApp = CreateObject("Excel.Application")Set xlBook = xlApp.Workbooks.AddSet xlSheet = xlBook.Worksheets(1)

การอางอิงตัวแปรแบบ Early-bound สามารถใหผลการทํ างานที่ดีกวา แตจะทํ าไดเพียงเก็บการอางอิงถึงการระบุ class ในการประกาศการสงผานออบเจคออกโดยฟงกชัน CreateObject ไปที่ฟงกชันที่คาดวาเปนออบเจคที่เปนอากิวเมนต เชน ตามคํ าส่ังที่สรางและสงผานการอางอิงไปที่ออบเจค Excel.ApplicationCall MySub (CreateObject("Excel.Application"))

ดูเพ่ิมเติมฟงกชัน GetObject, Set Statement

ตัวอยางตัวอยางการใชฟงกชัน CreateObject เพื่อกํ าหนดคาการอางอิง (xlApp)ให Microsoft Excel ซึ่งเปนการใชการอางอิงในการเขาถึงคุณสมบัติ Visible ของ Microsoft Excel แลวใชเมธอด Quit ในการปด

Dim xlApp As Object ' ประกาศตัวแปรเก็บการอางอิงSet xlApp = CreateObject("excel.application")xlApp.Visible = True ' ตัง้คาคุณสมบัติ Visible property เปน True ' ใช xlApp ในการเขาถึง Microsoft Excel และออบเจคอื่นๆxlApp.Quit ' เมือ่เสร็จใชเมธอด Quit ในการปดSet xlApp = Nothing ' ปลอยโปรแกรมประยุกต

CurDir Function, CurDir$ Functionฟงกชัน CurDir สงออกคาเปนประเภทขอมูล Variant (String) เพื่อแสดงพารทของปจจุบันฟงกชัน CurDir$ สงออกคาเปนประเภทขอมูล String เพื่อแสดงพารทของปจจุบัน

ไวยากรณCurDir[(drive)]CurDir$[(drive)]อากิวเมนต drive ไมบังคับ ซึ่งมีคาเปน Expression ของขอความที่ระบุ Drive ที่มีอยูจริง ถาไมมีการ

กํ าหนด drive หรือ drive เปน zero-length string (“”) ฟงกชัน CurDir จะสงคาของ Drive ปจจุบัน

ดูเพ่ิมเติมCurDir Statement, ChDrive Statement, MkDir Statement, RmDir Statement,

ตัวอยางตัวอยางการใชฟงกชัน CurDir เพื่อสงคาพารทปจจุบัน

' สมมตพิารทปจจุบันของ drive C เปน "C:\WINDOWS\SYSTEM" (สํ าหรับ Microsoft Windows)

Page 16: widebase.net: VBA References VBA References

widebase.net –VBA References

16

' สมมตพิารทปจจุบันของ drive D เปน "D:\EXCEL".' สมมติ drive C เปน drive ปจจุบันDim MyPath

MyPath = CurDir ' คาที่สงออก "C:\WINDOWS\SYSTEM"MyPath = CurDir("C") ' คาที่สงออก "C:\WINDOWS\SYSTEM"MyPath = CurDir("D") ' คาที่สงออก "D:\EXCEL"

CVErr Functionสงออกคาเปนประเภทขอมูล Variant ประเภทยอยเปน Error ที่เก็บหมายเลขของคาความผิดพลาดที่กํ าหนดโดยผูใช

ไวยากรณCVErr(errornumber)อากิวเมนต errornumber ตองเปนหมายเลขความผิดพลาดที่มีอยูจริง

ลักษณะการประยุกตฟงกชัน CVErr ใชในการสรางการแสดงความผิดพลาดที่ผูใชกํ าหนดใน procedure เชน ถาสรางฟงกชันที่ยอมรับหลายอากิวเมนตและสงออกคาเปนขอความ ซึ่งสามารถกํ าหนดฟงกชันในการตรวจสอบคานํ าเขาเพื่อทํ าใหม่ันใจวาคาที่นํ าเขาอยูในชวงที่ยอมรับ ถาไมตรวจสอบฟงกชันที่กํ าหนดอาจจะไมสามารถสงคาตามที่คาดได ในเหตุการณนี้ ฟงกชัน CVErr ยินยอมใหสงออกหมายเลขความผิดพลาดเพื่อแจงถึงการทํ างานฟงกชัน CVErr ไมยินยอมใหแปลงคาแบบโดยนัยของความผิดพลาดที่ปรากฏ เชน ไมสามารถกํ าหนดคาใหตัวแปรที่ไมใชประเภทขอมูล Variant ในการสงออกคาของฟงกชัน CVErr โดยตรง แตสามารถทํ าไดโดยการแปลงแบบชัดแจง (โดยใชฟงกชัน Cint, CDbl เปนตน) ของคาที่สงออกโดยฟงกชัน CVErr และกํ าหนดใหกับตัวแปรที่มีประเภทขอมูลที่เหมาะสม

ดูเพ่ิมเติมData Type Summary, ฟงกชัน IsError

ตัวอยางตัวอยางการใชฟงกชัน CVErr ในการสงคาเปน Variant และ VarType เปน vbError (10) โดย Function CalculateDouble เปนฟงกชันผูใชกํ าหนดเองใหสงออกคาความผิดพลาด ถาอากิวเมนตที่สงเขาไปไมใชตัวเลข ซึ่งสามารถใชฟงกชัน CVErr ในการสงออกคาความผิดพลาดที่กํ าหนดเองจาก Procedure ที่สรางขึ้นหรือควบคุมความผิดพลาด run-time error ใชฟงกชัน IsError ในการทดสอบคา

' เรยีก CalculateDouble ท่ีมีอากิวเมนตสรางคาความผิดพลาดSub Test() Debug.Print CalculateDouble("345.45robert")End Sub

' กํ าหนดฟงกชัน CalculateDouble FunctionFunction CalculateDouble(Number)

Page 17: widebase.net: VBA References VBA References

widebase.net –VBA References

17

If IsNumeric(Number) Then CalculateDouble = Number * 2 ' สงออกคาผลลัพธ Else CalculateDouble = CVErr(2001) ' สงออกคาความผิดพลาดที่ผูใชกํ าหนดเอง End If ' ตวัเลขEnd Function

Date Function, Date$ FunctionDate Function สงออกคาเปนประเภทขอมูล Variant (Date) โดยเปนคาวันที่ตามนาฬิกาของระบบDate$ Function สงออกคาเปนประเภทขอมูล String โดยเปนคาวันที่ตามนาฬิกาของระบบ

ไวยากรณDateDate$

.ลักษณะการประยุกตใชตั้งคาวันที่ตามนาฬิกาของระบบ

ดูเพ่ิมเติมฟงกชัน Format, ฟงกชัน Now, ฟงกชัน Time, ฟงกชัน Time$

วิธีการประยุกตใน Accessการแทรกฟงกชัน Date เพื่อแสดงคาวันที่ปจจุบันจากนาฬิกาของเครื่องในฟอรมและรายงานสามารถทํ าไดโดยคลิกที่คํ าส่ัง Date and Time บนเมนู Insert ซึ่งคํ าส่ังนี้จะสราง Text box บนฟอรมหรือรายงาน โดยตั้งคาคุณสมบัติ ControlSource เปนฟงกชัน Dateการประยุกตกับคิวรี่ หรือมาโครใหเพิ่มวงเล็บตอจากฟงกชัน เปน Date() ตัวอยางDim myDatemyDate = Date ' กํ าหนดคาวันท่ีปจจุบันจากนาฬิกาของเครื่อง

ตัวอยางการประยุกตใน Accessการกํ าหนดฟงกชัน Date ที่คุณสมบัติ ControlSource ใหกํ าหนดในรูปแบบเปน=Date()

การนํ าไปใชในการคํ านวณใน Criteria ของคิวรี่ เชน การคัดเลือกเรคคอรดที่มีอยูในชวงยอนหลังไมเกิน 90 วันใหกํ าหนดรูปแบบเปนBetween Date() and Date()-90

Page 18: widebase.net: VBA References VBA References

widebase.net –VBA References

18

Date Statementตั้งคาวันที่ปจจุบัน

ไวยากรณDate = dateสํ าหรับระบบปฏิบัติการ Microsoft Windows 95 ตองการขอกํ าหนด date เปนวันที่จาก 1 มกราคม

1980 ถึง 31 ธันวาคม 2099 สํ าหรับระบบปฏิบัติการ Microsoft Windows NT ขอกํ าหนด date ตองเปนวันที่จาก 1 มกราคม 1980 ถึง 31 ธันวาคม 2079

ดูเพ่ิมเติมฟงกชัน Date, ฟงกชัน Time, Time Statement

ตัวอยางตัวอยางการใชประโยคคํ าส่ัง Date เพื่อตั้งคาวันที่ของเครื่องคอมพิวเตอร

Dim MyDateMyDate = #Febuary 12, 1985# ' กํ าหนดวันท่ีDate = MyDate ' เปลีย่นวันท่ี ของระบบ

DateAdd Functionสงออกคาเปนประเภทขอมูล Variant (Date) และเปนวันที่ภายในชวงที่ระบุ

ไวยากรณDateAdd(interval, number, date)อากิวเมนตของฟงกชัน DateAdd มีความหมาย คือ

สวน รายละเอียดinterval บังคับ, เปน Expression แบบ String เพื่อระบุลักษณะชวงเวลาที่ตองการnumber บังคับ, เปน Expression เพื่อระบุคาของชวงเวลาที่ตองสามารถเปนคาบวก (สํ าหรับ

แสดงชวงเวลาในอนาคต) และลบ (สํ าหรับแสดงชวงเวลาในอดีต)date บังคับ,เปนวันที่ ที่ใชแสดงจุดเริ่มตนในการหาคาชวงเวลา

การตั้งคาคาอากิวเมนต Interval กํ าหนดคาไดเปน

การกํ าหนด รายละเอียดyyyy ป

Page 19: widebase.net: VBA References VBA References

widebase.net –VBA References

19

การกํ าหนด รายละเอียดq ไตรมาสm เดือนy วันของปd วันw วันของสัปดาหww สัปดาหh ชั่วโมงn นาทีs วินาที

ลักษณะการประยุกตการประยุกตฟงกชัน DateAdd สามารถหาวันที่ดวยการเพิ่มหรือลดจากวันที่ระบุ เชน การคํ านวณหาคาวันที่ใน 45 วันขางหนาการคํ านวณหาคาวันที่จะไมสงคาวันที่ที่ไมมีจริง เชน การหาวันที่ของ 1 เดือนถัดจาก 31 มกราคม 1999DateAdd(“m”, 1, “31-Jan-1999)

ผลลัพธคือวันที่ 28 กุมภาพันธ 1999 แตถาเปน 31 มกราคม 2000 จะไดผลลัพธเปน 29 กุมภาพันธ 2000ถา number ไมใชคาจํ านวนเต็ม (Integer) จะไดรับปรับคาตามคาที่ใกลเคียง

ดูเพ่ิมเติมฟงกชัน DateDiff, ฟงกชัน DatePart, ฟงกชัน Day, ฟงกชัน Format, ฟงกชัน Now, ฟงกชัน WeekDay,ฟงกชัน Year

ตัวอยาง

Dim FirstDate As DateDim IntervalType As StringDim Number As IntegerDim Msg

IntervalType = "m"FirstDate = InputBox("Enter a date")Number = InputBox("Enter number of month to add")Msg = "New date: " & DateAdd(IntervalType, Number, FirstDate)MsgBox = Msg

ตัวอยางการประยุกตใน Accessการกํ าหนดฟงกชัน DateAdd ในตัว Control แบบ Text box ใหกํ าหนดที่คุณสมบัติ ControlSource ในรูปแบบ=DateAdd("d", 30, [OrderDate] )

Page 20: widebase.net: VBA References VBA References

widebase.net –VBA References

20

DateDiff Functionคาที่สงออกเปนประเภทขอมูล Variant (Long) และเปนคาตัวเลขของภายในชวงที่ระบุ

ไวยากรณDateDiff(interval, date1, date2[,firstdayofweek[,firstweekofyear]])อากิวเมนตของฟงกชัน DateDiff มีความหมาย คือ

สวน รายละเอียดinterval บังคับ, เปน Expression แบบ String เพื่อระบุลักษณะชวงเวลาที่ตองการในการ

คํ านวณคาความแตกตางระหวาง date1 และ date2date1, date2 บังคับ, เปนประเภทขอมูลวันที่ สํ าหรับใชในการคํ านวณfirstdayofweek ไมบังคับ,เปนคาคงที่เพื่อระบุวันแรกของสัปดาห ถาไมกํ าหนด จะใชวันอาทิตยเปนวัน

แรกของสัปดาหfirstweekofyear ไมบังคับ, เปนคาคงที่เพื่อระบุสัปดาหแรกของป ถาไมกํ าหนด จะนับสัปดาหที่มีวันที่ 1

มกราคมเปนสัปดาหแรก

การตั้งคาคาอากิวเมนต Interval กํ าหนดคาไดเปน

การกํ าหนด รายละเอียดyyyy ปq ไตรมาสm เดือนy วันของปd วันw วันของสัปดาหww สัปดาหh ชั่วโมงn นาทีs วินาที

คาอากิวเมนต firstdayofweek กํ าหนดคาไดเปน

คาคงที่ คา รายละเอียดvbUseSystem 0 ตั้งคาตาม NLS API

Page 21: widebase.net: VBA References VBA References

widebase.net –VBA References

21

คาคงที่ คา รายละเอียดvbSunday 1 วันอาทิตย (คาเริ่มตน)vbMonday 2 วันจันทรvbTuesday 3 วันอังคารvbWednesday 4 วันพุธvbThursday 5 วันพฤหัสบดีvbFriday 6 วันศุกรvbSaturday 7 วันเสาร

คาอากิวเมนต firstweekofyear กํ าหนดคาไดเปน

คาคงที่ คา รายละเอียดvbUseSystem 0 ตั้งคาตาม NLS APIvbFirstJan1 1 เริ่มนับจากสัปดาหที่มี วันที่ 1 มกราคม (คาเริ่มตน)vbFirstFourdays 2 เริ่มนับจากสัปดาหแรกของปที่มีวันอยางนอย 4 วันvbFirstFullWeek 3 เริ่มนับจากสัปดาหแรกของปที่มีวันครบ 7 วัน

ลักษณะการประยุกตการประยุกตฟงกชัน DateDiff เปนหาคาชวงเวลาที่ตองการระหวางวันที่ระบุ 2 วัน เชน การหาจํ านวนวันระหวางวันที่ 15 มกราคม 2000 กับ วันที่ 20 กรกฎาคม 2000 ในการคํ านวณจํ านวนวันระหวาง date1 และ date2 สามารถใชคา interval เปน “d” หรือ “y” สวนการหาจํ านวนเดือนใชคา interval เปน “m” หรือเงื่อนไขอื่นตามที่ตองการ

ดูเพ่ิมเติมฟงกชัน DateAdd, ฟงกชัน DatePart, ฟงกชัน Day, ฟงกชัน Format, ฟงกชัน Now, ฟงกชัน WeekDay,ฟงกชัน Year

ตัวอยางDim TheDate As DateDim MsgThedate = InputBox("Enter a date")Msg = "Days from today: " & DateDiff("d" , Now, TheDate )MsgBox Msg

ตัวอยางการประยุกตใน Accessการนํ าไปประยุกตเปนฟลดคํ านวณในคิวรี่ทํ าไดโดยการกํ าหนดฟงกชัน DateDiff ในฟลดใหมDaysInProcess: DateDiff(“y”, [OrderDate], [Shippeddate])

Page 22: widebase.net: VBA References VBA References

widebase.net –VBA References

22

ถาตองการเทียบกับวันที่ที่ระบุ เชน 1 Feb 2000 จะตองมีสัญลักษณ # ทั้งดานหนาและดานหลังของวันที่เพื่อให Visual Basic ทราบวาเปนประเภทขอมูลวันที่DaysDiff: DateDiff("m", [OrderDate], #1 Feb 2000#)

DatePart Functionคาที่สงออกเปนประเภทขอมูล Variant (Integer) และเปนคาตัวเลขของสวนที่ระบุ

ไวยากรณDatePart(interval, date[,firstdayofweek[,firstweekofyear]])อากิวเมนตของฟงกชัน DatePart มีความหมาย คือ

สวน รายละเอียดinterval บังคับ, เปน Expression แบบ String เพื่อระบุลักษณะชวงเวลาที่ตองการในการ

คํ านวณคาความแตกตางระหวาง date1 และ date2date บังคับ, เปนประเภทขอมูลวันที่ สํ าหรับใชในการคํ านวณfirstdayofweek ไมบังคับ,เปนคาคงที่เพื่อระบุวันแรกของสัปดาห ถาไมกํ าหนด จะใชวันอาทิตยเปนวัน

แรกของสัปดาหfirstdayofyear ไมบังคับ, เปนคาคงที่เพื่อระบุสัปดาหแรกของป ถาไมกํ าหนด จะนับสัปดาหที่มีวันที่ 1

มกราคมเปนสัปดาหแรก

การตั้งคาคาอากิวเมนต Interval กํ าหนดคาไดเปน

การกํ าหนด รายละเอียดyyyy ปq ไตรมาสm เดือนy วันของปd วันw วันของสัปดาหww สัปดาหh ชั่วโมงn นาทีs วินาที

คาอากิวเมนต firstdayofweek กํ าหนดคาไดเปน

Page 23: widebase.net: VBA References VBA References

widebase.net –VBA References

23

คาคงที่ คา รายละเอียดvbUseSystem 0 ตั้งคาตาม NLS APIvbSunday 1 วันอาทิตย (คาเริ่มตน)vbMonday 2 วันจันทรvbTuesday 3 วันอังคารvbWednesday 4 วันพุธvbThursday 5 วันพฤหัสบดีvbFriday 6 วันศุกรvbSaturday 7 วันเสาร

คาอากิวเมนต firstweekofyear กํ าหนดคาไดเปน

คาคงที่ คา รายละเอียดvbUseSystem 0 ตั้งคาตาม NLS APIvbFirstJan1 1 เริ่มนับจากสัปดาหที่มี วันที่ 1 มกราคม (คาเริ่มตน)vbFirstFourdays 2 เริ่มนับจากสัปดาหแรกของปที่มีวันอยางนอย 4 วันvbFirstFullWeek 3 เริ่มนับจากสัปดาหแรกของปที่มีวันครบ 7 วัน

ลักษณะการประยุกตการใชฟงกชัน DatePart เพื่อแสดงคาของสวนใดสวนหนึ่งของวันที่ เชน วัน เดือน หรือป ตัวอยางเชน DatePart (“m”, 15 Aug 2000) คาเทากับ 8 โดยคาที่สงออกมาเปนตัวเลขซึ่งสามารถนํ าไปใชในการประยุกตที่ตองการคาที่เปนตัวเลข

ดูเพ่ิมเติมฟงกชัน DateAdd, ฟงกชัน DateDiff, ฟงกชัน Day, ฟงกชัน Format, ฟงกชัน Now, ฟงกชัน WeekDay,ฟงกชัน Year

ตัวอยางDim TheDate As DateDim MsgThedate = InputBox("Enter a date")Msg = "Quarter: " & DateDiff("q" , TheDate )MsgBox Msg

ตัวอยางการประยุกตใน Accessการประยุกตฟงกชัน DatePart สามารถนํ าไปใชใน Criteria ของคิวรี่ เชน(DatePart("q", [OrderDate]) = 1 ) And (DatePart("yyyy", [OrderDate]) = 2000 )

Page 24: widebase.net: VBA References VBA References

widebase.net –VBA References

24

DateSerial Functionสงออกคาเปนประเภทขอมูล Variant (Date) จากการกํ าหนด ป, เดือน และวัน

ไวยากรณDateSerial(year, month, date)อากิวเมนตของฟงกชัน DateSerial มีขอกํ าหนด คือ

สวน รายละเอียดyear บังคับ, เปนคาจํ านวนเต็ม (Integer) ซึ่งจะตองมีคาระหวาง 100 ถึง 9999 รวมถึง

Expression ที่ใหคาดังกลาวmonth บังคับ, เปนคาจํ านวนเต็ม (Integer)day บังคับ, เปนคาจํ านวนเต็ม (Integer)

ลักษณะการประยุกตฟงกชัน DateSerial ใชในการเจาะจงวันที่ โดยคาของอากิวเมนตจะยอมรับชวงของตามสวน เชน month ยอมรับคา 1 – 12 และ date ยอมรับคา 1 – 31 ซึ่งการแสดงคาของอากิวเมนตสามารถใช Expression ที่ใหผลลัพธเปนขอมูลตัวเลข เชน การหาวันกอนวันที่ 1 (1 – 1), การเดือนกอนเดือนสิงหาคม 2 เดือน (8 – 2), 10 ปกอนป 2000 (2000 – 10) จะไดผลลัพธเปนวันที่ 31 พฤษภาคม 2000DateSerial(2000 – 10, 8 – 2, 1 – 1)

ดูเพ่ิมเติมฟงกชัน Date, ฟงกชัน DateValue, ฟงกชัน Day, ฟงกชัน Month, ฟงกชัน Now, ฟงกชัน TimeSerial, ฟงกชันTimeValue, ฟงกชัน Weekday, ฟงกชัน Year

ตัวอยางDim myDatemyDate = DateSerial(1998, 3, 20) ' ผลลัพธคือ myDate = 20 March 1998

DateValue Functionสงออกคาเปนประเภทขอมูล Variant (Date)

ไวยากรณDateValue(date)อากิวเมนต date ตามปกติมักจะเปน Expression ที่เปนตัวอักษร โดยเริ่ม 1 มกราคม ค.ศ. 100 ถึง

31 ธันวาคม ค.ศ. 9999

Page 25: widebase.net: VBA References VBA References

widebase.net –VBA References

25

ลักษณะการประยุกตถา date เปนขอความที่มีการแบงจุลภาคในตํ าแหนงที่ถูกตอง ฟงกชัน DateValue จะสามารถทราบคาจริงถึงแมวาจะกํ าหนดเปนแบบ ShortDate เชน 12/30/1997 และ 12/30/97 ฟงกชัน DateValue จะทราบวาเปนวันที่ 30 ธันวาคม 1997

ดูเพ่ิมเติมฟงกชัน Date, ฟงกชัน DateSerial, ฟงกชัน Day, ฟงกชัน Month, ฟงกชัน Now, ฟงกชัน TimeSerial, ฟงกชันTimeValue, ฟงกชัน Weekday, ฟงกชัน Year

ตัวอยางฟงกชัน DateValue นํ ามาใชในการแปลงขอความที่อยูในรูปแบบวันที่ ใหเปนคาวันDim myDatemyDate = DateValue("June 12, 1968") ' ผลลพัธเปนประเภทขอมูลวันท่ี

Day Functionสงออกคาเปนประเภทขอมูล Variant (Integer) ในชวง 1 ถึง 31 จากสวนวันของวันที่

ไวยากรณDay(date)อากิวเมนต date สามารถเปนประเภทขอมูลขอความ (String) ตัวเลข หรือ Expression ที่แสดงในรูป

แบบของวันที่ ถา date เปนคาวาง (Null) ผลลัพธจะเปนคาวาง

ดูเพ่ิมเติมฟงกชัน Date, ฟงกชัน Hour, ฟงกชัน Minute, ฟงกชัน Month, ฟงกชัน Now, ฟงกชัน Second, ฟงกชันWeekday, ฟงกชัน Year

ตัวอยางฟงกชัน Day นํ ามาใชในการแปลงขอความในรูปแบบวันที่ ใหเปนคาของวันDim myDate, myDaymyDate = #June 12, 1968#myDay = Day(myDate) ' ผลลัพธ myDay =12

DDB Functionสงออกคาเปนประเภทขอมูล Double ของคาเสื่อมราคาในทรัพยสินและชวงเวลาที่ระบุ โดยใชการคํ านวณคาเส่ือมราคาแบบ double-declining balance หรือวิธีอื่นตามที่กํ าหนด

ไวยากรณDDB(cost, salvage, life, period [,factor])

Page 26: widebase.net: VBA References VBA References

widebase.net –VBA References

26

อากิวเมนตของฟงกชัน DDB มีความหมาย คือ

สวน รายละเอียดcost บังคับ, เปนประเภทขอมูล Double, ระบุตนทุนเริ่มตนsalvage บังคับ, เปนประเภทขอมูล Double, ระบุราคาซากเมื่อส้ินสุดอายุใชงานlife บังคับ, เปนประเภทขอมูล Double, อายุการใชงานในการคํ านวณPeriod บังคับ, เปนประเภทขอมูล Double, ระบุจํ านวนงวดในการคํ านวณคาเสื่อมราคาFactor ไมบังคับ, เปนประเภทขอมูล Variant, ระบุอัตราการลดลง ถาไมกํ าหนด ใชคา 2

(double declining balance)

ลักษณะการประยุกตวิธีการ double-declining balance คํ านวณคาเสื่อมดวยอัตราเรง โดยคาเสื่อมราคาจะลดลงมากที่สุดในงวดแรกและนอยลงในงวดตอๆไปอากิวเมนต life และ period ตองใชหนวยเดียวกัน เชน ถา life กํ าหนดเปนเดือน period ตองใชหนวยเปนเดือนดวย อากิวเมนตทั้งหมดตองเปนคาบวกฟงกชัน DDB ใชสูตรในการคํ านวณคาเสื่อมราคา

( )( )life

factorsalvagetperiod

onDepreciati *cos −=

ดูเพ่ิมเติมฟงกชัน FV, ฟงกชัน IPmt, ฟงกชัน IRR, ฟงกชัน MIRR, ฟงกชัน NPer, ฟงกชัน NPV, ฟงกชัน Pmt, ฟงกชันPPmt, ฟงกชัน PV, ฟงกชัน Rate, ฟงกชัน SLN, ฟงกชัน SYD

ตัวอยางตัวอยางการใชฟงกชัน DDB เพื่อสงออกคาเสื่อมราคาของสินทรัพยในงวดที่ระบุ โดยใหคาตนทุนเริ่มตน (InitCost) ราคาซากที่งวดสุดทาย (SalvageVal) อายุการใชงานของทรัพยสินเปนป (LifeTime) และงวดที่ตองการทราบคาเสื่อมราคา (Depr)

Dim Fmt, InitCost, SalvageVal, MonthLife, LifeTime, DepYear, DeprConst YRMOS = 12 ' จ ํานวนเดือนใน 1 ปFmt = "###,##0.00"InitCost = InputBox("What's the initial cost of the asset?")SalvageVal = InputBox("Enter the asset's value at end of its life.")MonthLife = InputBox("What's the asset's useful life in months?")Do While MonthLife < YRMOS ' Ensure period is >= 1 year. MsgBox "Asset life must be a year or more." MonthLife = InputBox("What's the asset's useful life in months?")LoopLifeTime = MonthLife / YRMOS ' แปลงเดือนเปนปIf LifeTime <> Int(MonthLife / YRMOS) Then LifeTime = Int(LifeTime + 1) ' ปรบัคาเปนปท่ีใกลท่ีสุดEnd IfDepYear = CInt(InputBox("Enter year for depreciation calculation."))

Page 27: widebase.net: VBA References VBA References

widebase.net –VBA References

27

Do While DepYear < 1 Or DepYear > LifeTime MsgBox "You must enter at least 1 but not more than " & LifeTime DepYear = InputBox("Enter year for depreciation calculation.")LoopDepr = DDB(InitCost, SalvageVal, LifeTime, DepYear)MsgBox "The depreciation for year " & DepYear & " is " & _Format(Depr, Fmt) & "."

DeleteSetting Statementใชในการลบ section หรือ key settings จาก application entry ใน Registry ของ Windows

ไวยากรณDeleteSetting appname, section [,key]ฟงกชัน DeleteSetting มีไวยากรณของอากิวเมนต คือ

สวน รายละเอียดappname บังคับ, เปน expression ของขอความที่เก็บช่ือการประยุกต หรือโครงการที่ section

หรือ key setting ตองการsection บังคับ, เปน expression ของขอความที่เก็บช่ือ section ซึ่ง key setting ถูกลบ ถา

กํ าหนดเฉพาะ appname และ section จะยกเลิก section ที่ระบุรวมถึง key settingที่เกี่ยวของ

key ไมบังคับ, เปน expression ของขอความที่เก็บช่ือ key setting ที่ถูกลบ

ลักษณะการประยุกตถาอากิวเมนตไดรับการกํ าหนดครบ key setting ที่ระบุจะถูกลบ แตฟงกชัน DeleteSetting จะไมทํ าอะไร ถาคา section หรือ key setting ไมมีจริง

ดูเพ่ิมเติมฟงกชัน GetAllSettings, ฟงกชัน GetSetting, SaveSetting Statement

ตัวอยางตัวอยางการใชคํ าส่ัง DeleteSetting ซึ่งเริ่มจากการใชคํ าส่ัง SaveSetting ทํ าการ Registry ใน Windows (หรือไฟล .ini ใน 16-bit Windows) สํ าหรับโปรแกรมประยุกต “MyApp” แลวใชคํ าส่ัง DeleteSetting ลบคาทั้งหมด

' ท่ีเกบ็คาบางสวนของ settings ใน registrySaveSetting "MyApp","Startup", "Top", 75SaveSetting "MyApp","Startup", "Left", 50

' ยกเลิก section และคา settings ท้ังหมดจาก RegistryDeleteSetting "MyApp", "Startup"

Page 28: widebase.net: VBA References VBA References

widebase.net –VBA References

28

Dir Function, Dir$ Functionฟงกชัน Dir สงออกคาเปนประเภทขอมูล Variant (String) เพื่อแสดงชื่อไฟล ไดเรคทอรี หรือโฟลเดอร ที่ตรงกับแบบแผน, คุณลักษณะของไฟล หรือชื่อไดรฟฟงกชัน Dir$ สงออกคาเปนประเภทขอมูล String เพื่อแสดงชื่อไฟล ไดเรคทอรี หรือโฟลเดอร ที่ตรงกับแบบแผน, คุณลักษณะของไฟล หรือชื่อไดรฟ

ไวยากรณDir[(pathname [,attributes])]Dir$[(pathname [,attributes])]ฟงกชัน Dir และ ฟงกชัน Dir$ มีไวยากรณของสวน คือ

สวน รายละเอียดpathname ไมบังคับ, เปน expression ของขอความที่ระบุชื่อไฟล อาจจะรวมถึงไดเรคทอรี่ หรือ

โฟลเดอร และ drive ถาไมพบ pathname จะสงออกคาเปน zero-length stringattributes ไมบังคับ, เปน expression ของตัวเลขหรือคาคงที่ ซึ่งแสดงการสรุปประเภทไฟล ถาไม

กํ าหนดไฟลทั้งหมดที่ตรงกับ pathname จะไดรับการสงออกคา

การตั้งคาอากิวเมนต attributes มีการตั้งคา คือ

คาคงที่ คา รายละเอียดvbNormal 0 ปกติvbHidden 1 ซอนvbSystem 4 ไฟล systemvbVolumn 8 Volume label, ถาระบุ ไฟลประเภทอื่นจะไมพิจารณาvbDirectory 16 ไดเรคทอรี หรือโฟลเดอร

หมายเหตุ• คาคงที่เหลานี้เปนระบุโดย Visual Basic for Application ชื่อเหลานี้สามารถใชในคํ าส่ังในการหาคา

ลักษณะการประยุกตฟงกชัน Dir สนับสนุนการระบุดวยอักษรพิเศษ กรณีหลายตัวอักษร ( * ) และอักษรเดี่ยว ( ? )เมื่อมีการใชฟงกชัน Dir เปนครั้งแรก ตองระบุ pathname หรือมีขอผิดพลาดเกิดขึ้น ถามีการระบุ attributesตองมีการกํ าหนด pathnameฟงกชัน Dir จะออกช่ือไฟลแรกที่ตรงกับ pathname ซึ่งการดึงชื่อไฟลที่ตรงกับ pathname เพิ่ม ใหเรียกฟงกชัน Dir อีกครั้งโดยไมตองมีอากิวเมนต ถาไมมีชื่อไฟลอีกแลว ฟงกชัน Dir จะสงออกคาเปน zero-length string

Page 29: widebase.net: VBA References VBA References

widebase.net –VBA References

29

เมื่อสงคาดวย zero-length string การเรียกใชฟงกชันตอไป ตองระบุ pathname หรือปรากฏคาผิดพลาด การเปล่ียน pathname ใหมโดยไมตองดึงชื่อไฟลทั้งหมดใน pathname ปจจุบัน นอกจากนี้ ฟงกชัน Dir ไมสามารถเรียกใชแบบ recursive การใช vbDirectory เปน attributes ไมสามารถสงคาแบบตอเนื่องของไดเรคทอรี่ยอย

ดูเพ่ิมเติมCurDir Statement, ฟงกชัน CurDir

ตัวอยางตัวอยางการใชฟงกชัน Dir ในตรวจสอบไฟลที่เก็บไวในไดเรคทอรี่ (สํ าหรับ Macintosh, “HD:” เปนชื่อเริ่มตนของ drive และแยก partname ดวยเครื่องหมาย(:))

Dim MyFile, MyPath, MyName' สงคา "WIN.INI" (สํ าหรับ Microsoft Windows) ถามีอยูจริงMyFile = Dir("C:\WINDOWS\WIN.INI")' สงชือ่ไฟลท่ีมีการระบุนามสกุล (extension) ถามากกวาหนึ่งใช *.ini' ไฟลท่ีมอียูจริงไฟลแรกที่พบจะไดรับการสงคาออกMyFile = Dir("C:\WINDOWS\*.INI")' เรยีกฟงกชนั Dir ท่ีไมมี argument อีกครั้งเพื่อสงคาไฟลตอไปของ *.INI ในไดเรคทอรี่เดียวกันMyFile = DirMyFile = Dir("*.TXT", vbHidden) ' สงคาไฟลแรกของ *.TXT ท่ีกํ าหนด attribute เปน hiddenMyPath = "c:\" ' Set the path. ' แสดงชื่อไฟลใน in C:\ that represent directoriesMyName = Dir(MyPath, vbDirectory) ' ดึงชื่อแรกDo While MyName <> "" ' เริ่มตน loop ' ไมพจิารณาไดเรคทอรี่ปจจุบันและไดเรคทอรี่ท่ีหอมลอม If MyName <> "." And MyName <> ".." Then ' ใช bitwise เปรยีบเทยีบเพือ่ทํ าใหมั่นใจวา MyName เปนไดเรคทอรี่ If (GetAttr(MyPath & MyName) And vbDirectory) = vbDirectory Then Debug.Print MyName ' แสดงชื่อถาเปนไดเรคทอรี่ End If End If MyName = Dir ' ดงึคาเขามาใหมLoop

DoEvents Functionสํ าหรับการประมวลผลเพื่อทํ าใหระบบปฏิบัติการสามารถประมวลผล Event อื่นๆ

ไวยากรณDoEvents()

ลักษณะการประยุกตฟงกชัน DoEvents สงออกคาตัวเลขจํ านวนเต็มที่แสดงหมายเลขของฟอรมในภาษา Visual Basic เวอรชัน Stand-aloneฟงกชัน DoEvents สงคาเปน 0 สํ าหรับการประยุกตอื่นๆทั้งหมดฟงกชัน DoEvents สงผานตัว Control ไปยังระบบปฏิบัติการ ซึ่งการสงออกคาตัว Control จะสงภายหลังที่ระบบปฏิบัติการสิ้นสุด Event ในแถวคอย (queue) และ keys ทั้งหมดที่คํ าส่ัง SendKeys ไดรับการสง

Page 30: widebase.net: VBA References VBA References

widebase.net –VBA References

30

ฟงกชัน DoEvents ใชประโยชนในงานพื้นฐาน อาทิ การยินยอมใหผูใชในการยกเลิกกระบนการหลังเริ่มทํ างานได เชน การคนหาไฟล สํ าหรับการประมวลผลที่ตองใชเวลานาน ผลที่ไดของตัวประมวลผล (processor) จะทํ างานไดดีกวา ถาใชฟงกชัน Timer หรือ สวน ActiveX EXE เปนตัวแทนของ task ในกรณีหลัง task สามารถประมวลผลอยางตอเนื่องโดยเปนอิสระจากโปรแกรมประยุกต และระบบปฏิบัติการทํ างานแบบ multi-taskingและแบงสวนเวลาขอควรระวัง การใหผลกับตัวประมวลผลภายใน Event procedure ตองตรวจสอบใหแนใจวาไมมีการประมวลซํ้ าจากสวนอื่นของชุดคํ าส่ังกอนที่การเรียกใชครั้งแรกจะสิ้นสุด

ดูเพ่ิมเติมSendKeys Statement

การประยุกตใน Accessใน Microsoft Access ฟงกชัน DoEvents จะถูกละเลยถามีการใชใน• ฟงกชันหรือ Procedure ที่ผูใชกํ าหนดเองที่ใชคํ านวณฟลดในคิวรี่, ฟอรม หรือรายงาน• ฟงกชันที่ผูใชกํ าหนดเองที่สรางการเพิ่มรายการใหกับ Combo box, List box หรือออบเจคแบบ OLE ถามีการกํ าหนดฟงกชัน DoEvents เขาไปในฟงกชันหรือ Procedure ที่กลาวมา Microsoft Access จะไมสามารถสงตัว Control ไปที่ระบบปฏิบัติการ

ตัวอยางตัวอยางนี้ใชฟงกชัน DoEvents ใหผลกับระบบปฏิบัติการทุกๆ 1000 รอบ โดย DoEvents สงออกคาหมายเลขของฟอรม Visual Basic ที่เปด ซึ่งเฉพาะการประยุกตหลักใน Visual Basic

' สรางตวัแปรเก็บคาหมายเลขของฟอรม Visual Basic ท่ีเรียกมาและมองเห็นDim I, OpenFormsFor I = 1 To 150000 ' เริม่ตนรอบ If I Mod 1000 = 0 Then ' ถาครบ 1000 รอบ OpenForms = DoEvents ' สงผลใหระบบปฏิบัติการ End IfNext I ' เพิม่ counter ของรอบ

ตัวอยางการประยุกตใน Accessตัวอยางการใชฟงกชัน DoEvents เพื่อสงออกคาตัว Control ไปที่ระบบปฏิบัติการเมื่อ Loop มีการประมวลผล ฟงกชัน DoEvents สงคาเปน 0 เสมอ

Sub LongLoop() Dim intI As Integer For intI = 1 To 1500 ' เริม่ตน Loop If intI Mod 100 = 0 Then ' ถาครบ 1000 รอบ DoEvents ' สงผลใหระบบปฏิบัติการ Debug.Print intI End If Next intI ' เพิม่ counter ของ LoopEnd Sub

Page 31: widebase.net: VBA References VBA References

widebase.net –VBA References

31

Environ Functionสงออกคาเปนประเภทขอมูล String ที่สอดคลองกับตัวแปรสภาพแวดลอมของระบบปฏิบัติการ

ไวยากรณEnviron({envstring | number)ฟงกชัน Environ มีไวยากรณของอากิวเมนต คือ

สวน รายละเอียดenvstring ไมบังคับ, เปน expression ของขอความที่เก็บช่ือตัวแปรของสภาพแวดลอมของระบบ

ปฏิบัติnumber ไมบังคับ, เปน expression ของตัวเลขที่ตรงกับลํ าดับตัวเลขขอความสภาพแวดลอมใน

ตาราง environment-string ซึ่งอากิวเมนต number สามารถเปน expression ตัวเลขใดๆ แตจะปรับคาเปนจํ านวนเต็มกอนประมวลผล

ลักษณะการประยุกตถา envstring ไมพบในตาราง environment-string คาที่สงออกเปน zero-length string(“”) ฟงกชัน Environสงคาเปนขอความที่กํ าหนดใหเปน envstring ซึ่งขอความจะอยูตามหลังเครื่องหมายเทากับ (=) ในตาราง environment-string สํ าหรับตัวแปร environmentถาระบุ number แลวมีขอความในตํ าแนงที่ตรงกับตัวเลขของ environment-string ขอความนั้นจะถูกสงออกมา ฟงกชัน Environ จะขอความทั้งหมดรวมถึง envstring ถาไมมีขอความตามตํ าแหนงตัวเลขที่ระบุ ฟงกชัน Environ สงคาเปน zero-length string

ตัวอยางตัวอยางการใชฟงกชัน Environ ในการสงคาใหกับ number และความยาวของคํ าส่ัง PATH จากตาราง environment-string ไมมีใหกับ Macintosh

Dim EnvString, Indx, Msg, PathLen ' ประกาศตัวแปรIndx = 1 ' กํ าหนดคา index เปน 1Do EnvString = Environ(Indx) ' ดงึตวัแปรสภาพแวดลอม If Left(EnvString, 5) = "PATH=" Then ' ตรวจพารท PathLen = Len(Environ("PATH")) ' ดงึคาความยาว Msg = "PATH entry = " & Indx & " and length = " & PathLen Exit Do Else Indx = Indx + 1 ' ไมมพีารทใหเพิ่มคา index End IfLoop Until EnvString = ""

If PathLen > 0 Then MsgBox Msg ' แสดงขอความElse MsgBox "No PATH environment variable exists."End If

Page 32: widebase.net: VBA References VBA References

widebase.net –VBA References

32

EOF Functionสงออกคาเปนประเภทขอมูล Integer ที่เก็บคาทางตรรกะเปน True เมื่อส้ินสุดไฟลที่เปด สํ าหรับ Random หรือ Input แบบตอเนื่องมาถึง

ไวยากรณEOF(filenumber)อากิวเมนต filenumber เปนประเภทขอมูลเลขจํ านวนเต็มใดๆ ของหมายเลขไฟลที่มีจริง

ลักษณะการประยุกตการใชฟงกชัน EOF เพื่อหลีกเลี่ยงความผิดพลาดที่เกิดจากความพยายาม Input เลยจุดส้ินสุดไฟลฟงกชัน EOF จะสงคาเปน False เมื่อไปถึงจุดส้ินสุดไฟล สวนไฟลที่เปดสํ าหรับการเขาถึงแบบ Random หรือ Binary ฟงกชัน EOF จะสงคาเปน False จนกระทั่งคํ าส่ัง Get ไมสามารถอานเรคคอรดที่มีอยูไดในการเปดสํ าหรับการเขาถึงแบบ Binary ถาอานไฟลดวยฟงกชัน Input จนกระทั่งฟงกชัน EOF สงคาเปน True จะทํ าใหเกิดความผิดพลาด ใหใชฟงกชัน LOF และ LOC แทนที่ EOF ในการอานไฟล Binary ดวยฟงกชัน Input หรือ Get กับฟงกชัน EOF ในสวนไฟลที่เปดสํ าหรับ Output ฟงกชัน EOF จะสงคาเปนจริงเสมอ

ดูเพ่ิมเติมGet Statement, ฟงกชัน Loc, ฟงกชัน LOF, Open Statement

ตัวอยางตัวอยางการใชฟงกชัน EOF เพื่อตรวจสอบการสิ้นสุดไฟล สมมติให MYFILE เปน text file ที่มีขอมูลตัวอยางจํ านวนหนึ่ง

Dim InputDataOpen "MYFILE" For Input As #1 ' เปดไฟลสํ าหรับ InputDo While Not EOF(1) ' ตรวจการสิ้นสุดไฟล Line Input #1, InputData ' อานบรรทัดของขอมูล Debug.Print InputData ' พมิพออกใน Immediate windowLoopClose #1 ' ปดไฟล

Erase Statementinitial คาใหมให element ของ static array และปลอยการเก็บคาของ dynamic array

ไวยากรณErase arraylistarraylist เปนอากิวเมนตบังคับ, ซึ่งแบงตัวแปร array ดวยเครื่องหมายจุลภาค (,) ที่ตองการลบคา

Page 33: widebase.net: VBA References VBA References

widebase.net –VBA References

33

การประยุกตErase มีความแตกตางกันขึ้นกับ array ที่เปน static array หรือ dynamic array โดย Erase ไมเรียกคืนหนวยความจํ าสํ าหรับ static array แตใชการตั้งคา element ดังนี้

ประเภท array ผลของ Erase กับ element ของ static arrayNumeric array ตั้งคาแตละ element เปน ศูนยString array (variable length) ตั้งคาแตละ element เปน zero - length string (“ “)String array (fixed length) ตั้งคาแตละ element เปน ศูนยVariant array ตั้งคาแตละ element เปน Emptyarray ของ user - defined type ตั้งคาแตละ element ในฐานะตัวแปรที่แยกกันarray ของออบเจค ตั้งคาแตละ element เปนคาเฉพาะ Nothing

Erase ปลอยหนวยจํ าที่ใชโดย dynamic array กอนโปรแกรมสามารถอางถึง dynamic array อีกครั้ง ตองมีการประกาศตัวแปร array ใหม ดวยประโยคคํ าส่ัง ReDim

ดูเพ่ิมเติมฟงกชัน Array, Dim Statement, Private Statement, Public Statement, ReDim Statement, StaticStatement

ตัวอยางตัวอยางการใชประโยคคํ าส่ัง Erase เพื่อ initial คาใหมให element ของ static array และจัดการพื้นที่หนวยความจํ าของ dynamic array

' ประกาศตัวแปร arrayDim NumArray(10) As Integer ' integer arrayDim StrArray(10) As String ' string arrayDim StrFixArray(10) As String * 10 ' fixed-string arrayDim VarArray(10) As String ' varaint arrayDim DynamicArray() As Integer ' dynamic arrayReDim DynamicArray(10) ' จดัสรรพื้นท่ีเก็บคาErase NumArray ' แตละ element ตั้งคาเปนศูนยErase StrArray ' แตละ element ตั้งคาเปน zero-length string ("")Erase StrFixArray ' แตละ element ตั้งคาเปนศูนยErase VarArray ' แตละ element ตั้งคาเปนคาวางErase DynamicArray ' ลบจากหนวยความจํ า

Error Objectออบเจค VBA, ที่เก็บสารสนเทศเกี่ยวกับ run-time error

ลักษณะการประยุกตคุณสมบัติของออบเจค Err กํ าหนดโดยตัวสรางความผิดพลาด ใน Visual Basic, ออบเจค หรือโปรแกรมเมอร

Page 34: widebase.net: VBA References VBA References

widebase.net –VBA References

34

คาเริ่มตนคุณสมบัติของออบเจค Err เปนตัวเลข เพราะคาเริ่มตนคุณสมบัติ สามารถแสดงดวยชื่อออบเจค Errเมื่อปรากฏ run-time error คุณสมบัติของออบเจค Err สามารถเพิ่มดวยสารสนเทศที่เปนเอกลักษณเพื่อระบุความผิดพลาดและสารสนเทศที่สามารถนํ ามาใชในการควบคุม ในการสรางความผิดพลาด run-time error ใชเมธอด Raiseคุณสมบัติของออบเจค Err ตั้งคาใหมเปน 0 หรือ zero-length string ไดหลังจากคํ าส่ัง Resume หรือ On Errorและหลังจากคํ าส่ัง Exit Sub, Exit Function หรือ Exit Property ภายใน routine ที่ใชควบคุมความผิดพลาดเมธอด Clear สามารถใชในการตั้งคาใหมของ Errควรใชเมธอด Raise มากกวาคํ าส่ัง Error statement เพื่อสราง run-time error สํ าหรับโมดูลแบบ class การใชเมธอด Raise ในชุดคํ าส่ังอื่นๆขึ้นกับจํ านวนสารสนเทศที่มีอยูในการสงคาออก ในชุดคํ าส่ังที่ใชคํ าส่ัง Errorแทนที่เมธอด Raise ในการสรางความผิดพลาด คุณสมบัติของออบเจค Err ใหกํ าหนดดวยคาเริ่มตนเมื่อประมวลผล Error

คุณสมบัติ คาNumber คาที่ระบุเปนอากิวเมนตของคํ าส่ัง Error สามารถเปนคาใดๆของคาผิดพลาดที่มีจริงSource ชื่อของโครงการ Visual Basic ปจจุบันDescription ขอความที่ตรงกับคาสงออกของฟงกชัน Error ของ Number ที่ระบุ ถามีขอความอยู แตถาไม

มีขอความ Description เก็บคา “Application-defined or object-defined error”HelpFile ระบุชื่อ drive, พารท และชื่อไฟลของ Visual Basic HelpHelpContext Context ID ของ Visual Basic Help สํ าหรับความผิดพลาดที่ตรงกับคุณสมบัติ NumberLastDLLError มีเฉพาะระบบปฏิบัติการ Windows 32-bit โดยเก็บคารหัส system error ของการเรียก

dynamic link library (DLL) ครั้งสุดทาย คุณสมบัติ LastDLLError เปนชนิดอานอยางเดียว

รหัสที่ใชในออบเจค Err และคํ าส่ัง Error ไมจํ าเปนตองเปลี่ยน แตถาการใชออบเจค Err และคํ าส่ัง Error ไมสามารถใหผลตรงกับความมุงหมาย เชน ถาเพิ่มคุณสมบัติของออบเจค Err ซึ่งตั้งคาใหมชี้ถึงตารางกอนหนานี้รวมถึงคํ าส่ัง Err ไดรับการประมวลผล ถึงแมวาคํ าส่ัง Err ยังคงสามารถสรางความผิดพลาด run-time errorของ Visual Basic แตเปนการรักษาเกณฑตามรหัสที่มีอยู การใชออบเจค Err, เมธอด Raise, และเมธอด Clear สํ าหรับ system error และในรหัสใหม โดยเฉพาะอยางยิ่งสํ าหรับโมดูลแบบ classออบเจค err เปนออบเจคใน global scope จึงไมมีความจํ าเปนในการกํ าหนด instance ในคํ าส่ังที่เขียนขึ้นProperties คุณสมบัติ Description, คุณสมบัติ HelpContext, คุณสมบัติ HelpContextID, คุณสมบัติHelpFile, คุณสมบัติ LastDLLError, คุณสมบัติ Number, คุณสมบัติ SourceMethods เมธอด Clear, เมธอด Raise

ดูเพ่ิมเติมฟงกชัน Err, ออบเจค Error (“DAO Language Reference”), Error Statement, On Error Statement,Resume Statement

Page 35: widebase.net: VBA References VBA References

widebase.net –VBA References

35

ตัวอยางตัวอยางการใชคุณสมบัติของออบเจค Err ในการสราง dialog box ของขาวสารแจงความผิดพลาด หมายเหตุ ถาใชเมธอด Clear เปนขั้นตอนแรก เมื่อมีการสรางความผิดพลาดของ Visual Basic ดวยเมธอด Raise คาเริ่มตน Visual Basic จะเปนคุณสมบัติของออบเจค Err

Dim Msg' ถาเกดิความผิดพลาด สรางขาวสารแจงความผิดพลาดOn Error Resume Next ' ควบคมุความผิดพลาดErr.ClearErr.Raise 6 ' สรางความผิดพลาด "Overflow"' ตรวจความผิดพลาด แลวแสดงขาวสารIf Err.Number <> 0 Then Msg = "Error # " & Str(Err.Number) & " was generated by " _ & Err.Source & Chr(13) & Err.Description MsgBox Msg, , "Error", Err.Helpfile, Err.HelpContextEnd If

Error Functionสงออกขาวสารแจงความผิดพลาดที่ตรงตามหมายเลขความผิดพลาดที่กํ าหนดให

ไวยากรณError[errornumber]อากิวเมนตตัวเลือก errornumber สามารถเปนหมายเลขความผิดพลาดที่มีอยูจริง ถา errornumber

เปนหมายเลขความผิดพลาดที่มีจริง แตไมกํ าหนดรายละเอียด ฟงกชัน Error สงออกขอความ “Application-defined or object-defined error” ถาไมกํ าหนด errornumber ขาวสารจะตรงกับความผิดพลาดใหมที่สุดของ run-time error จะไดรับการสงออกมา ถาไมมีความผิดพลาด run-time error เกิดขึ้น หรือ errornumber เปน 0 ฟงกชัน Error สงคาออกเปน zero-length string (“”)

ลักษณะการประยุกตใหตรวจสอบการตั้งคาคุณสมบัติของออบเจค Err ในการระบุความผิดพลาดใหมที่สุดของ run-time error คาที่สงออกมาของฟงกชัน Error ตรงตามคุณสมบัติ Description ของออบเจค Err

ดูเพ่ิมเติมออบเจค Err

ตัวอยางตัวอยางการใชฟงกชัน Error ในการพิมพขาวสารแจงความผิดพลาดที่ตรงตามหมายเลขความผิดพลาดที่ระบุ

Dim ErrorNumberFor ErrorNumber = 61 To 64 ' Loop ของคา 61 - 64 Debug.Print Error(ErrorNumber) ' พมิพความผิดพลาดที่ Immediate windowNext ErrorNumber

Page 36: widebase.net: VBA References VBA References

widebase.net –VBA References

36

Exp Functionสงออกคาเปนผลลัพธของคา e ยกกํ าลัง โดยมีประเภทขอมูล Double

ไวยากรณExp(number)อากิวเมนต number เปนคาที่มีประเภทขอมูลตัวเลข หรือ Expression ที่ใหคาดังกลาว และมีคาไม

เกิน 709.782712893

ลักษณะการประยุกตคาของ number จะตองไมเกิน 709.782712893 มิฉะนั้นจะเกิดขอผิดพลาดจากคาที่คํ านวณใหญเกินกวา Access จะกํ าหนดไวฟงกชัน Exp ใชทํ างานประกอบกับฟงกชัน Log ในฐานะที่เปน antilogarithm

ดูเพ่ิมเติมฟงกชัน Log

ตัวอยางDim myVar, myOutputmyVar = 2.5myOutput = Exp(myVar + 1.75)

FileAttr Functionสงออกคาเปนประเภทขอมูล Integer ที่แสดงโหมดของไฟลสํ าหรับไฟลที่เปดดวยคํ าส่ัง Open

ไวยากรณFileAttr(filenumber, returntype)ฟงกชัน FileAttr มีไวยากรณของสวน คือ

สวน รายละเอียดfilenumber บังคับ, ประเภทขอมูล Integer, ของหมายเลขไฟลreturntype บังคับ, ประเภทขอมูล Integer, เปนตัวเลขชี้ประเภทของสารสนเทศที่สงออก กํ าหนด

เปน 1 ใหสงออกคาโหมดของไฟล เฉพาะระบบ 16-บิตกํ าหนดเปน 2 เพื่อดึงไฟลhandle ของระบบปฏิบัติการ ซึ่ง returntype เปน 2 ไมสนับสนุนระบบ 32-บิต และเปนเหตุใหเกิดความผิดพลาด

คาสงออกอากิวเมนต returntype ตั้งคาเปน 1 จะสงออกคาตามรายการเพื่อช้ีถึงโหมดการเขาถึงของไฟล

Page 37: widebase.net: VBA References VBA References

widebase.net –VBA References

37

คาคงที่ คาInput 1Output 2Random 4Append 8Binary 32

ดูเพ่ิมเติมฟงกชัน GetAttr, Open Statement, SetAttr Statement

ตัวอยางตัวอยางการใชฟงกชัน FileAttr เพื่อสงออกคาโหมดและไฟล handle ของไฟลที่เปด ไฟล handle จะสงออกไดเฉพาะระบบ 16-บิต สวนระบบ 32-บิต จะทํ าใหเกิดความผิดพลาด

Dim FileNum, Mode, HandleFileNum = 1 ' กํ าหนดหมายเลขOpen "TESTFILE" For Append As FileNum ' เปดไฟลMode = FileAttr(FileNum, 1) ' สงออกคา 8 (โหมด Append file)Handle = FileAttr(FileNum, 2) ' สงออก ไฟล handleClose FileNum ' ปดไฟล

FileCopy Statementคัดลอกไฟล

ไวยากรณFileCopy source, destinationไวยากรณประโยคคํ าส่ัง FileCopy มีรายละเอียดอากิวเมนตดังนี้

สวน คํ าอธิบายsource บังคับ, เปน string expression ที่ระบุชื่อของไฟลที่ไดรับการคัดลอก source อาจจะ

รวมถึง ไดเรคทอรี หรือโฟลเดอร และไดรฟdestination บังคับ, เปน string expression ที่ระบุชื่อของไฟลเปาหมาย destination อาจจะรวม

ถึงไดเรคทอรี หรือโฟลเดอร และไดรฟ

การประยุกตถาพยายามใชประโยคคํ าส่ัง FileCopy กับไฟลปจจุบันที่กํ าลังเปด จะเกิดความผิดพลาด

ดูเพ่ิมเติมKill Statement, Name Statement

Page 38: widebase.net: VBA References VBA References

widebase.net –VBA References

38

ตัวอยางตัวอยางการใชประโยคคํ าส่ัง FileCopy เพื่อคัดลอกไฟล

Dim sourceFile, DestinationFileSourceFile = "SRCFILE"DestinationFile = "DESTFILE"FileCopy SourceFile, DestinationFile

FileDateTime Functionสงออกคาเปนประเภทขอมูล Variant (Date) ที่แสดงวันและเวลาการสรางไฟลหรือแกไขครั้งสุดทาย

ไวยากรณFileDateTime(pathname)อากิวเมนต pathname ตอง Expression ของขอความที่ระบุชื่อไฟล โดย pathname ตองระบุไดเรค

ทอรี หรือโฟลเดอร และไดรฟ

ดูเพ่ิมเติมฟงกชัน FileLen, ฟงกชัน GetAttr, ฟงกชัน VarType

ตัวอยางตัวอยางการใชฟงกชัน FileDateTime เพื่อหาวันและเวลาการสรางและแกไขครั้งสุดทาย ซึ่งรูปแบบวันและเวลาขึ้นกับการกํ าหนดของระบบ' สมมตใิห TESTFILE มีการแกไขครั้งสุดทายวันท่ี 2 กุมภาพันธ 1993 เวลา 4:35:47 PM' สมมติใหใชตั้งคาแบบ English / U.S.Dim MyStampMyStamp = FileDateTime("TESTFILE") ' สงออกคา "2/12/93 4:35:47 PM"

FileLen Functionสงออกคาเปนประเภทขอมูล Long ที่แสดงขนาดของไฟลเปนไบต

ไวยากรณFileLen(pathname)อากิวเมนต pathname ตอง Expression ของขอความที่ระบุชื่อไฟล โดย pathname ตองระบุไดเรค

ทอรี่หรือโฟลเดอร และ drive

ลักษณะการประยุกตไฟลที่ระบุในอากิวเมนต pathname กํ าลังเปดอยูเมื่อใชฟงกชัน FileLen คาที่สงออกมาจะเปนขนาดไฟลกอนที่จะเปดหมายเหตุ• การหาขนาดของไฟลที่เปดอยูใหฟงกชัน LOF

Page 39: widebase.net: VBA References VBA References

widebase.net –VBA References

39

ดูเพ่ิมเติมฟงกชัน FileDateTime, ฟงกชัน GetAttr, ฟงกชัน LOF

ตัวอยางตัวอยางการใชฟงกชัน FileLen ใหสงออกคาความยาวของไฟลเปนไบตDim MySizeMySize = FileLen("TESTFILE") ' สงออกคาความยาวของไฟลเปนไบต

Fix Function, Int Functionสงออกคาเปนผลลัพธของเลขจํ านวนเต็ม

ไวยากรณFix(number)Int(number)อากิวเมนต number เปนคาที่มีประเภทขอมูลตัวเลข หรือ Expression ที่ใหคาดังกลาว ถาคาที่สงเขา

เปนคา Null (คาวาง) จะไดผลลัพธเปนคาวาง

ลักษณะการประยุกตการแปลงเลขจากจํ านวนทศนิยมใหเปนคาจํ านวนเต็มของ ฟงกชัน Int และ ฟงกชัน Fix จะทํ าการตัดคาทศนิยมออก แตมีความแตกตางกันในกรณีคาลบ โดยฟงกชัน Int จะตัดคาทศนิยมและเปนคาลบที่นอยกวา เชน –8.4 จะแปลงเปน 9 สวนฟงกชัน Fix จะตัดคาทศนิยมและเปนคาลบที่ใหญกวา เชน –8.4 จะแปลงเปน 8

ตัวอยางDim myNumbermyNumber = int(87.7) ' ผลลัพธ 87myNumber = Fix(87.3) ' ผลลัพธ 87myNumber = int(-87.7) ' ผลลัพธ –88myNumber = Fix(-87.7) ' ผลลัพธ –87myNumber = int(-87.3) ' ผลลัพธ –88myNumber = Fix(-87.3) ' ผลลัพธ -87

Format Function, Format$ Functionฟงกชัน Format สงออกคาเปนประเภทขอมูล Variant (String) ดวยรูปแบบที่กํ าหนดตาม expressionฟงกชัน Format$ สงออกคาเปนประเภทขอมูล String ดวยรูปแบบที่กํ าหนดตาม expression

ไวยากรณFormat(expression [,format [,firstdayofweek [,firstweekofyear]]])Format$(expression [,format [,firstdayofweek [,firstweekofyear]]])ไวยากรณแตละสวนของฟงกชัน Format และฟงกชัน Format$ มีรายละเอียด คือ

Page 40: widebase.net: VBA References VBA References

widebase.net –VBA References

40

สวน รายละเอียดexpression บังคับ, เปน Expression ที่เปนจริงformat ไมบังคับ, เปนชื่อ Format หรือ expression ของรูปแบบที่ผูใชกํ าหนดเองfirstdayofweek ไมบังคับ, เปนคาคงที่เพื่อระบุวันแรกของสัปดาหfirstweekofyear ไมบังคับ, เปนคาคงที่เพื่อระบุสัปดาหแรกของป

การตั้งคาคาอากิวเมนต firstdayofweek กํ าหนดคาไดเปน

คาคงที่ คา รายละเอียดvbUseSystem 0 ตั้งคาตาม NLS APIvbSunday 1 วันอาทิตย (คาเริ่มตน)vbMonday 2 วันจันทรvbTuesday 3 วันอังคารvbWednesday 4 วันพุธvbThursday 5 วันพฤหัสบดีvbFriday 6 วันศุกรvbSaturday 7 วันเสาร

คาอากิวเมนต firstweekofyear กํ าหนดคาไดเปน

คาคงที่ คา รายละเอียดvbUseSystem 0 ตั้งคาตาม NLS APIvbFirstJan1 1 เริ่มนับจากสัปดาหที่มี วันที่ 1 มกราคม (คาเริ่มตน)vbFirstFourdays 2 เริ่มนับจากสัปดาหแรกของปที่มีวันอยางนอย 4 วันvbFirstFullWeek 3 เริ่มนับจากสัปดาหแรกของปที่มีวันครบ 7 วัน

ลักษณะการประยุกต

การจัดรูปแบบ ขั้นตอนตัวเลข (Number) ใชการกํ าหนดรูปแบบตัวเลขชนิด Predefine named หรือ สรางรูป

แบบตัวเลข โดยผูใชกํ าหนดเองวันที่และเวลา (Date/time) ใชการกํ าหนดรูปแบบวันที่และเวลาชนิด Predefine named หรือ

สรางรูปแบบวันที่และเวลาโดยผูใชกํ าหนดเองวันที่และเวลา แบบ Serial numbers ใชการกํ าหนดรูปแบบวันที่และเวลา หรือ รูปแบบตัวเลข

Page 41: widebase.net: VBA References VBA References

widebase.net –VBA References

41

การจัดรูปแบบ ขั้นตอนขอความ (String) สรางรูปแบบขอความ โดยผูใชกํ าหนดเอง

ถาการกํ าหนดรูปแบบไมมีการระบุอากิวเมนต format ฟงกชัน Format จะมีการทํ างานเหมือนกับฟงกชัน Str ถึงแมจะมีขอกํ าหนดตาม international นอกจากนี้ รูปแบบตัวเลขคาบวกที่เปนขอความโดยใชฟงกชัน Formatไมตองมีการเวนพื้นที่สํ าหรับเครื่องหมาย

ดูเพ่ิมเติมฟงกชัน Format ที่กํ าหนดดวยรูปแบบตางๆ, ฟงกชัน Str

การประยุกตใน Accessใน Microsoft Access เวอรชัน 1.x และ 2.0 กรณีคาวาง (Null) ฟงกชัน Format สามารถสงคืนคาที่เปน zero-length string และคาวางได

Dim varX As Variant, varStrX As Variant' กํ าหนดคาบางคาให varStrX และสงผานใหฟงกชัน FormatvarX = Format(varStrX, "@; ZLS; Null")

แต Microsoft Access 97 เปนตนมา กรณีคาวาง (Null) ตองมีการแยกทดสอบเพื่อเลือกเฉพาะคาที่ตองการ เชน การใชฟงกชัน IIFvarX = IIf(IsNull(varStrX), "Null", Format(varStrX, "@; ZLS"))

ตัวอยางการประยุกตกับรูปแบบวันที่และเวลา (Date/time) โดยกํ าหนดคาเริ่มตนเปน Short date

Dim myTime, myDate, myStr

myTime = #16:04:35#myDate = #May 17, 1998#

' สงออกคาเวลา ตามรปูแบบที่ผูใชกํ าหนดเองในตัวอยางกํ าหนดเปน long time:myStr = Format( Time, "Long Time")

' สงออกคาวนัท่ี ตามรปูแบบที่ผูใชกํ าหนดเองในตัวอยางกํ าหนดเปน long date:myStr = Format(Time, "Long Date")myStr = Format(myTime, "h:m:s") ' สงออกคา "16:4:35"myStr = Format(myTime, "hh:mm:ss AMPM") ' สงออกคา "04:04:35 PM"myStr = Format(myDate, "dddd, mmm d, yyyy") ' สงออกคา "Sunday, May 17 1998"

' ถาสวน format ไมมกีารกํ าหนด คาที่สงคืนออกมาเปนขอความ (String)myStr = Format(23) ' สงออกคา "23"' การก ําหนดรูปแบบโดยผูใชกํ าหนดเองmyStr = Format(5459.4, "##,##0.00") ' สงออกคา "5,459.40"myStr = Format(5459.4, "###0.00") ' สงออกคา "5459.40"myStr = Format(5, "0.00%") ' สงออกคา "500.00%"myStr = Format("HELLO", "<") ' สงออกคา "hello"myStr = Format("welcome", ">") ' สงออกคา "WELCOME"

Page 42: widebase.net: VBA References VBA References

widebase.net –VBA References

42

Format Function – รูปแบบตางๆสํ าหรับคาที่เปนตัวเลขExpression ในการกํ าหนดรูปแบบที่ผูใชกํ าหนดเองสามารถจัดรูปแบบไดตั้งแต 1 สวนถึง 4 สวนโดยแยกกันดวยเครื่อง (;)

การกํ าหนดสวน รายละเอียดกํ าหนด 1 สวน Expression ของรูปแบบจะใชกับทุกคากํ าหนด 2 สวน สวนที่หนึ่งใชกับคาบวกและศูนย สวนที่สองใชกับคาลบกํ าหนด 3 สวน สวนที่หนึ่งใชกับคาบวก สวนที่สองใชกับคาลบ สวนที่สามใชกับศูนยกํ าหนด 4 สวน สวนที่หนึ่งใชกับคาบวก สวนที่สองใชกับคาลบ สวนที่สามใชกับศูนย และสวนที่ส่ี

ใชกับคาวาง

ตามตัวอยางเปนการกํ าหนดแบบ 2 สวน คือ สวนที่หนึ่งใชกํ าหนดรูปแบบของตัวเลขที่เปนคาบวกและศูนย สวนที่สองใชกํ าหนดรูปแบบของตัวเลขที่เปนคาลบ$#,##0;($#,##0)ถาเพิ่มเครื่อง (;) แตไมมีการกํ าหนดรูปแบบ การกํ าหนดของสวนที่หายไปจะใชรูปแบบเดียวกับคาตัวเลขที่เปนบวก ตามตัวอยางไมมีการกํ าหนดรูปแบบในสวนที่สอง ซึ่งคาที่เปนลบจะใชรูปแบบเดียวกับคาบวก ถาคาเปนศูนยจะแสดงผลเปน “Zero”$#,##0; ;\Z\e\r\o

ดูเพ่ิมเติมฟงกชัน Format, ฟงกชัน Format – รูปแบบตางๆสํ าหรับคาที่เปนขอความ

Format Function – รูปแบบตางๆสํ าหรับคาที่เปนขอความExpression ในการกํ าหนดรูปแบบสํ าหรับขอความ (String) สามารถจัดรูปแบบไดตั้งแต 1 สวนถึง 4 สวนโดยแยกกันดวยเครื่อง (;)

การกํ าหนดสวน รายละเอียดกํ าหนด 1 สวน Expression ของรูปแบบจะใชกับทุกขอความกํ าหนด 2 สวน สวนที่หนึ่งใชกับขอความ และสวนที่สองใชกับคาวางและคาชนิด Zero-length

string

ดูเพ่ิมเติมฟงกชัน Format, ฟงกชัน Format – รูปแบบตางๆสํ าหรับคาที่เปนตัวเลข

Page 43: widebase.net: VBA References VBA References

widebase.net –VBA References

43

Format Function – กํ าหนดรูปแบบดวยชื่อรูปแบบ Date/Timeตารางตอไปนี้เปนกลาวถึงรายละเอียดของชื่อรูปแบบ Date/Time

ช่ือรูปแบบ รายละเอียดGeneral Date แสดง วันที่ และ/หรือ เวลา สํ าหรับจํ านวนจริง แสดง วันที่และเวลา เชน 14/8/98 05:34 PM

ถาไมมีสวนเศษสวนจะแสดงเฉพาะวันที่ เชน 14/8/98 ถาไมมีสวนจํ านวนเต็มจะแสดงเฉพาะเวลา เชน 05:34 PM การแสดงวันที่เปนไปตามนาฬิกาของเครื่องคอมพิวเตอร

Long Date แสดงวันที่ เวลา ตามที่กํ าหนดรูปแบบของ Long Date ในระบบMedium Date แสดงวันที่ เวลา โดยใชรูปแบบของ Medium Date ตามเวอรชันภาษาในระบบปฏิบัติการShort Date แสดงวันที่ เวลา ตามที่กํ าหนดรูปแบบของ Short Date ในระบบLong Time แสดง เวลา ตามที่กํ าหนดรูปแบบของ Long Time ในระบบ โดยแสดง ชั่วโมง นาที และวินาทีMedium Time แสดงเวลาแบบ 12 ชั่วโมง โดยแสดง ชั่วโมง นาที และ AM/PMShort Time แสดงเวลาแบบ 24 ชั่วโมง โดยแสดง ชั่วโมง นาที เชน 21:45

ดูเพ่ิมเติมฟงกชัน Format, ฟงกชัน Format – กํ าหนดรูปแบบดวยชื่อรูปแบบตัวเลข, ฟงกชัน Format – ผูใชกํ าหนดรูปแบบ Date/Time

Format Function – กํ าหนดรูปแบบดวยชื่อรูปแบบตัวเลขตารางตอไปนี้เปนกลาวถึงรายละเอียดของชื่อรูปแบบตัวเลข

ช่ือรูปแบบ รายละเอียดGeneral Number แสดงคาตัวเลขโดยไมมีเครื่องหมายจุลภาคแบงหลักพันCurrency แสดงคาตัวเลขโดยมีเครื่องหมายจุลภาคแบงหลักพัน และทศนิยม 2 ตํ าแหนง สวนผล

ลัพธขึ้นกับการตั้งคาของระบบFixed แสดงตํ าแหนงอยางนอยหนึ่งตํ าแหนงดานซายจุดทศนิยม และสองตํ าแหนงดานขวา

จุดทศนิยมStandard แสดงคาตัวเลขโดยมีเครื่องหมายจุลภาคแบงหลักพัน และตํ าแหนงอยางนอยหนึ่ง

ตํ าแหนงดานซายจุดทศนิยม และสองตํ าแหนงดานขวาจุดทศนิยมPercent แสดงคาตัวเลขโดยการคูณคาดวย 100 พรอมกับสัญลักษณรอยละ (%) ดานขวา และ

แสดงคาทศนิยม 2 ตํ าแหนงScientific แสดงคาตามแบบมาตรฐานดานวิทยาศาสตรYes/No แสดง No ถาคาเปน 0 และ Yes ถาเปนคาอื่นๆTrue/False แสดง False ถาคาเปน 0 และ True ถาเปนคาอื่นๆOn/Off แสดง Off ถาคาเปน 0 และ On ถาเปนคาอื่นๆ

Page 44: widebase.net: VBA References VBA References

widebase.net –VBA References

44

ดูเพ่ิมเติมฟงกชัน Format, ฟงกชัน Format – กํ าหนดรูปแบบดวยชื่อรูปแบบ Date/Time, ฟงกชัน Format – ผูใชกํ าหนดรูปแบบตัวเลข

Format Function – ผูใชกํ าหนดรูปแบบ Date/Timeตารางตอไปนี้เปนอธิบายตัวอักษรที่ใชในการกํ าหนดรูปแบบ Date/Time แบบผูใชกํ าหนด

ตัวอักษร รายละเอียด( : ) เครื่องหมายแบงเวลา ในบางกรณีสามารถใชตัวอักษรอื่น โดยเครื่องหมายนี้แบง ชั่วโมง นาที

วินาที เมื่อมีการกํ าหนดรูปแบบ Date/Time เครื่องหมายที่ใชจริงขึ้นกับการกํ าหนดคาระบบ( / ) เครื่องหมายแบงวัน ในบางกรณีสามารถใชตัวอักษรอื่น โดยเครื่องหมายนี้แบง วัน เดือน ป เมื่อ

มีการกํ าหนดรูปแบบ Date/Time เครื่องหมายที่ใชจริงขึ้นกับการกํ าหนดคาระบบc แสดงวันที่ ดวย ddddd และเวลา ดวย ttttt ซึ่งการแสดงเฉพาะขอมูลของวันที่ ถาไมมีสวนเศษ

สวนใน date serial number และแสดงเฉพาะขอมูลของเวลา ถาไมมีสวนจํ านวนเต็มd แสดงวันที่ เปนตัวเลขโดยไมมีเลข 0 นํ าหนา (1-31)dd แสดงวันที่ เปนตัวเลขโดยมีเลข 0 นํ าหนา (01-31)ddd แสดงวัน ดวยชื่อวันแบบยอ (อ. – ส. หรือ Sun – Sat)dddd แสดงวัน ดวยชื่อวันแบบเต็ม (Sunday – Saturday)ddddd แสดงวันที่ แบบสมบูรณ (โดยแสดง วัน เดือน และป) ดวยรูปแบบ Short date ตามที่กํ าหนดใน

ระบบ โดยคาเริ่มตนของ Microsoft Windows มีรูปแบบเปน m/d/yydddddd แสดงวันที่ date serial number แบบสมบูรณ (โดยแสดง วัน เดือน และป) ดวยรูปแบบ Long

date ตามที่กํ าหนดในระบบ โดยคาเริ่มตนของ Microsoft Windows มีรูปแบบเปน mmmmdd, yyyy

w แสดงวันในสัปดาห เปนตัวเลข ( 1 สํ าหรับวันอาทิตย ถึง 7 สํ าหรับวันเสาร)ww แสดงสัปดาหที่ของป เปนตัวเลข (1-54)m แสดงเดือน เปนตัวเลขโดยไมมีเลข 0 นํ าหนา (1-12) แตถาตามหลัง h หรือ hh จะแสดงคาของ

นาทีmm แสดงเดือน เปนตัวเลขที่มีเลข 0 นํ าหนา (01-12) แตถาตามหลัง h หรือ hh จะแสดงคาของนาทีmmm แสดงเดือน ดวยชื่อเดือนแบบยอ (ม.ค. – ธ.ค. หรือ Jan – Dec)mmmm แสดงเดือน ดวยชื่อเดือนแบบเต็ม (January – December)q แสดงไตรมาสของปเปนตัวเลข (1-4)y แสดงวันของป เปนตัวเลข (1-366)yy แสดงป เปนเลข 2 ตํ าแหนง (00-99)yyyy แสดงป เปนเลข 4 ตํ าแหนง (100-9999)h แสดงชั่วโมง เปนตัวเลขโดยไมมีเลข 0 นํ าหนา (0-23)

Page 45: widebase.net: VBA References VBA References

widebase.net –VBA References

45

ตัวอักษร รายละเอียดhh แสดงชั่วโมง เปนตัวเลขโดยมีเลข 0 นํ าหนา (00-23)n แสดงนาที เปนตัวเลขโดยไมมีเลข 0 นํ าหนา (0-59)nn แสดงนาที เปนตัวเลขโดยมีเลข 0 นํ าหนา (00-59)s แสดงวินาที เปนตัวเลขโดยไมมีเลข 0 นํ าหนา (0-59)ss แสดงวินาที เปนตัวเลขโดยมีเลข 0 นํ าหนา (0-59)ttttt แสดงเวลา แบบสมบูรณ (โดยแสดง ชั่วโมง นามี และวินาที) ซึ่งเครื่องหมายแบงเวลาจะเปนไป

ตามที่กํ าหนดกับระบบ การนํ าหนาดวยเลข 0 ขึ้นกับการเลือกตัวเลือก สํ าหรับ MicrosoftWindows กํ าหนดคาเริ่มตนเปน h:mm:ss

AM/PM แสดงเวลาแบบ 12 ชั่วโมง และอักษรตัวใหญ AM หรือ PM โดย AM สํ าหรับเวลากอนเที่ยงวันสวน PM สํ าหรับเวลาเที่ยงวันถึงกอนเที่ยงคืน (11:59 PM)

am/pm แสดงเวลาแบบ 12 ชั่วโมง และอักษรตัวเล็ก am หรือ pm โดย am สํ าหรับเวลากอนเที่ยงวันสวน pm สํ าหรับเวลาเที่ยงวันถึงกอนเที่ยงคืน (11:59 pm)

A/P แสดงเวลาแบบ 12 ชั่วโมง และอักษรตัวใหญ A หรือ P โดย A สํ าหรับเวลากอนเที่ยงวัน สวน Pสํ าหรับเวลาเที่ยงวันถึงกอนเที่ยงคืน (11:59 P)

a/p แสดงเวลาแบบ 12 ชั่วโมง และอักษรตัวใหญ a หรือ p โดย a สํ าหรับเวลากอนเที่ยงวัน สวนPM สํ าหรับเวลาเที่ยงวันถึงกอนเที่ยงคืน (11:59 p)

AMPM แสดงเวลาแบบ 12 ชั่วโมง และอักษรตัวใหญ AM หรือ PM ซึ่งขึ้นกับการกํ าหนดกับระบบ โดยAM สํ าหรับเวลากอนเที่ยงวัน สวน PM สํ าหรับเวลาเที่ยงวันถึงกอนเที่ยงคืน (11:59 PM)สํ าหรับ Microsoft Windows กํ าหนดคาเริ่มตนเปน AM/PM

ดูเพ่ิมเติมฟงกชัน Format

ตัวอยางรูปแบบ การแสดงบนจอภาพM/d/yy 7/12/58d-mmm 7-Decd-mmmm-yy 7-December-58d mmmm 7 Decembermmmm yy December 58hh:mm AM/PM 07:48 PMh:mm:ss a/p 07:48:12 ph:mm 19:48h:mm:ss 19:48:12m/d/yy h:mm 12/7/58 20:50

Page 46: widebase.net: VBA References VBA References

widebase.net –VBA References

46

Format Function – ผูใชกํ าหนดรูปแบบตัวเลขตารางตอไปนี้เปนอธิบายตัวอักษรที่ใชในการกํ าหนดรูปแบบตัวเลข แบบผูใชกํ าหนด

ตัวอักษร รายละเอียดไมกํ าหนด แสดงตัวโดยไมมีรูปแบบที่กํ าหนด(0) ตํ าแหนงตัวเลข แสดงตัวเลขหรือ 0 ใน Expression ไดกํ าหนด 0 ถาตํ าแหนงนั้นมีตัวเลข จะ

ปรากฏตัวเลขนั้น ถาเปนขอมูลอื่นจะปรากฏเปน 0ถามีคาทศนิยม (เชน .25, 4.1) จะปรากฏเลข 0 นํ าหนาหรือตอทาย (เชน กํ าหนด 0.00 จะปรากฏเปน 0.25, 4.10) ถาคาทศนิยมมากกวาตํ าแหนงที่กํ าหนดจะมีการปดคาแลวจึงแสดงผลลัพธ ( เชน .256 จะแสดงเปน 0.26) ถาคาตัวเลขนอยกวาจํ านวนตํ าแหนง 0 ที่ดานซายของทศนิยม จะมีเลขศูนยนํ าหนาเทากับจํ านวนตํ าแหนงที่กํ าหนดไว ( เชน กํ าหนดเปน000.00 ถาคาตัวเลข คือ 3.2 จะไดผลลัพธเปน 003.20 )

(#) ตํ าแหนงตัวเลข แสดงตัวเลขหรือไมมีคา ใน Expression ไดกํ าหนด # ถาตํ าแหนงนั้นมีตัวเลข จะปรากฏตัวเลขนั้น ถาเปนขอมูลอื่นจะไมมีคาการแสดงผลของ # คลายกับ 0 แตตางกันที่จะไมมีการนํ าหนาหรือตอทายดวยเลข 0 ในกรณีที่คาตัวเลขมีจํ านวนนอยกวาตํ าแหนงที่กํ าหนด

( . ) จุดทศนิยม ในบางกรณีสามารถใชเครื่องหมายจุลภาค ( , ) แทน จุดทศนิยมทํ าหนาที่หาจํ านวนตํ าแหนงตัวเลขดานซายและขวาของจุดทศนิยม กรณีที่ใน Expression ใชเฉพาะเครื่องหมาย # ถาคาตัวเลขนอยกวา 1 จะแสดงผลลัพธโดยขึ้นตนดวยทศนิยม แตถาตองการใหขึ้นตนดวยเลข 0 ใหระบุ 0 ที่ตํ าแหนงแรกหนาจุดทศนิยม ( เชน ##0.00 ถาคาคือ .23 จะไดผลลัพธเปน 0.23) นอกจากนี้สัญลักษณที่ใชจริงขึ้นกับการกํ าหนดในระบบ

(%) เครื่องหมายรอยละ หรือเปอรเซ็นต ซึ่ง Expression จะคูณคาดวย 100 และเพิ่มเครื่องหมาย% ตอทาย

( , ) เครื่องหมายแบงหลักพัน ในบางกรณีสามารถใชเครื่องหมายจุด ( . ) แทน เครื่องหมายแบงหลักพันจะแบงหลักพันออกจากหลักรอย เมื่อคาตัวเลขมี 4 หลัก โดยมาตรฐานการกํ าหนดรูปแบบใหระบุเครื่องหมายแบงหลักพันอยูภายในเครื่องหมายบอกตํ าแหนง (# หรือ 0 เชน#,##0.00) ถามีการใชเครื่องหมายแบงหลักติดกับทศนิยม หรือทายสุดตอจากเครื่องหมายบอกตํ าแหนง จะมีความหมายวาใหแสดงผลโดยการหารดวย 1000 ( เชน #, ถาคาตัวเลขคือ 5 ลาน จะไดผลลัพธเปน 5,000 ) หรือถากํ าหนดเครื่องหมายแบงหลัก 2 ตัว จะมีคาเทากับหาร 1 ลาน (เชน #,, ถาคาตัวเลข คือ 5 ลาน จะไดผลลัพธเปน 5 ) นอกจากนี้สัญลักษณที่ใชจริงขึ้นกับการกํ าหนดในระบบ

( : ) เครื่องหมายแบงเวลา ในบางกรณีสามารถใชเครื่องหมายอื่นแทน เครื่องหมายแบงเวลาจะทํ าหนาแบง ชั่วโมง นาที และวินาที เมื่อมีการกํ าหนดรูปแบบเวลา นอกจากนี้สัญลักษณที่ใชจริงขึ้นกับการกํ าหนดในระบบ

( / ) เครื่องหมายแบงวัน ในบางกรณีสามารถใชเครื่องหมายอื่นแทน เครื่องหมายแบงเวลาจะทํ า

Page 47: widebase.net: VBA References VBA References

widebase.net –VBA References

47

ตัวอักษร รายละเอียดหนาแบง วัน เดือน และป เมื่อมีการกํ าหนดรูปแบบวัน นอกจากนี้สัญลักษณที่ใชจริงขึ้นกับการกํ าหนดในระบบ

(E- E+ e- e+) รูปแบบเชิงวิทยาศาสตร ถาใน Expression มีเครื่องหมายบอกตํ าแหนง (#/0) ทางขวาของE-, E+, e- หรือ e+ จะแสดงผลลัพธตัวเลข และ มี E หรือ e แทรกอยูระหวางคาตัวเลขกับเลขยกกํ าลัง การใช E- หรือ e- จะแสดงเครื่องหมายลบตอจากเลขยกกํ าลังที่เปนลบ สวนการใช E+ หรือ e+ จะแสดงเครื่องหมายลบตอจากเลขยกกํ าลังที่เปนลบ และแสดงเครื่องหมายบวกตอจากเลขยกกํ าลังที่เปนบวก

- + $ ( ) แสดงอักษรตาม (literal character) ถาตองการแสดงอักษรอื่นนอกเหนือจากรายการใหเพิ่มเครื่องหมาย ( \ ) นํ าหนา หรือกํ าหนดในเครื่องหมายคํ าพูด (“ “)

( \ ) แสดงตัวอักษรตอไปในรูปแบบขอความ เพื่อแสดงความที่ตองการเจาะจงในลักษณะเดียวกับ literal character โดยกํ าหนดตอจากเครื่องหมาย ( \ ) เครื่องหมายนี้จะไมปรากฏใหเห็นและมีลักษณะเหมือนกับเครื่องหมายคํ าพูด (“ “) ถาตองการแสดงเครื่องหมาย ( \ ) ใหใชเครื่องหมายนี้ 2 ตัว (\\)ตัวอยางอักษรที่ไมสามารถเปน literal character ไดแกอักษรที่ใชในการกํ าหนดรูปแบบตางๆ โดยรูปแบบ Date/Time ( ไดแก a, c, d, h, m, n, p, q, s, t, w, y, / และ : ) รูปแบบตัวเลข ( #, 0, %, E, e, เครื่องหมายจุลภาค และจุด) รูปแบบขอความ ( @, &, <, > และ ! )

(“ABC”) แสดงขอความที่อยูในเครื่องหมายคํ าพูด (“ “) รวมถึงขอความแบบรหัสในอากิวเมนตformat เชน Chr(34) มีความหมายเทากับเครื่องหมายคํ าพูดเปด (“ )

ดูเพ่ิมเติมฟงกชัน Format

ตัวอยางตารางตอไปนี้เปนตัวอยางการกํ าหนดรูปแบบตัวเลข โดยกํ าหนดระบบเปน English – U.S.

รูปแบบ คาบวก 5 คาลบ 5 จุดทศนิยม .5 คาวางZero-length string (“”) 5 -5 0.50 5 -5 10.00 5.00 -5.00 0.50#,##0 5 -5 1#,##0.00; ; ;Nil 5.00 -5.00 0.50 Nil$#,##0;( $#,##0) $5 ($5) $1$#,##0.00;( $#,##0.00) $5.00 ($5.00) $0.500% 500% -500% 50%

Page 48: widebase.net: VBA References VBA References

widebase.net –VBA References

48

รูปแบบ คาบวก 5 คาลบ 5 จุดทศนิยม .5 คาวาง0.00% 500.00% -500% 50.00%0.00E+00 5.00E+00 -5.00E+00 5.00E-010.00E-00 5.00E00 -5.00E00 5.00E-01

Format Function – ผูใชกํ าหนดรูปแบบขอความตารางตอไปนี้เปนอธิบายตัวอักษรที่ใชในการกํ าหนดรูปแบบขอความ (String) แบบผูใชกํ าหนด

ตัวอักษร รายละเอียด@ ตํ าแหนงตัวอักษร แสดงตัวอักษรหรือชองวาง ใน Expression ไดกํ าหนด @ ถาตํ าแหนงนั้น

มีตัวอักษร จะปรากฏอักษรนั้น ถาเปนขอมูลอื่นจะปรากฏเปนชองวาง การแสดงตัวอักษรจะเริ่มจากขวาไปซาย ถานํ าหนา @ ดวยเครื่องหมายตกใจ ( ! ) การแสดงตัวอักษรจะเริ่มจากซายไปขวา

& ตํ าแหนงตัวอักษร แสดงตัวอักษรหรือไมมี ใน Expression ไดกํ าหนด & ถาตํ าแหนงนั้นมีตัวอักษร จะปรากฏอักษรนั้น ถาเปนขอมูลอื่นจะไมมีคาใดๆ การแสดงตัวอักษรจะเริ่มจากขวาไปซาย ถานํ าหนา & ดวยเครื่องหมายตกใจ ( ! ) การแสดงตัวอักษรจะเริ่มจากซายไปขวา

< บังคับใหเปนอักษรตัวเล็ก แสดงตัวอักษรทั้งหมดเปนอักษรตัวเล็ก> บังคับใหเปนอักษรตัวใหญ แสดงตัวอักษรทั้งหมดเปนอักษรตัวใหญ! บังคับใหแสดงตัวอักษรจากซายไปขวา ซึ่งคาเริ่มตนของการแสดงตํ าแหนงตัวอักษร (@ / &)

จะแสดงตัวอักษรจากขวาไปซาย

ดูเพ่ิมเติมฟงกชัน Format, ฟงกชัน Format – รูปแบบตางๆสํ าหรับคาที่เปนขอความ, ฟงกชัน Format – ผูใชกํ าหนดรูปแบบ Date/Time, ฟงกชัน Format – ผูใชกํ าหนดรูปแบบตัวเลข

FreeFile Functionสงออกคาเปนประเภทขอมูล Integer แสดงหมายเลขไฟลตอไปที่มีใหคํ าส่ัง Open ใชงาน

ไวยากรณFreeFile[(rangenumber)]อากิวเมนต rangenumber เปนประเภทขอมูล Variant ที่ระบุชวงที่ใหสงออกหมายเลขไฟลที่วาง

ระบุเปน 0 (คาเริ่มตน) ใหสงออกหมายเลขไฟลในชวง 1-255 ระบุเปน 1 ใหสงออกหมายเลขไฟลในชวง 256-511

Page 49: widebase.net: VBA References VBA References

widebase.net –VBA References

49

ลักษณะการประยุกตฟงกชัน FreeFile เปนการสงคาหมายเลขไฟลที่ยังไมไดใชงาน

ดูเพ่ิมเติมOpen Statement

ตัวอยางตัวอยางการใชฟงกชัน FreeFile ใหสงออกหมายเลขไฟลตอไปที่ใชไดตอไป

Dim MyIndex, FileNumberFor MyIndex = 1 To 5 ' วนรอบ 5 ครั้ง FileNumber = FreeFile ' เรยีกหมายเลขไฟลท่ียังไมไดใช. Open "TEST" & MyIndex For Output As #FileNumber ' สรางชื่อไฟล Write #FileNumber, "This is a sample." ' ขอความแสดงผล Close #FileNumber ' เปดไฟลNext MyIndex

FV Functionสงออกคาเปนประเภทขอมูล Double ของมูลคาในอนาคต โดยมีงวดการจายสมํ่ าเสมอ การจายคงที่ และอัตราดอกเบี้ยคงที่

ไวยากรณFV(rate, nper, pmt [,pv [,type]])อากิวเมนตของฟงกชัน FV มีความหมาย คือ

สวน รายละเอียดrate บังคับ, เปนประเภทขอมูล Double, ระบุอัตราดอกเบี้ยตองวด เชน การกูเงินซื้อรถยนตที่อัตราดอก

เบี้ย 10% ตอป และงวดการจายเปนรายเดือน อัตราดอกเบี้ยตอเดือน คือ 0.1/12 หรือ 0.0083nper บังคับ, เปนประเภทขอมูล Integer, ระบุจํ านวนงวดการจายทั้งหมด เชน การจายเงินกูรายเดือนของ

เงินกู 4 ป จํ านวนงวดทั้งหมด คือ 4 * 12 (หรือ 48) งวดการจายpmt บังคับ, เปนประเภทขอมูล Double, ระบุจํ านวนเงินจายในแตละงวด การจายปกติรวมเงินตนและ

ดอกเบี้ย ซึ่งไมสามารถเปลี่ยนไดตลอดอายุการใชงานpv ไมบังคับ, เปนประเภทขอมูล Variant, มูลคาปจจุบัน (หรือเงินรวมทั้งหมด) ของชุดการจายสํ าหรับมูล

คาอนาคต เชน การยืมเงินเพื่อซื้อรถยนต เงินกู คือ มูลคาปจจุบันที่ผูกูตองจายเปนรายเดือน ถาไมกํ าหนด จะใชคาเปน 0

type ไมบังคับ, เปนประเภทขอมูล Variant, ระบุกํ าหนดการจาย ใช 0 ถากํ าหนดชํ าระเปนส้ินงวด หรือ 1ถากํ าหนดชํ าระเปนตนงวด ถาไมกํ าหนด จะใชคาเปน 0

Page 50: widebase.net: VBA References VBA References

widebase.net –VBA References

50

ลักษณะการประยุกตงวดการจายเปนชุดการจายที่คงที่ตลอดระยะเวลาทั้งหมด การจายสามารถเปนการชํ าระเงินกู ( เชน คางวดเงินกูซอบาน) หรือการลงทุน ( เชน การฝากเงินออมเปนรายเดือน)อากิวเมนต rate และ nper ตองมีหนวยเปนหนวยเดียวกัน เชน rate คํ านวณเปนอัตราตอเดือน nper จะตองเปนรายเดือนดวยอากิวเมนตทั้งหมด เงินสดจายออก (เชน การฝากเงินออม) ใหเปนคาลบ เงินสดรับเขา (เชน เงินปนผล) ใหเปนคาบวก

ดูเพ่ิมเติมฟงกชัน DDB, ฟงกชัน IPmt, ฟงกชัน IRR, ฟงกชัน MIRR, ฟงกชัน NPer, ฟงกชัน NPV, ฟงกชัน Pmt, ฟงกชันPPmt, ฟงกชัน PV, ฟงกชัน Rate, ฟงกชัน SLN, ฟงกชัน SYD

ตัวอยางตัวอยางการใชฟงกชัน FV ในการสงออกคามูลคาในอนาคตของการลงทุนดวยอัตราดอกเบี้ยตอป ซึ่งกํ าหนดเปนงวด (APR / 12), จํ านวนงวดการจายทั้งหมด (TotPmts), การจาย (Payment), มูลคาปจจุบันของการลงทุน (PVal), และตัวเลขที่ระบุกํ าหนดการจาย (PayType) เนื่องจากเปนการจายชํ าระ จึงมีคาเปนลบ

Dim Fmt, Payment, APR, TotPmts, PayType, PVal, FValConst ENDPERIOD = 0, BEGINPERIOD = 1 ' กํ าหนดประเภทการจายFmt = "###,###,##0.00" ' กํ าหนดรูปแบบการเงินPayment = InputBox("How much do you plan to save each month?")APR = InputBox("Enter the expected interest annual percentage rate.")

If APR > 1 Then APR = APR / 100 ' ตรวจความถูกตองของคาTotPmts = InputBox("For how many months do you expect to save?")PayType = MsgBox("Do you make payments at the end of month?", vbYesNo)If PayType = vbNo Then PayType = BEGINPERIOD Else PayType = ENDPERIODPVal = InputBox("How much is in this savings account now?")FVal = FV(APR / 12, TotPmts, -Payment, -PVal, PayType)MsgBox "Your savings will be worth " & Format(FVal, Fmt) & "."

Get Statementอานขอมูลจากไฟลที่เปดไปที่ตัวแปร

ไวยากรณGet [#] filenumber, [recnumber], varnameประโยคคํ าส่ัง Get มีไวยากรณของสวนดังนี้

สวน คํ าอธิบายfilenumber บังคับ, เปนหมายเลขไฟลrecnumber ไมบังคับ, ประเภทขอมูล variant (Long) หมายเลขเรคคอรด (ไฟลโหมด Random)

หรือหมายเลขไบต (ไฟลโหมด Binary) เมื่อเริ่มตนอาน

Page 51: widebase.net: VBA References VBA References

widebase.net –VBA References

51

สวน คํ าอธิบายvarname บังคับ, ชื่อตัวแปรที่รับขอมูลจากการอาน

ลักษณะการประยุกตการอานขอมูลดวย Get มักจะเปนขอมูลที่เขียนลงไฟลดวย Putเรคคอรดหรือไบตแรก ในไฟลอยูที่ตํ าแหนงที่ 1 เรคคอรดหรือไบตที่ 2 อยูที่ตํ าแหนงที่ 2 และตอไป ถาละ recnumber เรคคอรดหรือไบตตอไปจะไดรับการอาน แตตองใสเครื่องหมายจุลภาค (,) เชน

Get #4, , FileBuffer

สํ าหรับการเปดไฟลในโหมด Random ตองทํ าตามกฎนี้- ถาความยาวของขอมูลที่กํ าลังอานนอยกวาความยาวที่ระบุใน Len Clause ของประโยคคํ าส่ัง Open การ

อานเรคคอรดของ Get อานตามขอบเขตความยาวเรคคอรด ชองวางระหวางจุดส้ินสุดของเรคคอรดหนึ่งกับจุดเริ่มตนของเรคคอรดตอไป มีการรองรับดวยขอมูลที่มีอยูของไฟลบัฟเฟอร เนื่องจากจํ านวนของขอมูลรองรับไมสามารถคนหาไดแนนอน โดยทั่วไป แนวคิดที่ดี คือ มีความยาวเรคคอรดตรงกับความยาวของขอมูลที่กํ าลังอาน

- ถาตัวแปรที่กํ าลังรับขอมูลเปน Variable - Length String การอานของ Get อานขอมูล 2 ไบต ที่ความยาวขอความ และตอไปอานขอมูลเขาสูตัวแปร ดังนั้น ความยาวเรคคอรดระบุโดย Len clause ในประโยคคํ าส่ัง Open ตองยาวมากกวาอยางนอย 2 ไบตของความยาวจริงของขอความ

- ถาตัวแปรที่กํ าลังรับขอมูลเปนประเภทขอมูล Variant ที่เปนตัวเลข Get อาน 2 ไบตตามการระบุ Vartype ของประเภทขอมูล Variant แลวขอมูลไปสูตัวแปร ตัวอยาง เมื่ออาน Variant ของ Vartype 3 การอานของ Get คือ การอาน 6 ไบต ไดแก 2 ไบต สํ าหรับการระบุประเภทขอมูล Variant เปน Vartype 3 (Long) และ 4 ไบตเก็บขอมูล ความยาวของเรคคอรดที่ระบุโดย Len Clause ในประโยคคํ าส่ัง Open ตองการอยางนอย 2 ไบตมากกวาจํ านวนไบตจริงของขอมูลที่ตองการเผื่อเก็บในตัวแปร

หมายเหตุ ประโยคคํ าส่ัง Get สามารถใชอาน Variant array จากดิสก แตไมสามารถใช Get อานประเภทขอมูล Variant แบบปริมาณที่เก็บใน array และไมสามารถใช Get อานออบเจคจากดิสก- ถาตัวแปรที่รับขอมูลเปนประเภทขอมูล Variant ของ Vartype 8 (String) การอานของ Get อาน 2 ไบต

ระบุ Vartype, 2 ไบตระบุความยาวของขอความ และอานขอมูลของขอความ การระบุความยาวของ Len clause ในประโยคคํ าส่ัง Open ตองการอยางนอย 4 ไบตมากกวาความยาวของขอความจริง

- ถาตัวแปรที่รับขอมูล คือ dynamic array การอานของ Get อาน descriptor ซึ่งยาวเทากับ 2 บวก 8 เทาของจํ านวนมิติ คือ 2 + 8 * จํ านวนของมิติ ความยาวเรคคอรดที่ระบุ โดย Len Clause ในประโยคคํ าส่ัง Open ตองมากกวาหรือเทากับจํ านวนรวมไบตทั้งหมดที่ตองการ เพื่ออานขอมูล array และ descriptor ของ array ตัวอยางเชน การประกาศ array ตอไปตองการ 118 ไบต เมื่อ array ไดรับการเขียนไปที่ดิสกDim MyArray (1 To 5, 1 To 10) As Integer

จํ านวน 118 ไบต คือ 18 ไบต สํ าหรับ descriptor (2+8*2) และ 100 ไบต สํ าหรับขอมูล (5*10*2)- ถาตัวแปรรับขอมูล คือ static array การอานของ Get อานเฉพาะขอมูล ไมมีการอาน descriptor

Page 52: widebase.net: VBA References VBA References

widebase.net –VBA References

52

- ถาตัวแปรรับขอมูลเปนตัวแปรประเภทอื่น (นอกจาก Variable-Length string หรือ Variant) การอานของ Get อานเฉพาะขอมูลของตัวแปร ความยาวของเรคคอรดระบุ โดย Len Clause ในประโยคคํ าส่ัง Open ตองมากกวาหรือเทากับความยาวของขอมูลที่ไดรับการอาน

- Get อาน element ของ User-defined type เหมือนกับการอานอยางเอกเทศ ยกเวน ไมมีการรองรับระหวาง element บนดิสก dynamic array ใน User - define type (เขียนดวย Put) มีคํ านํ าหนาโดย descriptor ซึ่งยาวเทากับ 2 บวก 8 เทาของจํ านวนมิติ เทากับ 2 + 8 * จํ านวนของมิติ ความยาวเรคคอรดที่ระบุโดย Len Clause ในประโยคคํ าส่ัง Open ตองมากกวา หรือเทากับจํ านวนรวมของไบตทั้งหมดที่ตองการ เพื่ออานแตละ element รวมถึง array และ descriptor

สํ าหรับไฟลที่เปดในโหมด Binary กฎ Random ทั้งหมดไดรับการประยุกต ยกเวน- Len Clause ในประโยคคํ าส่ัง Open ไมมีผลกระทบ การอานของ Get อาน ตัวแปรทั้งหมดติดตอกัน ซึ่ง

ไมมีการแบงระหวางเรคคอรด- array อื่น นอกจาก array ใน User - defined type การอานของ Get อานเฉพาะขอมูล ไมมีการอาน

descriptor- Get อาน Variable - Length String ที่ไมใช element ของ User – defined type โดยไมมีการยกเวน

ความยาว descriptor 2 ไบต จํ านวนของไบตที่อานเทากับจํ านวนตัวอักษรในขอความตัวอยาง ประโยคคํ าส่ังตอไปอาน 10 ไบต จากไฟลหมายเลข 1

VarString = String (10, " " )Get # 1, VarString

ดูเพ่ิมเติมOpen Statement, Put Statement, ฟงกชัน Seek, Type Statement, ฟงกชัน VarType

ตัวอยาง

Type Record ' กํ าหนด User - define type ID As Integer Name As String * 20End Type

Dim MyRecord As Record, Position ' ประกาศตัวแปร

' เปดไฟลสํ าหรับการเขาถึงแบบสุม (random access)Open "TESTFILE" For Random As #1 Len = Len(MyRecord)

' อานไฟลดวย GetPosition 3 ' กํ าหนดหมายเลขเรคคอรดGet #1, Position, MyRecord ' อานเรคคอรดท่ี 3Close #1 ' ปดไฟล

Page 53: widebase.net: VBA References VBA References

widebase.net –VBA References

53

GetAllSettings Functionสงออกคาเปนรายการ key settings และคาที่เกี่ยวของ (ที่สรางดวย SaveSetting) จาก application entry ในRegistry ของ Windows

ไวยากรณGetAllSettings(appname, section)ฟงกชัน GetAllSettings มีไวยากรณของอากิวเมนต คือ

สวน รายละเอียดAppname บังคับ, เปน expression ของขอความที่เก็บช่ือการประยุกตหรือโครงการที่ key setting

ตองการSection บังคับ, เปน expression ของขอความที่เก็บช่ือ section ที่ key setting ตองการ ฟงกชัน

GetAllSettings สงออกคาเปนประเภทขอมูล Variant ที่เปนคาของ array 2 มิติของขอความที่เก็บคา key setting ทั้งหมดใน section ที่ระบุและคาที่ตรงกัน

ลักษณะการประยุกตฟงกชัน GetAllSettings สงคาตัวแปร Variant ที่ไมกํ าหนดคาเริ่มตน ถาไมมีคา appname หรือ section

ดูเพ่ิมเติมDeleteSetting Statement, ฟงกชัน GetSetting, SaveSetting Statement

ตัวอยางตัวอยางการใชฟงกชัน GetAllSettings ซึ่งเริ่มจากการใชคํ าส่ัง SaveSetting ทํ าการ Registry ใน Windows สํ าหรับโปรแกรมประยุกตที่ระบุเปน appname แลวใชฟงกชัน GetAllSettings แสดงคา settings และสุดทายใชคํ าส่ัง DeleteSetting ลบคาทั้งหมด

' ให Variant เก็บคา array 2 มติท่ีิสงโดย GetAllSettings, Integer เก็บคาตัวนับDim MySettings As Variant, intSettings As Integer

' ท่ีเกบ็คาบางสวนของ settings ใน registrySaveSetting appname := "MyApp", section := "Startup", _key := "Top", setting := 75SaveSetting "MyApp","Startup", "Left", 50' ดึงคา settings.MySettings = GetAllSettings(appname := "MyApp", section := "Startup") For intSettings = LBound(MySettings, 1) To UBound(MySettings, 1) Debug.Print MySettings(intSettings, 0), MySettings(intSettings, 1) Next intSettings

DeleteSetting "MyApp", "Startup"

Page 54: widebase.net: VBA References VBA References

widebase.net –VBA References

54

GetAttr Functionสงออกคาเปนประเภทขอมูล Integer ตามคุณลักษณะไฟล ไดเรคทอรี หรือโฟลเดอร

ไวยากรณGetAttr(pathname)อากิวเมนต pathname ตอง Expression ของขอความที่ระบุชื่อไฟล โดย pathname ตองระบุไดเรค

ทอรี่ หรือโฟลเดอร และไดรฟ

คาสงออกฟงกชัน GetAttr สงคาออกตามรายการสรุปของคา คือ

คาคงที่ คา รายละเอียดvbNormal 0 ปกติvbReadOnly 1 อานอยางเดียวvbHidden 2 ซอนvbSystem 4 System file (ไมมีใหกับ Macintosh)vbDirectory 16 ไดเรคทอรี หรือโฟลเดอรvbArchive 32 ไฟลที่เปล่ียนหลังการสํ ารองครั้งสุดทาย (ไมมีใหกับ Macintosh)vbAlias 64 ระบุชื่อไฟลแบบ alias (มีเฉพาะ Macintosh)

หมายเหตุ• คาคงที่เหลานี้เปนระบุโดย Visual Basic for Application ชื่อเหลานี้สามารถใชในคํ าส่ังในการหาคา

ลักษณะการประยุกตการหาคา attribute ที่กํ าหนด ใชตัวดํ าเนินการ And ในการประมวลผลเปรียบเทียบ bitwise ของคาที่สงออกโดยฟงกชัน GetAttr และคาลักษณะของไฟล ถาผลลัพธไมเปน 0 แสดงวาไฟลนั้นมี attribute ตามที่กํ าหนด เชน คาที่สงออกดวย expression ของ And มีคาเปน 0 ถา attribute ไมไดกํ าหนดเปน archiveResult = GetAttr(FName) And vbArchive

คาที่ไมใช 0 จะไดรับการสงออกถากํ าหนด attribute เปน archive

ดูเพ่ิมเติมAnd (Operator), ฟงกชัน FileAttr, SetAttr Statement

ตัวอยางตัวอยางการใชฟงกชัน GetAttr ในการหา attribute ของไฟล และไดเรคทอรี่หรือโฟลเดอร

' สมมติไฟล TESTFILE กํ าหนด attribute เปน hiddenDim MyAttr

Page 55: widebase.net: VBA References VBA References

widebase.net –VBA References

55

MyAttr = GetAttr("TESTFILE") ' สงออกคา 2

' สงออกคาไมเปน 0 ถากํ าหนด attribute เปน hidden ให TESTFILEDebug.Print MyAttr And vbHidden' สมมติไฟล TESTFILE มี attribute เปน hidden และ read-onlyMyAttr = GetAttr("TESTFILE") ' สงออกคา 3' สงออกคาไมเปน 0 ถากํ าหนด attribute เปน hidden ให TESTFILEDebug.Print MyAttr And (vbHidden + vbReadOnly)'สมมตใิห MYDIR เปน ไดเรคทอรี่หรือโฟลเดอรMyAttr = GetAttr("MYDIR") ' สงออกคา 16

GetObject Functionสงออกคาเปนการอางอิงออบเจค ActiveX จากไฟล

ไวยากรณGetObject([pathname] [,class])อากิวเมนตของฟงกชัน GetObject มีรายละเอียด คือ

อากิวเมนต รายละเอียดpathname ไมบังคับ, เปนประเภทขอมูล Variant (String), ที่ระบุพารทและชื่อของไฟลที่เก็บออบเจค

ที่ตองดึงออกมา ถาไมกํ าหนด pathname จะตองกํ าหนด classclass ไมบังคับ, เปนประเภทขอมูล Variant (String), เปนขอความแสดง class ของออบเจค

อากิวเมนต class ใชไวยากรณ appname.objectivetype มีรายละเอียดของสวน คือ

อากิวเมนต รายละเอียดappname บังคับ, เปนประเภทขอมูล Variant (String), เปนชื่อโปรแกรมประยุกตที่ใหออบเจคobjectivetype บังคับ, เปนประเภทขอมูล Variant (String), เปนประเภทหรือ class ของออบเจคที่

ตองการสราง

ลักษณะการประยุกตฟงกชัน GetObject สามารถเขาถึงออบเจค ActiveX จากไฟลและกํ าหนดออบเจคใหกับตัวแปรออบเจค โดยใชคํ าส่ัง Set statement ในการกํ าหนดออบเจคที่สงคาออกโดยฟงกชัน GetObject ใหกับตัวแปรออบเจค เชน

Dim CADObject As ObjectSet CADObject = GetObject("C:\CAD\SCHEMA.CAD")

เมื่อคํ าส่ังไดรับการประมวลผล การประยุกตที่เกี่ยวของจากการระบุ pathname จะเริ่มขึ้นและออบเจคในไฟลที่ระบุจะทํ างานถา pathname เปน zero-length string (“”) ฟงกชัน GetObject จะสงออกคาออบเจคใหมตามประเภทที่ระบุ ถาไมกํ าหนด pathname ฟงกชัน GetObject จะสงออกเปนออบเจคปจจุบันตามประเภทที่ระบุ ถาไมมีออบเจคตามประเภทที่ระบุจะเกิดความผิดพลาด

Page 56: widebase.net: VBA References VBA References

widebase.net –VBA References

56

โปรแกรมประยุกตบางโปรแกรมยิมยอมใหทํ างานกับบางสวนของไฟล โดยการเพิ่มเครื่องหมายตกใจ (!) ตอทายชื่อไฟลและตามดวยขอความที่บอกสวนของไฟลที่ตองการ เชน โปรแกรมเขียนแบบประเภทหลายชั้นที่เก็บในไฟล สมมติไฟลชื่อ SCHEMA.CAD

Set LayerObject = GetObject("C:\CAD\SCHEMA.CAD!Layer3")

ถาไมมีการระบุ class ของออบเจค การคนหาและการทํ างานกับโปรแกรมประยุกตจะเริ่มตนโดยอัตโนมัติ ตามชื่อไฟลที่กํ าหนดให ไฟลบางไฟลมีหลาย class ซึ่งจะตองกํ าหนดอากิวเมนต class

Dim MyObject As ObjectSet MyObject = GetObject("C:\DRAWINGS\SAMPLE.DRW", "FIGMENT.DRAWING")

FIGNENT เปนชื่อของโปรแกรมประยุกต และ DRAWING เปนชื่อประเภทออบเจคที่สนับสนุนถาเรียกออบเจคมาแลว การอางอิงในคํ าส่ังสามารถใชตัวแปรออบเจค เชน ใชคุณสมบัติและเมธอด กับตัวแปรออบเจคชื่อ MyObject

MyObject.Line 9, 90MyObject.InsertText 9, 100, "Hello, world."MyObject.SaveAs "C:\DRAWINGS\SAMPLE.DRW"

ดูเพ่ิมเติมฟงกชัน CreateObject, Set Statement

ตัวอยางตัวอยางการใชฟงกชัน GetObject เพื่ออางอิงเวิรกชีตของ Microsoft Excel (MyXL) โดยใชคุณสมบัติ Application ในการทํ าใหมองเห็น Microsoft Excel ปดไฟล และอื่นๆ ใหใชการเรียกดวย API calls คือ DetectExcel Sub procedure ในการมองหา Microsoft Excel และถาไฟลที่ระบุทํ างานใหเขาไปที่ Running Object Table ในการเรียกครั้งแรกถา Microsoft Excel ยังไมทํ างานฟงกชัน GetObject จะเกิดความผิดพลาด ตามตัวอยางความผิดพลาดจะทํ าให ExcelWasNotRunning flag ไดรับตั้งคาเปน True การเรียกครั้งที่สองฟงกชัน GetObject จะระบุไฟลที่ตองการเปด ถา Microsoft Excel ยังไมทํ างานฟงกชัน GetObject จะทํ าการเริ่มตนและสงคาอางอิงไปที่เวิรกชีตที่แสดงดวยการระบุชื่อไฟล ตามตัวอยาง ไฟลชื่อ Mytest.txt ตองมีจริงตามตํ าแหนงที่ระบุ ถาเปนอยางอื่น Visual Basic จะแสดงคาความผิดพลาด “Automation error” คํ าส่ังตอไปเปนการทํ าใหมองเห็น Microsoft Excel และ window ที่มีเวิรกชีตที่ระบุ ตอนสุดทายถาไมมี Microsoft Excelเวอรชันกอนทํ างาน คํ าส่ังใชเมธอด Quit ของการประยุกตปด Microsoft Excel ถาโปรแกรมประยุกตยังคงทํ างาน การอางอิงจะทํ าการปลอยโดยตั้งคาเปน Nothing

' ประกาศ routines ของ APIDeclare Function FindWindow Lib "user32" Alias "FindWindowA" _

(ByVal lpClassName as String, ByVal lpWindowName As Long) As Long

Declare Function SendMessage Lib "user32" Alias "SendMessageA" _(ByVal hWnd as Long,ByVal wMsg as Long, ByVal wParam as Long, _ByVal lParam As Long) As Long

Sub GetExcel() Dim MyXL As Object ' ตวัแปรออบเจคที่เก็บการอางอิง Microsoft Excel Dim ExcelWasNotRunning As Boolean ' Flag สํ าหรับการปลอย

Page 57: widebase.net: VBA References VBA References

widebase.net –VBA References

57

'ทดสอบการมองเห็นถา Microsoft Excel กํ าลังทํ างาน On Error Resume Next ' หนวง error trapping' ฟงกชนั Getobject เรียกโดยไมมีอากิวเมนตแรกเพื่อสงการอางอิงของการประยุกต' ถาการประยุกตไมทํ างานจะเกิดความผิดพลาด Set MyXL = Getobject(, "Excel.Application") If Err.Number <> 0 Then ExcelWasNotRunning = True Err.Clear ' กํ าจดัออบเจคที่ผิดพลาดกรณี เกิดความผิดพลาด' ตรวจสอบ Microsoft Excel ถา Microsoft Excel กํ าลังทํ างานนํ าเขาที่ Running Object table DetectExcel' กํ าหนดตัวแปรออบเจค Set MyXL = Getobject("c:\vb4\MYTEST.XLS")' แสดง Microsoft Excel ตลอดจนถึงคุณสมบัติ Application' จากนัน้แสดง window ท่ีเก็บไฟลซึ่งใชการอางอิงออบเจคของ MyXL MyXL.Application.Visible = True MyXL.Parent.Windows(1).Visible = True

' การควบคุมไฟล ถาไฟล Microsoft Excel ท่ีเรียกไมไดทํ างาน ใหปดดวยเมธอด Quit คุณสมบัติ Application' หมายเหต ุการออกจาก Microsoft Excel แถบขอความจะกระพริบ และถามการบันทึกไฟลท่ีเรียก If ExcelWasNotRunning = True Then MyXL.Application.Quit End IF Set MyXL = Nothing ' ปลอยการอางอิงจาก application และ spreadsheet.End Sub

Sub DetectExcel()' Procedure คนหา Excel ท่ีทํ างาน และทํ าการ registers Const WM_USER = 1024 Dim hWnd As Long ' ถา Excel กํ าลังทํ างานให API call สงคาตัวดูแล hWnd = FindWindow("XLMAIN", 0) If hWnd = 0 Then ' 0 มคีวามหมาย Excel ไมทํ างาน Exit Sub Else ' Excel กํ าลงัท ํางานใหใชฟงกชัน SendMessage API เขาสู Running Object Table. SendMessage hWnd, WM_USER + 18, 0, 0 End IfEnd Sub

GetSetting Functionสงออกคาเปนคา key settings จาก application’s entry ใน Registry ของ Windows

ไวยากรณGetSetting(appname, section, key [,default])ฟงกชัน GetSetting มีไวยากรณของอากิวเมนต คือ

สวน รายละเอียดappname บังคับ, เปน expression ของขอความที่เก็บช่ือการประยุกตหรือโครงการที่ key setting

ตองการsection บังคับ, เปน expression ของขอความที่เก็บช่ือ section ที่ key setting ตองการkey บังคับ, เปน expression ของขอความที่เก็บช่ือ key setting เพื่อสงคาออกdefault ไมบังคับ, เปน expression ที่เก็บคาเพื่อสงออก ถาไมมีคาที่กํ าหนดใน key setting ถา

Page 58: widebase.net: VBA References VBA References

widebase.net –VBA References

58

สวน รายละเอียดไมกํ าหนด default จะใชคาเปน zero-length string (“”)

ลักษณะการประยุกตถาไมมีชื่ออากิวเมนตใดๆในฟงกชัน GetSetting แลว ฟงกชัน GetSetting จะสงคาของ default

ดูเพ่ิมเติมDeleteSetting Statement, ฟงกชัน GetAllSettings, SaveSetting Statement

ตัวอยางตัวอยางการใชฟงกชัน GetSetting ซึ่งเริ่มจากการใชคํ าส่ัง SaveSetting ทํ าการ Registry ใน Windows (หรือไฟล .ini ใน 16-bit Windows) สํ าหรับโปรแกรมประยุกต ที่ระบุเปน appname แลวใชฟงกชัน GetSetting แสดงคา settings เพราะอากิวเมนต default ไดรับการกํ าหนดเปนประกันวามีคาบางคาสวนสงออกมา และสุดทายใชคํ าส่ัง DeleteSetting ลบคาทั้งหมด

' ให Variant เก็บคา array 2 มติท่ีิสงโดย GetSetting.Dim MySettings As Variant' ท่ีเกบ็คาบางสวนของ settings ใน registrySaveSetting "MyApp","Startup", "Top", 75SaveSetting "MyApp","Startup", "Left", 50Debug.Print GetSetting(appname := "MyApp", section := "Startup", _ key := "Left", default := "25")DeleteSetting "MyApp", "Startup"

Hex Function, Hex$ Functionฟงกชัน Hex สงออกคาเปน Variant (String) ที่แสดงคาเลขฐานสิบหกฟงกชัน Hex$ สงออกคาเปน String ที่แสดงคาเลขฐานสิบหก

ไวยากรณHex(number)Hex$(number)อากิวเมนต number เปนคาตัวเลข หรือ Expression ของตัวเลขที่มีคาจริง

ลักษณะการประยุกตถา number ไมใชเลขจํ านวนเต็มจะไดรับการปรับคาเปนเลขจํ านวนเต็มที่ใกลที่สุดกอนประมวลผล

ถา number เปน คาที่สงออกมาNull NullEmpty ศูนย (0)ตัวเลขใดๆ แสดงคาเลขฐานสิบหกไดถึง 8 ตัวอักษร

Page 59: widebase.net: VBA References VBA References

widebase.net –VBA References

59

ถาตองการแสดงเลขฐานสิบหกโดยตรงตามคาตัวเลขในชวงจริงดวย &H เชน &H(10) เพื่อแสดงทศนิยมในรูปแบบของเลขฐานสิบหก

ดูเพ่ิมเติมฟงกชัน Oct, ฟงกชัน Oct$

ตัวอยางตัวอยางการใชฟงกชัน Hex ในแสดงตัวเลขเปนเลขฐานสิบหก

Dim MyHexMyHex = Hex(5) ' ผลลัพธ 5.MyHex = Hex(10) ' ผลลัพธ A.MyHex = Hex(459) ' ผลลัพธ 1CB

Hour Functionคาที่สงออกเปนประเภทขอมูล Variant (Integer) ในชวง 0 ถึง 23 จากสวนชั่วโมงของเวลา

ไวยากรณHour(time)อากิวเมนต time สามารถ เปนประเภทขอมูลขอความ (String) ตัวเลข หรือ Expression ที่แสดงในรูป

แบบของเวลา ถา time เปนคาวาง (Null) ผลลัพธจะเปนคาวาง

ดูเพ่ิมเติมฟงกชัน Day, ฟงกชัน Minute, ฟงกชัน Now, ฟงกชัน Second, ฟงกชัน Time

ตัวอยางนํ าฟงกชัน Hour มาใชในการแปลงเวลาที่กํ าหนด ให เปนคาของชั่วโมงซึ่งมีประเภทขอมูลตัวเลขDim myTime, myHourmyTime = #5:25:40 PM#myHour = Hour(myTime) ' ผลลัพธ myHour = 17

IIf Functionสํ าหรับสงออกคาใดคาหนึ่งจาก 2 คาที่ขึ้นกับคาของ expression ที่ประเมินคาได

ไวยากรณIIf(expr,truepart,falsepart)อากิวเมนตของฟงกชัน IIf มีไวยากรณ ดังนี้

Page 60: widebase.net: VBA References VBA References

widebase.net –VBA References

60

อากิวเมนต รายละเอียดexpr บังคับ, เปน expression ที่ใชในการหาคาtruepart บังคับ, เปนคา หรือ expression ที่สงออกถาอากิวเมนต expr เปนจริงfalsepart บังคับ, เปนคา หรือ expression ที่สงออกถาอากิวเมนต expr เปนเท็จ

ลักษณะการประยุกตฟงกชัน IIf จะหาคาจากอากิวเมนต truepart และ falsepart แตสงคาออกเพียงคาเดียว ผลดังกลาวทํ าใหเกิดผลกระทบขางเคียง เชน ถาการหาผลลัพธอากิวเมนต falsepart ในคาความผิดพลาดจากการหารดวยศูนย ซึ่งความผิดพลาดจะเกิดขึ้นเมื่ออากิวเมนต expr เปนจริง

ดูเพ่ิมเติมฟงกชัน Choose, If…Then…Else Statement, Select Case Statement, ฟงกชัน Switch

วิธีการประยุกตใน Accessฟงกชัน IIf สามารถใชในตัว control บนฟอรมหรือรายงานใน Microsoft Access โดยใชฟงกชัน IIf ในการหาคาของ expression และสงออกคาใดคาหนึ่งตามคาที่ไดจาก expression เปน True (-1) หรือ False (0) เชน สามารถใชฟงกชัน IIf ในการตรวจสอบคาฟลดบนฟอรมและหาคาเมื่อเปนคาวาง ถาใช สามารถใชฟงกชัน IIfบังคับใหสงออกคาเปน zero-length string ถาฟลดมีคาที่ไมใชคาวาง ใหฟงกชัน IIf สงออกคาของฟลดที่มีอยูตัวอยางตอไปแสดงการตรวจสอบฟลด ShipCountry ใน Table ชื่อ Orders และสงออกขอความวาง (“”) ถาเปนคาวาง=IIf(IsNull(Forms!Orders![ShipCountry]), “”, Forms!Orders![ShipCountry])

ใน Visual Basic ฟงกชัน IIf จะหาคาจากอากิวเมนต truepart และ falsepart แตสงคาออกเพียงคาเดียว แตในฟอรมหรือรายงานของ Microsoft Access ฟงกชัน IIf จะหาคาที่เหมาะสมเพียงคาเดียวจากอากิวเมนต truepart และ falsepart ดังนั้นจึงไมตองระวังผลกระทบขางเคียงในการหาผลลัพธ เมื่อมีการใชฟงกชัน IIf ในตัว control, expression ของคิวรี่ หรือมาโครหมายเหตุ ฟงกชัน Nz ใน Microsoft Access ใชสํ าหรับการแปลงคาวาง (Null) เปน 0, zero-length string,หรือคาที่ระบุ ถา expression ใชในการทํ างานกับคาวาง ฟงกชัน Nz สามารถเปนตัวเลือกสํ าหรับการใชงานนอกจากฟงกชัน IIfฟงกชัน IIf ใชประโยชนไดดีใน expression ของฟอรมหรือรายงาน มากกวาการใน Visual Basic โดยใน Visual Basic สามารถใชคํ าส่ัง If…Then…Else เต็มรูปแบบซึ่งมีการทํ างานที่กวางขวางกวา

ตัวอยางตัวอยางการใชฟงกชัน IIf ในการหาคาพารามิเตอร TestMe ของ procedure ชื่อ CheckIt และสงออกคาเปนขอความ “Large” ถาผลรวมมากกวา 1000 กรณีอื่นสงออกขอความ “Small”

Function CheckIt (TestMe As Integer) CheckIt = IIf(TestMe > 1000, "Large", "Small")

Page 61: widebase.net: VBA References VBA References

widebase.net –VBA References

61

End Function

ตัวอยางการประยุกตใน Accessตัวอยางการใชฟงกชัน IIf ในการหาคาฟลด OrderAmount และสงออกคาเปนขอความ “Large” ถาผลรวมมากกวา 1000 กรณีอื่นสงออกขอความ “Small” ใหกํ าหนดคาของคุณสมบัติ ControlSource ของตัว controlดวย expression นี้

= IIf([OrderAmount] > 1000, "Large", "Small")

Input # Statementอานขอมูลจากไฟล Sequential ที่เปดขึ้น และกํ าหนดขอมูลไปที่ตัวแปร

ไวยากรณInput # filenumber, varlistประโยคคํ าส่ัง Input # มีสวนไวยากรณ ดังนี้

สวน คํ าอธิบายfilenumber บังคับ, เปนหมายเลขไฟลvarlist บังคับ, เครื่องหมายจุลภาคแบงรายการตัวแปรที่ไดรับการกํ าหนดคาที่อานจากไฟล แต

ไมสามารถอาน array หรือตัวแปรออบเจค ในสวนตัวแปรที่อธิบาย element ของarray หรือ User - defined type สามารถใชได

ลักษณะการประยุกตขอมูลที่อานดวย Input # มักจะเปนขอมูลที่เขียนไปที่ไฟลดวย Write # ใชประโยคคํ าส่ังนี้เฉพาะการเปดไฟลในโหมด Input หรือ Binaryเมื่ออานขอมูลตัวเลข หรือขอความมาตรฐานไดรับการกํ าหนดไปที่ตัวแปร โดยไมมีการปรับปรุง ตารางตอไป แสดงผลลัพธของขอมูลนํ าเขา

ขอมูล การกํ าหนดคาไปที่ตัวแปรจุลภาค หรือแถววาง Empty#Null# Null#True# หรือ #False# True หรือ False#yyyy-mm-dd hh:mm:ss# วันที่หรือเวลา แสดงโดย expression#ERROR errornumber# errornumber

เครื่องคํ าพูด (“ “ ) ภายในขอมูลนํ าเขาไดรับละทิ้ง

Page 62: widebase.net: VBA References VBA References

widebase.net –VBA References

62

ขอมูลในไฟลตองปรากฏในลํ าดับเดียวกันตัวแปรใน varlist และตรงกับตัวแปรที่มีประเภทขอมูลเดียวกัน ถาตัวแปรเปนตัวเลข และขอมูลไมใชตัวเลข คาศูนยจะไดรับกํ าหนดไปที่ตัวแปรถามาถึงทายของไฟลที่กํ าลังอานขอมูล การอานขอมูลจะส้ินสุด และเกิดความผิดพลาดหมายเหตุ สามารถแกไขการอานขอมูลจากไฟลไปที่ตัวแปรดวยการใช Input # ใช Write # แทนที่ประโยคคํ าส่ัง Print # ไปเขียนขอมูลไปที่ไฟล การใช Write # ตองทํ าใหม่ันใจวาขอมูลแตละฟลดไดรับการแบง

ดูเพ่ิมเติมฟงกชัน Input, Open Statement, Print # Statement, Write # Statement

ตัวอยาง

Dim MyString, MyNumberOpen "TESTFILE" For Input As #1 ' เปดไฟลสํ าหรับ InputDo While Not EOF(1) ' อานจนสิ้นสุดไฟล Input #1, MyString, MyNumber ' อานคาเขาสู 2 ตัวแปร Debug.Print MyString, MyNumber ' พมิพใน Debug windowLoopClose #1 ' ปดไฟล

Input Function, Input$ Functionฟงกชัน Input สงออกคาเปนประเภทขอมูล Variant (String) ที่เก็บตัวอักษรจากไฟลที่เปดในโหมด Input หรือ Binaryฟงกชัน Input$ สงออกคาเปนประเภทขอมูล String ที่เก็บตัวอักษรจากไฟลที่เปดในโหมด Input หรือ Binary

ไวยากรณInput(number, [#]filename)Input$(number, [#]filename)ฟงกชัน Input และ ฟงกชัน Input$ มีไวยากรณของสวน คือ

สวน รายละเอียดnumber บังคับ, เปน expression ของตัวเลขที่มีจริงสํ าหรับระบุจํ านวนตัวอักษรที่สงออกfilenumber บังคับ, เปนหมายเลขไฟลที่มีจริง

ลักษณะการประยุกตขอมูลที่อานดวยฟงกชัน Input สามารถเขียนเปนไฟลดวย Print# หรือ Put ใชฟงกชันนี้ในการเปดโหมด Input sหรือ Binary แตแตกตางจากคํ าส่ัง Input# statement โดยที่ฟงกชัน Input อานตัวอักษรไดทั้งหมด รวมถึง เครื่องหมายจุลภาค, แปน “Enter” (carriage return), linefeeds, เครื่องหมายคํ าพูด และชองวางดานหนา

Page 63: widebase.net: VBA References VBA References

widebase.net –VBA References

63

ในการเปดสํ าหรับการเขาถึงแบบ Binary ถาอานไฟลดวยฟงกชัน Input จนกระทั่งฟงกชัน EOF สงคาเปน True จะทํ าใหเกิดความผิดพลาด ใหใชฟงกชัน LOF และ LOC แทนที่ EOF ในการอานไฟล Binary ดวยฟงกชัน Input หรือ Get กับฟงกชัน EOFหมายเหตุ• ฟงกชัน InputB ใชสํ าหรับขอมูลแบบไบตที่เก็บไฟลขอความ (Text file)

ตัวอยางตัวอยางการใชฟงกชัน Input เพื่ออานคาตัวอักษร 1 ตัวจากไฟลและพิมพออกใน Immediate window สมมติให TESTFILE เปน text file ที่มีขอมูลตัวอยางจํ านวนหนึ่ง

Dim MyCharOpen "TESTFILE" For Input As #1 ' เปดไฟลDo While Not EOF(1) ' วนรอบจนกระทั้งส้ินสุดไฟล MyChar = Input(1, #1) ' ดงึ 1 ตัวอักษร Debug.Print MyChar ' พมิพออกใน Immediate windowLoopClose #1 ' ปดไฟล

InputBox Functionสํ าหรับการแสดง dialog box และรอใหผูใชปอนขอความ แลวคลิกปุม และสงคาขอความ

ไวยากรณInputBox(prompt[,title] [,default] [,xpos] [,ypos] [,helpfile, context])ฟงกชัน InputBox มีไวยากรณของสวน คือ

สวน รายละเอียดPrompt บังคับ, เปน expression ขอความแสดงขาวสารใน dialog box ความยาวสูงสุดของ prompt

ประมาณ 1,024 ตัวอักษร ขึ้นกับความกวางของตัวอักษรที่ใช ถา prompt ยาวกวาหนึ่งบรรทัด ใหแบงบรรทัดโดยใชตัวอักษร carriage return (Chr(13)) ตัวอักษร linefeed (Chr(10)) หรือรวมตัวอักษร carriage return และ ตัวอักษร linefeed (Chr(13) & Chr(10))ระหวางแตละบรรทัด

title ไมบังคับ, เปน expression ขอความแสดงชื่อที่แถบไตเติล (Title bar) ของ dialog box ถาไมกํ าหนด title จะใชโปรแกรมประยุกตเปนชื่อที่แถบไตเติล

default ไมบังคับ, เปน expression ขอความแสดงใน text box ตามคา default ถาไมมีการนํ าเขาอื่นถาไมกํ าหนด default จะไมมีการแสดงของ text box

xpos ไมบังคับ, เปน expression ตัวเลขที่ระบุระยะหางทางแนวนอนของขอบดานซายของ dialogbox จากขอบดานซายของจอภาพ ถาไมกํ าหนด xpos ตํ าแหนงของ dialog box จะใชกึ่งกลางของแนวนอน

ypos ไมบังคับ, เปน expression ตัวเลขที่ระบุระยะหางทางแนวตั้งของขอบดานบนของ dialog

Page 64: widebase.net: VBA References VBA References

widebase.net –VBA References

64

สวน รายละเอียดbox จากขอบดานบนของจอภาพ ถาไมกํ าหนด ypos ตํ าแหนงของ dialog box จะใชหนึ่งในสามของแนวนอนจากดานบน

helpfile ไมบังคับ, เปน expression ขอความแสดงไฟล Help file ที่ใหคํ าแนะนํ าและการชวยเหลือสํ าหรับ dialog box ถากํ าหนด helpfile จะตองกํ าหนด context ดวย

context ไมบังคับ, เปน expression ขอความแสดงหมายเลข Help context ที่กํ าหนดตามหัวขอการชวยเหลือโดยผูเขียน Help ถากํ าหนด context จะตองกํ าหนด helpfile ดวย

ลักษณะการประยุกตเมื่อมีการกํ าหนดอากิวเมนต helpfile และ context ผูใชสามารถกดปุม F1 เพื่อดูหัวขอการชวยเหลือที่ตรงกับ context ในโปรแกรมประยุกตบางโปรแกรม เชน Microsoft Excel จะเพิ่มปุม Help ใหโดยอัตโนมัติใน dialog box ถาผูใชคลิกปุม OK หรือกดปุม Enter ฟงกชัน InputBox จะสงคาขอความที่อยู text box ถาผูใชคลิก Cancel ฟงกชัน InputBox จะสงคา zero-length string (“”)หมายเหตุ การกํ าหนดอากิวเมนตนอกเหนือจากอากิวเมนตแรกแลว ตองใชฟงกชัน InputBox เปน expressionการไมกํ าหนดบางตํ าแหนงของอากิวเมนตตองใชเครื่องหมายจุลภาค (,) ในการขามตํ าแหนงนั้น

ดูเพ่ิมเติมฟงกชัน MsgBox

วิธีการประยุกตใน Accessจะไมสามารถเปดไฟลชวยเหลือ (Help) จาก dialog box ที่สรางโดยฟงกชัน Inputbox ใน Microsoft Accessถากํ าหนดคาของอากิวเมนต helpfile และ context จะไมไดรับการพิจารณา และไมมีปุม Help บน Input boxแต Microsoft Access จะไมสรางขอความผิดพลาด

วิธีการประยุกตใน Excelใน Microsoft Excel ขอความในอากิวเมนต prompt เก็บขอความไดไมเกิน 256 ตัวอักษร

ตัวอยางตัวอยางการใชฟงกชัน InputBox ซึ่งมีวิธีการหลายแบบในการใชฟงกชันนี้ ในการใหผูใชปอนคา ถาไมกํ าหนดตํ าแหนง X และ Y ตํ าแหนงของ dialog box จะอยูที่กึ่งกลางของแกนโดยอัตโนมัติ ใหตัวแปร MyValue เก็บคาที่ปอนโดยผูใช ถาผูใชคลิก OK หรือกดปุม Enter ถาผูใชคลิก Cancel ฟงกชัน InputBox จะสงคา zero-length string (“”)

Dim Message, Title, Default, MyValueMessage = "Enter a value between 1 and 3" ' กํ าหนด prompt.Title = "InputBox Demo" ' กํ าหนด title.Default = "1" ' กํ าหนด default.' แสดงขาวสาร, แถบไตเติล และคาเริ่มตนMyValue = InputBox(Message, Title, Default)

Page 65: widebase.net: VBA References VBA References

widebase.net –VBA References

65

' ใช Helpfile และ context ปุม Help จะเพิ่มโดยอัตโนมัติMyValue = InputBox(Message, Title, , , , "DEMO.HLP", 10)' แสดง dialog box ท่ีตํ าแหนง 100, 100.MyValue = InputBox(Message, Title, Default, 100, 100)

ตัวอยางการประยุกตใน Accessตัวอยางการใชฟงกชัน InputBox ในสงชื่อผูใช หมายเหตุ ไมสามารถเปดไฟลชวยเหลือ (Help) จาก dialog box ที่สรางโดยฟงกชัน Inputbox ใน Microsoft Access

Sub Greeting() Dim strInput As String, strMsg As String strMsg = "Enter your name." strInput = InputBox(Prompt:=strMsg, _ Title:="User Info", XPos:=2000, YPos:=2000) MsgBox "Hello, " & strInputEnd Sub

InStr Functionคาที่สงออกเปนประเภทขอมูล Variant (String) ที่ระบุตํ าแหนงที่พบตัวอักษรของขอความที่อางถึงภายในขอความที่คนหา

ไวยากรณInStr([start,] string1, string2 [,compare])อากิวเมนตของฟงกชัน InStr มีรายละเอียด คือ

สวน รายละเอียดstart ไมบังคับ, เปน Expression ของตัวเลขที่กํ าหนดตํ าแหนงเริ่มในการคนหา ถาไมไดระบุการคน

หาจะเริ่มจากอักษรตัวแรก ถา start เปนคาวางจะปรากฏขอผิดพลาด อากิวเมนต start ตองระบุถามีการกํ าหนด compare

string1 บังคับ, เปน Expression ของขอความที่ถูกคนหาstring2 บังคับ, เปน Expression ของขอความอางอิงในการคนหาcompare ไมบังคับ, เปนการระบุวิธีการเปรียบเทียบ อากิวเมนต compare ไมจํ าเปนตองกํ าหนด หรือ

กํ าหนดเปน 0, 1 หรือ 2 การกํ าหนดเปน 0 เปนกํ าหนดการคนหาแบบไบนารี ระบุเปน 1กํ าหนดการคนหาแบบขอความที่ไมพิจารณาอักษรตัวเล็กหรือใหญ ระบุเปน 2 สํ าหรับMicrosoft Access โดยเฉพาะ เปนคนหาตามสารสนเทศที่มีอยูในฐานขอมูล ถา compareเปนคาวาง จะปรากฏขอผิดพลาด ถาcompare ไมไดระบุ ฟงกชันจะคนหาวิธีการเปรียบเทียบ

คาสงออกถา คาสงออกของ Instrstring1 เปน Zero-length string 0string1 เปนคาวาง คาวาง (Null)

Page 66: widebase.net: VBA References VBA References

widebase.net –VBA References

66

ถา คาสงออกของ Instrstring2 เปน Zero-length string startstring2 เปนคาวาง คาวาง (Null)string2 ไมพบ 0string2 พบใน string1 ตํ าแหนงที่คนพบstart > string2 0

หมายเหตุฟงกชัน InStrB ใชในการคนหาขอมูลแบบไบต

ดูเพ่ิมเติมOption Compare Statement, ฟงกชัน StrComp

ตัวอยางฟงกชัน InStr นํ ามาใชในการคนหาตํ าแหนงตัวอักษรของ 2 ขอความ

Dim SearchString, SearchChr, myStrSearchString = "XXpXXpXXPXXP" ' ขอความที่ถูกคนหา หรือ string1SearchChr = "P" ' ขอความอางอิง หรือ string2' คนหาแบบตัวอักษร โดยตํ าแหนงเริ่มตน คือ 4myStr = Instr(4, SearchString, SearchChr, 1) ' คาสงออก คือ 6' คนหาแบบไบนารี โดยตํ าแหนงเริ่มตน คือ 1myStr = Instr(1, SearchString, SearchChr, 0) ' คาสงออก คือ 9' คนหาแบบไบนารี โดยใชคาเริ่มตน (default)myStr = Instr(SearchString, SearchChr) ' คาสงออก คือ 9' คนหาแบบไบนารี โดยใชคาเริ่มตน (default)myStr = Instr(1, SearchString, “W”) ' คาสงออก คือ 0

Int Functionดู Fix Function

IPmt Functionสงออกคาเปนประเภทขอมูล Double ที่ระบุดอกเบี้ยที่จายในงวดที่ตองการทราบ โดยมีงวดการจายสมํ่ าเสมอ การจายคงที่ และอัตราดอกเบี้ยคงที่

ไวยากรณIPmt(rate, per, nper, pv [, fv [,type]])อากิวเมนตของฟงกชัน IPmt มีความหมาย คือ

สวน รายละเอียดrate บังคับ, เปนประเภทขอมูล Double, ระบุอัตราดอกเบี้ยตองวด เชน การกูเงินซื้อรถยนตที่อัตราดอก

Page 67: widebase.net: VBA References VBA References

widebase.net –VBA References

67

สวน รายละเอียดเบี้ย 10% ตอป และงวดการจายเปนรายเดือน อัตราดอกเบี้ยตอเดือน คือ 0.1/12 หรือ 0.0083

per บังคับ, เปนประเภทขอมูล Double, ระบุงวดการจาย ซึ่งอยูในชวง 1 ถึง npernper บังคับ, เปนประเภทขอมูล Integer, ระบุจํ านวนงวดการจายทั้งหมด เชน การจายเงินกูรายเดือนของ

เงินกู 4 ป จํ านวนงวดทั้งหมด คือ 4 * 12 (หรือ 48) งวดการจายpv บังคับ, เปนประเภทขอมูล Variant, มูลคาปจจุบัน (หรือเงินรวมทั้งหมด) ของชุดการจายสํ าหรับมูล

คาอนาคต เชน การยืมเงินเพื่อซื้อรถยนต เงินกู คือ มูลคาปจจุบันที่ผูกูตองจายเปนรายเดือน ถาไมกํ าหนด จะใชคาเปน 0

fv ไมบังคับ, เปนประเภทขอมูล Double, ระบุมูลคาในอนาคต หรือจํ านวนสดคงเหลือเมื่อส้ินสุดงวดการจาย เชน ตองการฝากเงินออมเพื่อหได ฿50,000 ในระยะเวลา 18 เดือน เงินจํ านวน ฿50,000 คือ มูลคาอนาคต ถาไมกํ าหนด จะใชคาเปน 0

type ไมบังคับ, เปนประเภทขอมูล Variant, ระบุกํ าหนดการจาย ใช 0 ถากํ าหนดชํ าระเปนส้ินงวด หรือ 1ถากํ าหนดชํ าระเปนตนงวด ถาไมกํ าหนด จะใชคาเปน 0

ลักษณะการประยุกตงวดการจายเปนชุดการจายที่คงที่ตลอดระยะเวลาทั้งหมด การจายสามารถเปนการชํ าระเงินกู ( เชน คางวดเงินกูซอบาน) หรือการลงทุน ( เชน การฝากเงินออมเปนรายเดือน)อากิวเมนต rate และ nper ตองมีหนวยเปนหนวยเดียวกัน เชน rate คํ านวณเปนอัตราตอเดือน nper จะตองเปนรายเดือนดวยอากิวเมนตทั้งหมด เงินสดจายออก (เชน การฝากเงิน) ใหเปนคาลบ เงินสดรับเขา (เชน เงินปนผล) ใหเปนบวก

ดูเพ่ิมเติมฟงกชัน DDB, ฟงกชัน IRR, ฟงกชัน MIRR, ฟงกชัน NPer, ฟงกชัน NPV, ฟงกชัน Pmt, ฟงกชัน PPmt, ฟงกชันPV, ฟงกชัน Rate, ฟงกชัน SLN, ฟงกชัน SYD

ตัวอยางตัวอยางการใชฟงกชัน IPmt ในการคํ านวณจํ านวนดอกเบี้ยที่จาย เมื่อการจายเทากันทุกงวด โดยใหกํ าหนดเปนงวด (APR / 12), จํ านวนงวดการจายทั้งหมด (TotPmts), การจาย (Payment), มูลคาปจจุบันของการลงทุน (PVal), มูลคาเงินกูในอนาคต (FVal), และตัวเลขที่ระบุกํ าหนดการจาย (PayType)

Dim FVal, Fmt, PVal, APR, TotPmts, PayType, Period, IntPmt, TotInt, MsgConst ENDPERIOD = 0, BEGINPERIOD = 1 ' กํ าหนดประเภทการจายFVal = 0 ' ปกติใช 0 สํ าหรับเงินกูFmt = "###,###,##0.00" ' กํ าหนดรูปแบบการเงินPVal = InputBox("How much do you want to borrow?")APR = InputBox("What is the annual percentage rate of your loan?")If APR > 1 Then APR = APR / 100 ' ตรวจความถูกตองของคาTotPmts = InputBox("How many monthly payments?")PayType = MsgBox("Do you make payments at end of the month?", vbYesNo)

If PayType = vbNo Then PayType = BEGINPERIOD Else PayType = ENDPERIOD

Page 68: widebase.net: VBA References VBA References

widebase.net –VBA References

68

For Period = 1 To TotPmts ' Total all interest. IntPmt = IPmt(APR / 12, Period, TotPmts, -PVal, FVal, PayType) TotInt = TotInt + IntPmtNext PeriodMsg = "You'll pay a total of " & Format(TotInt, Fmt)Msg = Msg & " in interest for this loan."MsgBox Msg ' แสดงผลลัพธ

IRR Functionสงออกคาเปนประเภทขอมูล Double ของอัตราผลตอบแทนภายใน (Internal rate of return) ของกระแสเงินสด (รายจายและรายรับ)

ไวยากรณIRR(value() [,guess])อากิวเมนตของฟงกชัน IRR มีความหมาย คือ

สวน รายละเอียดvalue บังคับ, เปน array ของประเภทขอมูล Double, ระบุมูลคาของกระแสเงิน โดย array ตองเก็บคาอยาง

นอยเปนคาลบ 1 คา (รายจาย) และคาบวก 1 คา (รายรับ)guess ไมบังคับ, เปนประเภทขอมูล Variant, ระบุคาในการประมาณคาสงออกของฟงกชัน IRR ถาไม

กํ าหนด จะใหคา guess เปน 0.1 (10%)

ลักษณะการประยุกตอัตราผลตอบแทนภายใน (Internal rate of return) เปนอัตราดอกเบี้ยรับสํ าหรับการลงทุนที่ประกอบดวยรายจายและรายรับ ที่เกิดขึ้นภายในโครงการฟงกชัน IRR ใชลํ าดับของ value ภายใน array ในการแปรความหมายลํ าดับของรายจายและรายรับ ดังนั้นจึงตองมั่นใจวารายจายและรายรับอยูในลํ าดับที่ถูกตอง กระแสเงินสดสํ าหรับแตละงวดไมจํ าเปนตองคงที่ฟงกชัน IRR จํ าคํ านวณแบบซํ้ า (iteration) โดยเริ่มจากคาของ guess โดยฟงกชัน IRR จะคํ านวณจนกระทั่งไดคาแมนยํ าภายใน 0.00001% ถาฟงกชัน IRR ไมสามารถหาไดภายใน 20 รอบ จะไมสามารถหาคํ าตอบได

ดูเพ่ิมเติมฟงกชัน DDB, ฟงกชัน FV, ฟงกชัน MIRR, ฟงกชัน NPer, ฟงกชัน NPV, ฟงกชัน Pmt, ฟงกชัน PPmt, ฟงกชันPV, ฟงกชัน Rate, ฟงกชัน SLN, ฟงกชัน SYD

ตัวอยางตัวอยางการใชฟงกชัน IRR ในการสงออกคาอัตราผลตอบแทนภายในสํ าหรับกระแสเงินสด 5 งวดที่เก็บใน array ชื่อ Values() โดยสมาชิกแรกของ array เปนคาลบเพื่อการใชจายในจัดตั้งธุรกิจ กระแสเงินสดที่เหลืออีก 4 งวดเปนคาบวกเพื่อแสดงกระแสเงินใน 4 ป guess นํ ามาใชในการประมาณคา IRR

Page 69: widebase.net: VBA References VBA References

widebase.net –VBA References

69

Dim Guess, Fmt, RetRate, MsgStatic Values(5) As Double ' กํ าหนด array.

Guess = .1 ' guess เรมิตนท่ี 10%Fmt = "#0.00" ' กํ าหนดรูปแบบการเงินValues(0) = -70000 ' คาใชจายในจัดตั้งธุรกิจ

' กระแสเงนิสดเปนบวกแสดงรายรับ 4 ปในการทํ าธุรกิจValues(1) = 22000 : Values(2) = 25000Values(3) = 28000 : Values(4) = 31000RetRate = IRR(Values(), Guess) * 100 ' การคํ านวณ IRR

Msg = "The internal rate of return for these five cash flows is "Msg = Msg & Format(RetRate, Fmt) & " percent."MsgBox Msg ' แสดงคา IRR

IsArray Functionสงออกคาเปนประเภทขอมูล Boolean เพื่อตรวจตัวแปรเปน array หรือไม

ไวยากรณIsArray(varname)อากิวเมนต varname ของฟงกชันเปนการระบุตัวแปร

ลักษณะการประยุกตฟงกชัน IsArray สงออกคาเปน True ถาตัวแปรเปน array กรณีอื่นๆ สงคาเปน False

ดูเพ่ิมเติมฟงกชัน Array, ฟงกชัน IsDate, ฟงกชัน IsEmpty, ฟงกชัน IsError, ฟงกชัน IsMissing, ฟงกชัน IsNull,ฟงกชัน IsNumeric, ฟงกชัน IsObject, ฟงกชัน TypeName, ฟงกชัน VarType, ประเภทขอมูล Variant

ตัวอยางตัวอยางการใชฟงกชัน IsArray เพื่อตรวจสอบตัวแปรที่เปน array

Dim MyArray(1 To 5) As Integer, YourArray, MyCheck ' ประการตัวแปร arrayYourArray = Array(1, 2, 3) ' ใชฟงกชัน IsArrayMyCheck = IsArray(MyArray) ' สงออกคาเปน TrueMyCheck = IsArray(YourArray) ' สงออกคาเปน True

IsDate Functionสงออกคาเปนประเภทขอมูล Boolean เพื่อตรวจสอบวา expression สามารถแปลงเปนวันที่ไดหรือไม

ไวยากรณIsDate(expression)

Page 70: widebase.net: VBA References VBA References

widebase.net –VBA References

70

อากิวเมนต expression เปนประเภทขอมูล Variant ที่เก็บคา expression เปนวันที่หรือขอความที่รับรูเปน วันหรือเวลา

ลักษณะการประยุกตฟงกชัน IsDate สงออกคาเปน True ถา expression เปนวันที่หรือสามารถแปลงวันที่ได กรณีอื่นๆ สงคาเปน False ใน Microsoft Access วันที่ที่มีจริง คือ ชวงระหวาง 1 มกราคม ค.ศ. 100 ถึง 31 ธันวาคม ค.ศ. 9999

ดูเพ่ิมเติมฟงกชัน Array, ฟงกชัน IsArray, ฟงกชัน IsEmpty, ฟงกชัน IsError, ฟงกชัน IsMissing, ฟงกชัน IsNull,ฟงกชัน IsNumeric, ฟงกชัน IsObject, ฟงกชัน TypeName, ฟงกชัน VarType, ประเภทขอมูล Variantตัวอยางตัวอยางการใชฟงกชัน IsDate ในการหาวา expression สามารถแปลงคาเปนวันหรือไม

Dim MyDate, YourDate, NoDate, MyCheckMyDate = "February 12, 1969": YourDate = #2/12/69#: NoDate = "Hello"MyCheck = IsDate(MyDate) ' สงออกคาเปน TrueMyCheck = IsDate(YourDate) ' สงออกคาเปน TrueMyCheck = IsDate(NoDate) ' สงออกคาเปน True

ตัวอยางประยุกตใน Accessตัวอยางการใชฟงกชัน IsDate ในการหาวา expression สามารถแปลงคาเปนวันหรือไม แลวแสดงคา

Sub CheckDate() Dim strDate As String strDate = InputBox("Enter string to display as a date.") ' ทดสอบตัวแปร If IsDate(strDate) Then 'ถาตวัแปรเปนวันท่ี จัดรูปแบบและแสดงขอความ MsgBox "The date is: " & Format(DateValue(strDate), "Long Date") Else MsgBox "The value you entered is not a date." End IfEnd Sub

IsEmpty Functionสงออกคาเปนประเภทขอมูล Boolean เพื่อตรวจสอบวาตัวแปรมีคาใดๆหรือไม

ไวยากรณIsEmpty(expression)อากิวเมนต expression เปนประเภทขอมูล Variant ที่เก็บคา expression เปนตัวเลขหรือขอความ

เนื่องจากฟงกชัน IsEmpty ใชในการหาคาใดๆของตัวแปร ทํ าใหอากิวเมนตของตัวแปรมักจะเปนตัวแปรเดี่ยว

Page 71: widebase.net: VBA References VBA References

widebase.net –VBA References

71

ลักษณะการประยุกตฟงกชัน IsEmpty สงออกคาเปน True ถาตัวแปรไมมีคามากอน หรือกํ าหนดเปน Empty กรณีอื่นๆ สงคาเปน False โดยคา False จะสงออกถา expression เก็บคามากกวา 1 ตัวแปร ฟงกชัน IsEmpty จะใหสารสนเทศไดดีกับประเภทขอมูล Variant

ดูเพ่ิมเติมฟงกชัน Array, ฟงกชัน IsArray, ฟงกชัน IsDate, ฟงกชัน IsError, ฟงกชัน IsMissing, ฟงกชัน IsNull, ฟงกชันIsNumeric, ฟงกชัน IsObject, ฟงกชัน TypeName, ฟงกชัน VarType, ประเภทขอมูล Variant

ตัวอยางตัวอยางการใชฟงกชัน IsEmpty ในการหาคาใดๆ

Dim MyVar, MyCheckMyCheck = IsEmpty(MyVar) ' สงออกคาเปน TrueMyVar = Null ' กํ าหนดคา NullMyCheck = IsEmpty(MyVar) ' สงออกคาเปน FalseMyVar = Empty ' กํ าหนดคา EmptyMyCheck = IsEmpty(MyVar) ' สงออกคาเปน True

IsError Functionสงออกคาเปนประเภทขอมูล Boolean เพื่อตรวจสอบวา expression เปนคาผิดพลาดหรือไม

ไวยากรณIsError(expression)อากิวเมนต expression เปนประเภทขอมูล Variant ของ VarType vbError

ลักษณะการประยุกตคาผิดพลาดไดรับการสรางดวยเลขจํ านวนจริงแลวแปลงเปนคาผิดพลาดดวยฟงกชัน CVError ซึ่งฟงกชัน IsError สามารถใชในการหาคาไดถา expression ของตัวเลขแสดงคาความผิดพลาดได ฟงกชัน IsError สงออกคาเปน True ถาอากิวเมนต expression ชี้คาผิดพลาด กรณีอื่นๆ ฟงกชัน Empty จะใหสารสนเทศไดดีกับประเภทขอมูล Variant ของ VarType vbError

ดูเพ่ิมเติมฟงกชัน Array, ฟงกชัน IsArray, ฟงกชัน IsDate, ฟงกชัน IsEmpty, ฟงกชัน IsMissing, ฟงกชัน IsNull,ฟงกชัน IsNumeric, ฟงกชัน IsObject, ฟงกชัน TypeName, ฟงกชัน VarType, ประเภทขอมูล Variant

Page 72: widebase.net: VBA References VBA References

widebase.net –VBA References

72

ตัวอยางตัวอยางการใชฟงกชัน IsError เพื่อตรวจสอบคา expression ตัวเลขที่เปนคาผิดพลาด โดยฟงกชัน CVErr ใชในการสงออก Error Variant ที่ผูใชกํ าหนดเอง ซึ่งสมมติใหชื่อวา UserFunction ตามตัวอยางใหคาจากฟงกชัน UserFunction ดวยคา = CVErr(32767) โดยที่ 32767 เปนหมายเลขที่ผูใชกํ าหนด

Dim ReturnVal, MyCheckReturnVal = UserFunction()MyCheck = IsError(ReturnVal) ' สงออกคาเปน True

IsMissing Functionสงออกคาเปนประเภทขอมูล Boolean เพื่อตรวจสอบวาอากิวเมนต optional variant มีการสงคาตัวแปรผานไปยัง procedure หรือไม

ไวยากรณIsMissing(argument)อากิวเมนต argument เปนอากิวเมนต ที่เก็บช่ือ optional variant ของอากิวเมนตใน procedure

ลักษณะการประยุกตฟงกชัน IsMissing ใชเพื่อตรวจสอบอากิวเมนต optional variant ไดมีกํ าหนดคาตัวแปร เมื่อมีการเรียกใช procedure หรือไม ฟงกชัน IsMissing สงออกคาเปน True ถาไมมีการกํ าหนดอากิวเมนต กรณีอื่นๆ สงคาเปน False ถาฟงกชัน IsMissing สงคาสํ าหรับอากิวเมนตเปน True จะทํ าใหผูใชสามารถกํ าหนดรหัสของสาเหตุไดเอง ถาฟงกชัน IsMissing ใชกับอากิวเมนต ParamArray จะสงคาเปน False เสมอ

ดูเพ่ิมเติมฟงกชัน Array, ฟงกชัน IsArray, ฟงกชัน IsDate, ฟงกชัน IsEmpty, ฟงกชัน IsError, ฟงกชัน IsNull, ฟงกชันIsNumeric, ฟงกชัน IsObject, ฟงกชัน TypeName, ฟงกชัน VarType, ประเภทขอมูล Variant

ตัวอยางตัวอยางฟงกชัน IsMissing ใชเพื่อตรวจสอบอากิวเมนต optional variant ไดสงผานคาไปยัง procedure ที่ผูใชกํ าหนดเองหรือไม หมายเหตุ อากิวเมนตแบบ Optional สามารถเปนใชตามคากํ าหนดเริ่มตน หรือประเภทขอมูลอื่นนอกจาก Variant.

Dim ReturnValue' ค ําส่ังเรียกใช procedure ท่ีผูใชกํ าหนดReturnValue = ReturnTwice() ' สงออกคาเปน NullReturnValue = ReturnTwice(2) ' สงออกคาเปน 4

Function ReturnTwice(Optional A) ' Function procedure ท่ีกํ าหนดเอง If IsMissing(A) Then ReturnTwice = Null ' ถาอากิวเมนตหายไป สงออกคา Null Else ReturnTwice = A * 2 ' ถาอากิวเมนตสงมา ใหสงออกคาเปน 2 เทา End IfEnd Function

Page 73: widebase.net: VBA References VBA References

widebase.net –VBA References

73

IsNull Functionสงออกคาเปนประเภทขอมูล Boolean เพื่อตรวจสอบวา expression เปนคาวาง (Null) หรือไม

ไวยากรณIsNull(expression)อากิวเมนต expression เปนประเภทขอมูล Variant ที่เก็บคา expression เปนตัวเลขหรือขอความ

ลักษณะการประยุกตฟงกชัน IsNull สงออกคาเปน True ถา expression เปนคาวาง (Null) กรณีอื่นๆ สงคาเปน False ถา expression เก็บคามากกวา 1 ตัวแปร จะทํ าใหฟงกชัน IsNull สงคาเปน Trueคาวาง (Null) เปนการชี้วาตัวแปรไมมีคา แต Null ตางจาก Empty โดย Empty เปนการแสดงวาตัวแปรยังไมไดมีการกํ าหนดคา ซึ่งตางจาก zero-length string (“”) ที่บางครั้งอางเปนคา Nullหมายเหตุการใชฟงกชัน IsNull ในการหาคาวาง (Null) ใน expression บางสภาพแวดลอม expression ที่นํ ามาตรวจสอบคา เชน If Var = Null และ If Var <> Null นั้นจะใหคา False เสมอ เพราะ expression ที่เก็บเปนคา Nullและตัวเองเปน Null จึงใหคา False

ดูเพ่ิมเติมฟงกชัน IsArray, ฟงกชัน IsDate, ฟงกชัน IsEmpty, ฟงกชัน IsError, ฟงกชัน IsMissing, ฟงกชัน IsNumeric,ฟงกชัน IsObject, ฟงกชัน TypeName, ฟงกชัน VarType, ประเภทขอมูล Variant

ตัวอยางตัวอยางฟงกชัน IsNull ใชในการหาคาถาตัวแปรมีคาเปน Null

Dim MyVar, MyCheckMyCheck = IsNull(MyVar) ' สงออกคาเปน FalseMyVar = ""MyCheck = IsNull(MyVar) ' สงออกคาเปน FalseMyVar = NullMyCheck = IsNull(MyVar) ' สงออกคาเปน True

ตัวอยางฟงกชัน IsNull ใชในการหาคาถาตัวแปรมีคาเปน Null หรือไม โดยถาเปนคา Null ใหแสดงขอความ แตถาคาไมเปน Null ใหแสดงคา

Sub ControlValue(ctlText As Control) Dim strMsg As String If ctlText.ControlType = acTextBox Then ' ตรวจสอบวาตัว control เปน text box If IsNull(ctlText.Value) Then ' ถาคาตัว control เปน Null และขอความ strMsg = "No data in the field '" & ctlText.Name _ & "'." & vbCrLf & "Please enter data for this field now." If MsgBox(strMsg, vbQuestion) = vbOK Then Exit Sub End If Else

Page 74: widebase.net: VBA References VBA References

widebase.net –VBA References

74

MsgBox (ctlText.Value) ' ถาคาไมเปน Null ใหแสดงคา End If End IfEnd Sub

IsNumeric Functionสงออกคาเปนประเภทขอมูล Boolean เพื่อตรวจสอบวา expression เปนคาตัวเลขหรือไม

ไวยากรณIsNumeric(expression)อากิวเมนต expression เปนประเภทขอมูล Variant ที่เก็บคา expression เปนตัวเลขหรือขอความ

ลักษณะการประยุกตฟงกชัน IsNumeric สงออกคาเปน True ถา expression สามารถรับรูวาเปนตัวเลข กรณีอื่นๆ สงคาเปน Falseฟงกชัน IsNumeric สงคาเปน False ถา expression เปน expression ของวันที่

ดูเพ่ิมเติมฟงกชัน IsArray, ฟงกชัน IsDate, ฟงกชัน IsEmpty, ฟงกชัน IsError, ฟงกชัน IsMissing, ฟงกชัน IsNull,ฟงกชัน IsObject, ฟงกชัน TypeName, ฟงกชัน VarType, ประเภทขอมูล Variant

ตัวอยางตัวอยางฟงกชัน IsNumeric ใชในการหาคาถาตัวแปรสามารถตรวจคาเปนตัวเลข

Dim MyVar, MyCheckMyVar = "53" ' กํ าหนดคาMyCheck = IsNumeric(MyVar) ' สงออกคาเปน TrueMyVar = "459.95" ' กํ าหนดคาMyCheck = IsNumeric(MyVar) ' สงออกคาเปน TrueMyVar = "45 Help" ' กํ าหนดคาMyCheck = IsNumeric(MyVar) ' สงออกคาเปน False

IsObject Functionสงออกคาเปนประเภทขอมูล Boolean เพื่อตรวจสอบวา identifier เปนออบเจคหรือไม

ไวยากรณIsObject(identifier)อากิวเมนต identifier ตองการชื่อของตัวแปร

ลักษณะการประยุกตฟงกชัน IsObject ใชประโยชนในการหาคาประเภทขอมูล Variant ของ VarType vbObject ซึ่งจะเกิดขึ้นเมื่อตัวแปรอางถึงออบเจค หรือ Nothing

Page 75: widebase.net: VBA References VBA References

widebase.net –VBA References

75

ฟงกชัน IsObject สงออกคาเปน True ถา identifier เปนตัวแปรที่ประกาศเปนออบเจค หรือประเภทของ classที่มีอยู หรือ identifier ที่เปนประเภทขอมูล Variant ของ VarType vbObject หรือออบเจคที่ผูใชกํ าหนด กรณีอื่นๆ สงคาเปน False และฟงกชัน IsObject สงคาเปน True ตัวแปรกํ าหนดเปน Nothing

ดูเพ่ิมเติมฟงกชัน IsArray, ฟงกชัน IsDate, ฟงกชัน IsEmpty, ฟงกชัน IsError, ฟงกชัน IsMissing, ฟงกชัน IsNull,ฟงกชัน IsNumeric, ฟงกชัน TypeName, ฟงกชัน VarType, Set Statement, ประเภทขอมูล Object, ประเภทขอมูล Variant,

ตัวอยางตัวอยางฟงกชัน IsObject ใชในการหาคา ถา identifier แสดงเปนตัวแปรออบเจค MyObject และ YourObject เปนตัวแปรออบเจคประเภทเดียวกัน

Dim MyInt As Integer, YourObject, MyCheck ' ประกาศตัวแปรDim MyObject As ObjectSet YourObject = MyObject ' กํ าหนดการอางอิงออบเจคMyCheck = IsObject(YourObject) ' สงออกคาเปน TrueMyCheck = IsObject(MyInt) ' สงออกคาเปน False

ตัวอยางประยุกตใน Accessตัวอยางฟงกชัน IsObject ในการตรวจสอบอากิวเมนตที่สงออบเจคใหฟงกชัน

Sub CheckObject(varAny As Variant) Dim varX as Variant If IsObject(varAny) Then Set varX = varAny Else varX = varAny End IfEnd Sub

Kill Statementลบไฟลจากดิสก

ไวยากรณKill pathnamepathname เปนอากิวเมนตบังคับ ที่เปน string expression ซึ่งระบุชื่อไฟลที่ตองการลบ pathname

อาจจะรวมไดเรคทอรี่หรือโฟลเดอร และไดรฟ

ลักษณะการประยุกตKill สนับสนุนการใช * สํ าหรับหลายตัวอักษร และ ? สํ าหรับตัวอักษรเดียว เพื่อระบุหลายไฟลถาพยายามลบไฟลที่เปดอยู จะเกิดความผิดพลาด

Page 76: widebase.net: VBA References VBA References

widebase.net –VBA References

76

หมายเหตุ การลบไดเรคทอรี ใชประโยคคํ าส่ัง RmDir

ดูเพ่ิมเติมฟงกชัน MacID, RmDir Statement

ตัวอยาง

' สมมตใิห TESTFILE เปนไฟลท่ีมีขอมูลKill "TESTFILE" ' ลบไฟล' ลบไฟล *.txt ท้ังหมดในไดเรคทอรีปจจุบันใน Microsoft WindowKill "*.TXT"

Last Functionดู First Function

LBound Functionสงออกประเภทขอมูล Long ที่เปนคานอยที่สุดสํ าหรับการระบุมิติของ array

ไวยากรณLBound(arrayname [,dimension])ฟงกชัน LBound มีไวยากรณของสวน ดังนี้

สวน รายละเอียดarrayname บังคับ, เปนชื่อของตัวแปร array ตามมาตรฐานการตั้งชื่อ arraydimension ไมบังคับ, มีคาเปน Variant(Long) ซึ่งเปนเลขจํ านวนเต็มของมิติขอบเขตดานลางที่ไดรับ

การสงออก ใช 1 สํ าหรับมิติที่ 1, 2 สํ าหรับมิติที่ 2 และตอไป ถาละ dimension จะกํ าหนดคาเปน 1

ลักษณะการประยุกตฟงกชัน LBound จะใชงานรวมกับฟงกชัน UBound เพื่อคนหาขนาดของ array โดยฟงกชัน UBound ใชคนหาขอบเขตดานบนของ arrayฟงกชัน LBound สงออกคาตามตารางนี้สํ าหรับ array ตัวอยาง

DIM A (1 To 100, 0 To 3, -3 To 4)

ประโยคคํ าส่ัง คาสงออกLBound(A, 1) 1LBound(A, 2) 0LBound(A, 3) -3

Page 77: widebase.net: VBA References VBA References

widebase.net –VBA References

77

คาเริ่มตนของขอบเขตลางสํ าหรับมิติใดๆ เปน 0 หรือ 1 ขึ้นกับการตั้งคาของประโยคคํ าส่ัง Option Base ฐานของ array ที่สรางดวยฟงกชัน Array คือ ศูนย แตไมมีผลกระทบจาก Option Baseมิติของ array ที่ตั้งคาดวยการใช To clause ในประโยคคํ าส่ัง Dim, Private, Public, ReDim หรือ Staticสามารถมีคา Integer ตามขอบเขตดานลาง

ดูเพ่ิมเติมDim Statement, Option Base Statement, Private Statement, Public Statement, ReDim Statement,Static Statement, ฟงกชัน UBound

ตัวอยางตัวอยางการใชฟงกชัน LBound คนหาคานอยที่สุดสํ าหรับการระบุมิติของ array ใชประโยคคํ าส่ัง Option Base เขียนทับคาฐานเริ่มตนของ array ใหมีคาเปนศูนย

Dim LowerDim MyArray(1 To 10, 5 To 15, 10 To 20)Dim AnyArrya(10)Lower = LBound(MyArray, 1) ' สงออกคา 1Lower = LBound(MyArray, 3) ' สงออกคา 10Lower = LBound(AnyArray) ' สงออกคา 0 หรือ 1 ขึ้นกับการตั้งคาของ Option Base

ตัวอยางการประยุกตใน Excelตัวอยางการเขียน element ของรายการที่เจาะจงในคอลัมนแรกบน Sheet1

listArray = Application.GetCustomListContents(1)For i = LBound(listArray, 1) To Ubound(listArray, 1)

Worksheets("Sheet1").Cells(i, 1).Value = listArray(i)Next i

LCase Function, LCase$ Functionฟงกชัน LCase คาสงออกเปนประเภทขอมูล Variant (String) ที่แปลงเปนอักษรตัวเล็กฟงกชัน LCase$ คาสงออกเปนประเภทขอมูล String ที่แปลงเปนอักษรตัวเล็ก

ไวยากรณLCase(string)LCase$(string)อากิวเมนต string ที่ตองการเปน Expression ที่เปนจริง ถา string เปนคาวาง (Null) ผลลัพธจะเปน

คาวาง

ลักษณะการประยุกตเปล่ียนเฉพาะอักษรตัวใหญใหเปนอักษรตัวเล็ก โดยอักษรตัวเล็กและคาประเภทอื่นจะไมมีการเปลี่ยนแปลง

Page 78: widebase.net: VBA References VBA References

widebase.net –VBA References

78

ดูเพ่ิมเติมฟงกชัน UCase, ฟงกชัน Ucase$

ตัวอยางฟงกชัน LCase นํ ามาใชในการแปลงตัวอักษรใหเปนอักษรตัวเล็ก

Dim UpperCase, LowerCaseUpperCase = "Hello World 2000"LowerCase = LCase(UpperCase) ' ผลลัพธ LowerCase = "hello world 2000"

Left Function, Left$ Functionฟงกชัน Left สงออกคาเปนประเภทขอมูล Variant (String) ตามจํ านวนตัวอักษรที่ระบุโดยเริ่มตนจากดานซายมือฟงกชัน Left$ สงออกคาเปนประเภทขอมูล String ตามจํ านวนตัวอักษรที่ระบุโดยเริ่มตนจากดานซายมือ

ไวยากรณLeft(string, length)Left$(string, length)อากิวเมนตของฟงกชัน Left มีไวยากรณ ดังนี้

สวน รายละเอียดstring บังคับ, โดย Expression ของขอความที่ตองการสงคาดานซาย ถา string เปนคาวาง (Null) ผล

ลัพธจะเปนคาวางlength บังคับ, โดยประเภทขอมูลเปน Variant (Long) หรือเลขจํ านวนเต็ม ซึ่ง Expression ของตัวเลข

เปนการระบุจํ านวนตัวอักษรที่ตองการใหสงคาออกมา ถาเปน 0 คาที่สงออกจะเปน Zero-legthstring (“ “) ถาคา length มากกวาหรือเทากับ string ขอความที่มีอยูจะไดรับการสงออกมา

ลักษณะการประยุกตถาตองการหาจํ านวนตัวอักษรของขอความใหใชฟงกชัน Lenหมายเหตุ

• การใชฟงกชัน LeftB กับประเภทขอมูลไบตของขอความ การระบุคา length จะเปนระบุจํ านวนไบต

ดูเพ่ิมเติมฟงกชัน Len, ฟงกชัน Mid, ฟงกชัน Mid$, ฟงกชัน Right, ฟงกชัน Right$

ตัวอยางฟงกชัน Left นํ ามาใชสงคาของจํ านวนตัวอักษรซึ่งเริ่มตนจากดานซาย

Page 79: widebase.net: VBA References VBA References

widebase.net –VBA References

79

Dim anyString, myStranyString = "Hello World"myStr = Left(anyString, 1) ' ผลลัพธ "H"myStr = Left(anyString, 8) ' ผลลัพธ "Hello Wo"myStr = Left(anyString, 25) ' ผลลัพธ "Hello World"

Len Functionสงออกคาเปนประเภทขอมูล Long ที่แสดงจํ านวนตัวอักษรของขอความ หรือจํ านวนไบต

ไวยากรณLen(string I varname)อากิวเมนตของฟงกชัน Len มีไวยากรณ ดังนี้

สวน รายละเอียดstring เปน expression ของขอความ ถา string เปนคาวาง (Null) ผลลัพธจะเปนคาวางvarname เปนชื่อของตัวแปร ถา varname เปนคาวาง (Null) ผลลัพธจะเปนคาวาง ถา varname มีประเภท

ขอมูลเปน Variant ฟงกชัน Len จะปฏิบัติเหมือนเปนขอความ และจะสงคาจํ านวนตัวอักษรหมายเหตุ

• การใชฟงกชัน LenB กับประเภทขอมูลไบตของขอความ จะสงคาเปนจํ านวนไบต

ดูเพ่ิมเติมฟงกชัน InStr

ตัวอยางฟงกชัน Len คาที่สงออกเปนตัวเลข ที่แสดงจํ านวนตัวอักษรของขอความ หรือจํ านวนไบต

Type CustomerRecord ' ประเภทขอมูลที่ผูใชกํ าหนดID As IntegerName As String * 10Address As String * 30

End Type

Dim Customer As CustomerRecordDim myInt As Integer, myCur As CurrencyDim myString, myLen

myString = "Hello World"myLen = Len(myInt) ' ผลลัพธ myLen = 2myLen = Len(Customer) ' ผลลัพธ myLen = 42myLen = Len(myString) ' ผลลัพธ myLen = 11myLen = Len(myCur) ' ผลลัพธ myLen = 8

Page 80: widebase.net: VBA References VBA References

widebase.net –VBA References

80

Line Input # Statementอานแถวเดียวจากไฟล Sequential ที่เปด และกํ าหนดคาใหตัวแปร String

ไวยากรณLine Input # filenumber, varnameประโยคคํ าส่ัง Line Input # มีไวยากรณสวนดังนี้

สวน คํ าอธิบายFilenumber บังคับ, เปนหมายเลขไฟลVarname บังคับ, ชื่อตัวแปร Variant หรือ String

ลักษณะการประยุกตขอมูลที่อานดวย Line Input # มักจะเขียนลงไฟลดวย Print #ประโยคคํ าส่ัง Line Input # อานจากไฟลทีละ 1 ตัวอักษร จนกระทั่งพบ carriage return (Chr(13)) หรือ carriage return - linefeed (Chr(13) + Chr(10))

ดูเพ่ิมเติมฟงกชัน Chr, Input # Statement

ตัวอยางDim TextLineOpen "TESTFILE" For Input As #1 ' เปดไฟลสํ าหรับ InputDo While Not EOF(1) ' อานจนสิ้นสุดไฟล Input #1, TextLine ' อานบรรทัดเขาสูตัวแปร Debug.Print TextLine ' พมิพใน Debug windowLoopClose #1 ' ปดไฟล

Load Statementโหลดออบเจค แตจะไมแสดงออกมา

ไวยากรณLoad objectobject แสดงดวย object expression ที่ประเมินออบเจคที่ประยุกตเขาสูรายการ

ลักษณะการประยุกตเมื่อโหลดออบเจค เปนการวางออบเจคไวในหนวยความจํ า แตมองไมเห็น ใชเมธอด Show เพื่อทํ าใหมองเห็นออบเจค ผูใชไมสามารถติดตอกับออบเจคจนกวามองเห็น ออบเจคสามารถควบคุมดวยโปรแกรมใน Initialize event procedure

Page 81: widebase.net: VBA References VBA References

widebase.net –VBA References

81

ดูเพ่ิมเติมActivate Event, Deactivate Event, เมธอด Hide, คุณสมบัติ Startup Position, Unload Statement

ตัวอยางตัวอยาง สมมติให userForms 2 ฟอรมในโปรแกรม ใน Initialise event ของ UserForm 1 ใหโหลดและแสดง UserForm2 เมื่อผูใชคลิก UserForm 2 ใหยกเลิกฟอรม UserForm2 เมื่อ UserForm1 ปรากฏขึ้น และไดรับการคลิก ใหยกเลิกฟอรม UserForm1

' Initialize event procedure สํ าหรับ UserForm1Private Sub Form_Initialize() Load UserForm2 UserForm2.ShowEnd Sub

' Click event ของ UserForm2Private Sub Form_Click() UserForm2.HideEnd Sub

' Click event ของ UserForm1Private Sub Form_Click() UserForm2.ShowEnd Sub

Loc Functionสงออกคาเปนประเภทขอมูล Long ที่ระบุตํ าแหนงอานและเขียนปจจุบันภายในไฟลที่เปด

ไวยากรณLoc(filenumber)อากิวเมนต filenumber เปนประเภทขอมูลเลขจํ านวนเต็มใดๆ ของหมายเลขไฟลที่มีจริง

คาสงออกคา number คา Sgnมากกวาศูนย 1เทากับศูนย 0นอยกวาศูนย -1

ลักษณะการประยุกตคํ าอธิบายตอไปเปนคาสงออกสํ าหรับแตละโหมดของไฟลที่เขาถึง

โหมด คาที่สงออกRandom หมายเลขของเรคคอรดสุดทายของไฟลที่อานหรือเขียนSequential ตํ าแหนงไบตปจจุบันในไฟลหารดวย 128 แตสารสนเทศที่สงออกโดยฟงกชัน Loc

ไมมีการใชหรือตองการ

Page 82: widebase.net: VBA References VBA References

widebase.net –VBA References

82

Binary ตํ าแหนงไบตสุดทายที่อานหรือเขียน

ดูเพ่ิมเติมฟงกชัน EOF, ฟงกชัน LOF, ฟงกชัน Seek, Seek Statement

ตัวอยางตัวอยางการใชฟงกชัน Loc เพื่อสงคาตํ าแหนงอานและเขียนปจจุบันภายในไฟลที่เปด สมมติให TESTFILE เปน text file ที่มีขอมูลตัวอยางจํ านวนหนึ่ง

Dim MyLocation, MyLineOpen "TESTFILE" For Binary As #1 ' เปดไฟลท่ีเพิ่งสรางDo While MyLocation < LOF(1) ' วนรอบจนกระทั้งส้ินสุดไฟล MyLine = MyLine & Input(1, #1) ' อานตัวอักษรเปนตัวแปร MyLocation = Loc(1) ' ดงึต ําแหนงปจจุบันภายในไฟล Debug.Print MyLine; Tab; MyLocation ' พมิพออกใน Immediate windowLoopClose #1 ' ปดไฟล

Lock Statement, Unlock Statementควบคุมการเขาถึงจากกระบวนการอื่น ไปยังบางสวน หรือทั้งหมดของไฟล ที่เปดดวยการใชประโยคคํ าส่ัง Open

ไวยากรณLock [#] filenumber [, recordrange]Unlock [#] filenumber [, recordrange]ไวยากรณประโยคคํ าส่ัง Lock และ Unlock มีรายละเอียดสวนดังนี้

สวน คํ าอธิบายfilenumber บังคับ, เปนหมายเลขไฟลrecordrange ไมบังคับ, เปนชวงของเรคคอรดที่ตองการล็อก หรือยกเลิกการล็อก

การตั้งคาอากิวเมนต recordrange ตั้งคา ดังนี้

recnumber | [start] To end

การตั้งคา คํ าอธิบายrecnumber หมายเลขเรคคอรด (ไฟลโหมด Random) หรือหมายเลขไบต (ไฟลโหมด Binary) ที่

เริ่มการล็อก หรือยกเลิกการล็อกstart หมายเลขของเรคคอรดหรือไบตแรก ที่ตองการล็อก หรือยกเลิกการล็อก

Page 83: widebase.net: VBA References VBA References

widebase.net –VBA References

83

การตั้งคา คํ าอธิบายend หมายเลขของเรคคอรดหรือไบตสุดทาย ที่ตองการล็อก หรือยกเลิกการล็อก

ลักษณะการประยุกตประโยคคํ าส่ัง Lock และ Unlock ใชในสภาพแวดลอมที่มี หลายกระบวนการตองการเขาถึงไฟลเดียวกันประโยคคํ าส่ัง Lock และ Unlock ใชคูกันเสมอ อากิวเมนตของ Lock และ Unlock ตองตรงกันเรคคอรดหรือไบตแรกในไฟลอยูที่ตํ าแหนงที่ 1 เรคคอรดหรือไบตที่ 2 อยูที่ตํ าแหนงที่ 2 และตอไป ถาระบุเพียงเรคคอรดเดียว จะมีการล็อก หรือยกเลิกการล็อกเรคคอรดนั้น เพียงเรคคอรดเดียว ถาระบุชวงของเรคคอรดแตละเรคคอรดเริ่มตน (start) เรคคอรดทั้งหมด จากเรคคอรดแรกจนถึงส้ินสุดชวง (end) ไดรับการล็อกหรือยกเลิกการล็อก การใช Lock โดยไมมี recnumber ไฟลที่ระบุจะถูกล็อก การใช Unlock โดยไมมี recnumber ไฟลที่ระบุจะถูกยกเลิกการล็อกถาไฟลเปดแบบ Sequential สํ าหรับการนํ าหรือสงออก Lock และ Unlock มีผลกับทั้งไฟล โดยไมพิจารณาชองที่ระบุดวย start และ endขอควรระวัง ตองมั่นใจวามีการยกเลิกการล็อกดวยประโยคคํ าส่ัง Unlock กอน การปดไฟล หรือออกจากโปรแกรม ความลมเหลวในการยกเลิกการล็อก สรางผลลัพธที่ไมสามารถคาดการณ

ดูเพ่ิมเติมOpen Statement

ตัวอยาง

Type Record ' กํ าหนด User - define type ID As Integer Name As String * 20End Type

Dim MyRecord As Record, RecordNumber ' ประกาศตัวแปร' เปดไฟลสํ าหรับการเขาถึงแบบสุม (random access)Open "TESTFILE" For Random As #1 Len = Len(MyRecord)

' อานไฟลดวย GetRecordNumber = 4 ' กํ าหนดหมายเลขเรคคอรดLock #1, RecordNumber ' ลอกเรคคอรดGet #1, Position, MyRecord ' อานเรคคอรดท่ี 3

MyRecord.ID = 234 ' ปรบัปรุงเรคคอรดMyRecord.Name = "John Smith"

Put #1, Position, MyRecord ' เขยีนเรคคอรดท่ีปรับปรุงUnlock #1, RecordNumber ' ยกเลิกลอกเรคคอรดClose #1 ' ปดไฟล

Page 84: widebase.net: VBA References VBA References

widebase.net –VBA References

84

LOF Functionสงออกคาเปนประเภทขอมูล Long ที่แสดงขนาดเปนไบตของไฟลที่เปดดวยคํ าส่ัง Open

ไวยากรณLOF(filenumber)อากิวเมนต filenumber เปนประเภทขอมูลเลขจํ านวนเต็มที่เก็บคาหมายเลขไฟลที่มีจริงหมายเหตุ ใชฟงกชัน FileLen หาคาขนาดไฟลที่ไมไดเปด

ดูเพ่ิมเติมฟงกชัน EOF, ฟงกชัน FileLen, ฟงกชัน Loc, Seek Statement

ตัวอยางตัวอยางการใชฟงกชัน LOF เพื่อหาขนาดไฟลที่เปด สมมติให TESTFILE เปน text file ที่มีขอมูลตัวอยางจํ านวนหนึ่ง

Dim FileLengthOpen "TESTFILE" For Input As #1 ' เปดไฟลFileLength = LOF(1) ' ดงึความยาวของไฟลClose #1 ' ปดไฟล

Log Functionสงออกผลลัพธเปนคา Log ฐานธรรมชาติ (Log ฐาน e) โดยมีประเภทขอมูลเปน Double

ไวยากรณLog(number)อากิวเมนต number เปนคาที่มีประเภทขอมูลตัวเลข หรือ Expression ที่ใหคาดังกลาว และมีคามาก

กวาศูนย

ลักษณะการประยุกตถาตองการใช Log ที่มีฐานอื่น สามารถแปลงคาโดยการใชสูตรLogn(X) = Log(X) / Log(n)

การแปลงคาสามารถเขียนฟงกแบบกํ าหนดใน Access เชน การแปลงคาเปน Log ฐาน 10 จะมีคํ าส่ังดังนี้

Static Function Log10(X)Log10 = Log(X) / Log(10#)

End Function

ดูเพ่ิมเติมฟงกชัน Exp

Page 85: widebase.net: VBA References VBA References

widebase.net –VBA References

85

ตัวอยางDim myVar, myLogmyVar = 2.5myLog = Exp(myVar + 1.75)

LTrim Function, LTrim$ Function,RTrim Function, RTrim$ Function,Trim Function, Trim$ Functionฟงกชัน LTrim, ฟงกชัน RTrim และ ฟงกชัน Trim สงออกคาเปนประเภทขอมูล Variant (String) ดวยการทํ าสํ าเนาขอความเดิมแตกํ าจัดชองวาง โดยฟงกชัน LTrim กํ าจัดชองวางดานซาย ฟงกชัน RTrim กํ าจัดชองวางดานขวา และ ฟงกชัน Trim กํ าจัดทั้ง 2 ดานฟงกชัน LTrim$, ฟงกชัน RTrim$ และ ฟงกชัน Trim$ สงออกคาเปนประเภทขอมูล String ดวยการทํ าสํ าเนาขอความเดิมแตกํ าจัดชองวาง

ไวยากรณLTrim(string)LTrim$(string)RTrim(string)RTrim$(string)Trim(string)Trim$(string)อากิวเมนต string เปน Expression ของขอความถา string เปนคาวาง (Null) ผลลัพธจะเปนคาวาง

ดูเพ่ิมเติมฟงกชัน Left, ฟงกชัน Left$, ฟงกชัน Right, ฟงกชัน Right$

ตัวอยางฟงกชัน LTrim, ฟงกชัน RTrim และฟงกชัน Trim ใชในการกํ าจัดชองวาง โดยฟงกชัน LTrim กํ าจัดชองวางดานซาย ฟงกชัน RTrim กํ าจัดชองวางดานขวา และ ฟงกชัน Trim กํ าจัดทั้ง 2 ดาน

Dim myString, myTrimMyString = " <--Trim--> "MyTrim = LTrim(myString) ' ผลลัพธ myTrim = "<--Trim--> "MyTrim = RTrim(myString) ' ผลลัพธ myTrim = " <--Trim-->"MyTrim = LTrim(RTrim(myString)) ' ผลลัพธ myTrim = "<--Trim-->"' การใชฟงกชัน Trim จะมผีลลัพธเชนเดียวกันMyTrim = Trim(myString) ' ผลลัพธ myTrim = "<--Trim-->"

Page 86: widebase.net: VBA References VBA References

widebase.net –VBA References

86

Mid Function, Mid$ Functionฟงกชัน Mid สงออกคาเปนประเภทขอมูล Variant (String) ตามจํ านวนตัวอักษรที่ระบุฟงกชัน Mid$ สงออกคาเปนประเภทขอมูล String ตามจํ านวนตัวอักษรที่ระบุ

ไวยากรณMid(string, start [,length])Mid$(string, start [,length])อากิวเมนตของฟงกชัน Mid และฟงกชัน Mid$ มีไวยากรณ ดังนี้

สวน รายละเอียดstring บังคับ, โดย Expression ของขอความที่ตองการสงคาดานซาย ถา string เปนคาวาง

(Null) ผลลัพธจะเปนคาวางstart บังคับ, เปนการระบุจุดเริ่มตนที่ตองในขอความ ถา start มีคามากกวาจํ านวนตัวอักษรใน

ขอความ จะสงคาเปน Zero-length stringlength ไมบังคับ, โดยประเภทขอมูลเปน Variant (Long) หรือเลขจํ านวนเต็ม เพื่อระบุจํ านวนตัว

อักษรที่ใหสงคาออกมา ถาไมระบุ หรือ คา length เมื่อนับจาก startแลวมากกวาขอความคาที่สงออกมาจะเปนตัวอักษรที่เริ่มจาก start ทั้งหมด

ลักษณะการประยุกตถาตองการหาจํ านวนตัวอักษรของขอความใหใชฟงกชัน Lenหมายเหตุ

• การใชฟงกชัน MidB กับประเภทขอมูลไบตของขอความ การระบุคา length จะเปนระบุจํ านวนไบต

ดูเพ่ิมเติมฟงกชัน Left, ฟงกชัน Left$, ฟงกชัน Len, ฟงกชัน LTrim, ฟงกชัน LTrim$, ฟงกชัน RTrim, ฟงกชัน RTrim$,ฟงกชัน Trim, ฟงกชัน Trim$, Mid Statment, ฟงกชัน Right, ฟงกชัน Right$

ตัวอยางฟงกชัน Mid ใชในการสงคาตัวอักษรในตํ าแหนงและจํ านวนที่ตองการ

Dim myString, firstWord, lastWord, midWordmyString = "Mid Function Demo"firstWord = Mid(myString, 1, 3) ' ผลลัพธ "Mid"lastWord = Mid(myString, 14, 4) ' ผลลัพธ "Demo"midWord = Mid(myString, 5) ' ผลลัพธ "Function Demo"

Page 87: widebase.net: VBA References VBA References

widebase.net –VBA References

87

Minute Functionสงออกคาเปนประเภทขอมูล Variant (Integer) ในชวง 0 ถึง 59 จากสวนนาทีของเวลา

ไวยากรณMinute(time)อากิวเมนต time สามารถเปนประเภทขอมูลขอความ (String) ตัวเลข หรือ Expression ที่แสดงในรูป

แบบของเวลา ถา time เปนคาวาง (Null) ผลลัพธจะเปนคาวาง

ดูเพ่ิมเติมฟงกชัน Day, ฟงกชัน Hour, ฟงกชัน Now, ฟงกชัน Second, ฟงกชัน Time

ตัวอยางฟงกชัน Minute นํ ามาใชในการแปลงเวลาที่กํ าหนด ใหเปนคาของนาทีDim myTime, myMinutemyTime = #5:25:40 PM#myMinute = Minute(myTime) ' ผลลัพธ myMinute = 25

MIRR Functionสงออกคาเปนประเภทขอมูล Double ของอัตราผลตอบแทนภายในแบบปรับปรุง (Modified internal rate of return) ของกระแสเงินสด (รายจายและรายรับ)

ไวยากรณMIRR(value(), finance_rate, reinvest_rate)อากิวเมนตของฟงกชัน MIRR มีความหมาย คือ

สวน รายละเอียดvalue บังคับ, เปน array ของประเภทขอมูล Double, ระบุมูลคาของกระแสเงิน โดย array ตอง

เก็บคาอยางนอยเปนคาลบ 1 คา (รายจาย) และคาบวก 1 คา (รายรับ)finance_rate บังคับ, เปนประเภทขอมูล Double, ระบุอัตราดอกเบี้ยจายที่เปนตนทุนทางการเงินreinvest_rate บังคับ, เปนประเภทขอมูล Double, ระบุอัตราดอกเบี้ยรับจากรายไดแลวนํ าไปลงทุนซํ้ า

หมายเหตุอัตราผลตอบแทนภายในแบบปรับปรุง เปนอัตราผลตอบแทนภายในที่รายจายและรายรับมีอัตราดอกเบี้ยคนละอัตรา ฟงกชัน MIRR มีความสํ าคัญในการคํ านวณตนทุนของการลงทุน (finance_rate) และอัตราดอกเบี้ยรับจากการลงทุนซํ้ า (reinvest_rate)อากิวเมนต finance_rate และ reinvest_rate เปนอัตรารอยละที่แสดงในรูปของทศนิยม เชน 12% จะแสดงดวยคา 0.12

Page 88: widebase.net: VBA References VBA References

widebase.net –VBA References

88

ฟงกชัน MIRR ใชลํ าดับของ value ภายใน array ในการแปรความหมายลํ าดับของรายจายและรายรับ ดังนั้นจึงตองมั่นใจวารายจายและรายรับอยูในลํ าดับที่ถูกตอง

ดูเพ่ิมเติมฟงกชัน DDB, ฟงกชัน FV, ฟงกชัน IPmt, ฟงกชัน IRR, ฟงกชัน NPer, ฟงกชัน NPV, ฟงกชัน Pmt, ฟงกชันPPmt, ฟงกชัน PV, ฟงกชัน Rate, ฟงกชัน SLN, ฟงกชัน SYD

ตัวอยางตัวอยางการใชฟงกชัน MIRR ในการสงออกคาอัตราผลตอบแทนภายในปรับปรุงสํ าหรับกระแสเงินสดที่เก็บใน array ชื่อ Values() LoanAPR แสดงคา finance_rate และ InvAPR แสดงคา reinvest_rate

Dim LoanAPR, InvAPR, Fmt, RetRate, MsgStatic Values(5) As Double ' กํ าหนด arrayLoanAPR = .1 ' อัตราดอกเบี้ยเงินกูInvAPR = .12 ' อัตราดอกเบี้ยจากการลงทุนซํ้ าFmt = "#0.00" ' กํ าหนดรูปแบบการเงินValues(0) = -70000 ' คาใชจายในจัดตั้งธุรกิจ

' กระแสเงนิสดเปนบวกแสดงรายรับ 4 ปในการทํ าธุรกิจValues(1) = 22000 : Values(2) = 25000Values(3) = 28000 : Values(4) = 31000RetRate = MIRR(Values(), LoanAPR, InvAPR) ' ค ํานวณอัตราผลตอบแทนภายในMsg = "The modified internal rate of return for these five cash flows is"Msg = Msg & Format(Abs(RetRate) * 100, Fmt) & "%."MsgBox Msg ' แสดงอัตราผลตอบแทนภายใน

MkDir Statementสรางไดเรคทอรีหรือโฟลเดอรใหม

ไวยากรณMkDir pathpath เปนอากิวเมนตบังคับ ซึ่งเปน string express ที่ระบุไดเรคทอรี หรือโฟลเดอรที่ตองการ

สราง path อาจจะรวมถึงไดรฟ ถาไมมีการระบุไดรฟ MkDir จะสรางไดเรคทอรี หรือโฟลเดอรใหมบนไดรฟปจจุบัน

ดูเพ่ิมเติมChDir Statement, ฟงกชัน CurDir, RmDir Statement

ตัวอยาง

MkDir "MYDIR" ' สรางไดเรคทอรีหรือโฟลเดอรใหม

Page 89: widebase.net: VBA References VBA References

widebase.net –VBA References

89

Month Functionสงออกคาเปนประเภทขอมูล Variant (Integer) อยูในชวง 1 ถึง 12 จากสวนเดือนของวันที่

ไวยากรณMonth(date)อากิวเมนต date สามารถเปนประเภทขอมูลขอความ (String) ตัวเลข หรือ Expression ที่แสดงในรูป

แบบของวันที่ ถา date เปนคาวาง (Null) ผลลัพธจะเปนคาวาง

ดูเพ่ิมเติมฟงกชัน Date, ฟงกชัน Day, ฟงกชัน Now, ฟงกชัน Weekday, ฟงกชัน Year

ตัวอยางฟงกชัน Month นํ ามาใชในการแปลงขอความในรูปแบบวันที่ ใหเปนคาของเดือนDim myDate, myMonthmyDate = #June 12, 1968#myMonth = Month(myDate) ' ผลลัพธ myMonth =6

MsgBox Functionสํ าหรับการแสดงขาวสารใน dialog box และรอใหผูใชคลิกปุม และสงคาเปนเลขจํ านวนเต็ม (Integer) เพื่อระบุปุมที่ผูใชคลิก

ไวยากรณMsgBox(prompt[,button],title] [,, helpfile,context])ฟงกชัน MsgBox มีไวยากรณของสวน คือ

สวน รายละเอียดprompt บังคับ, เปน expression ขอความแสดงขาวสารใน dialog box ความยาวสูงสุดของ prompt

ประมาณ 1,024 ตัวอักษร ขึ้นกับความกวางของตัวอักษรที่ใช ถา prompt ยาวกวาหนึ่งบรรทัด ใหแบงบรรทัดโดยใชตัวอักษร carriage return (Chr(13)) ตัวอักษร linefeed (Chr(10)) หรือรวมตัวอักษร carriage return และ ตัวอักษร linefeed (Chr(13) & Chr(10))ระหวางแตละบรรทัด

button ไมบังคับ, เปน expression ตัวเลขที่เปนผลรวมของคาที่ระบุจํ านวนและประเภทของปุมที่แสดง, รูปแบบการใชของ icon, เอกลักษณของปุมเริ่มตน และ modal ของขาวสาร ถาไมกํ าหนด คาเริ่มตนของ buttons คือ 0

title ไมบังคับ, เปน expression ขอความแสดงชื่อที่แถบไตเติล (Title bar) ของ dialog box ถาไมกํ าหนด title จะใชโปรแกรมประยุกตเปนชื่อที่แถบไตเติล

helpfile ไมบังคับ, เปน expression ขอความแสดงไฟล Help file ที่ใหคํ าแนะนํ าและการชวยเหลือ

Page 90: widebase.net: VBA References VBA References

widebase.net –VBA References

90

สวน รายละเอียดสํ าหรับ dialog box ถากํ าหนด helpfile จะตองกํ าหนด context ดวย

context ไมบังคับ, เปน expression ขอความแสดงหมายเลข Help context ที่กํ าหนดตามหัวขอการชวยเหลือโดยผูเขียน Help ถากํ าหนด context จะตองกํ าหนด helpfile ดวย

การตั้งคาอากิวเมนต buttons กํ าหนดคาไดเปน

คาคงที่ คา รายละเอียดVbOKOnly 0 แสดงเฉพาะปุม OK เทานั้นVbOKCancel 1 แสดงปุม OK และ CancelVbAbortRetryIgnore 2 แสดงปุม Abort, Retry, และ IgnoreVbYesNoCancel 3 แสดงปุม Yes, No, และ CancelVbYesNo 4 แสดงปุม Yes และ NoVbRetryCancel 5 แสดงปุม Retry and Cancel buttonsVbCritical 16 แสดง icon ของขาวสารวิกฤติ (Critical Message)vbQuestion 32 แสดง icon การเตือนของคิวรี่ (Warning Query)vbExclamation 48 แสดง icon ของการเตือน (Warning Message)vbInformation 64 แสดง icon ของสารสนเทศ (Information Message)vbDefaultButton1 0 ปุมแรกเปนปุมเริ่มตนvbDefaultButton2 256 ปุมที่สองเปนปุมเริ่มตนvbDefaultButton3 512 ปุมที่สามเปนปุมเริ่มตนvbDefaultButton4 768 ปุมที่ส่ีเปนปุมเริ่มตนvbApplicationModal 0 modal ของการประยุกตที่ผูตองตอบสนองกับ message box กอนที่

จะทํ างานตอไปในโปรแกรมประยุกตปจจุบันvbSystemModal 4096 modal ของระบบที่การประยุกตทั้งหมดจะถูกหยุดจนกวาผูใชตอบ

สนองกับ message boxvbMsgBoxHelpButton 16384 เพิ่มปุม Help ใน message boxvbMsgBoxSetForeground 65536 กํ าหนด window ของ message box window เปน foreground

windowvbMsgBoxRtlReading 1048576 กํ าหนดใหอานจากขวาไปซายตามระบบ Hebrew และ Arabic

กลุมแรก (0-5) อธิบายหมายเลขและประเภทของปุมที่จะแสดงใน dialog box, กลุมที่ 2 (16, 32, 48, 64) อธิบายรูปแบบของ icon, กลุมที่ 3 (0, 256, 512) หาปุมเริ่มตน และกลุมที่ 4 (0, 4096) หา modal ของ message box

Page 91: widebase.net: VBA References VBA References

widebase.net –VBA References

91

หมายเหตุ คาคงที่เหลานี้กํ าหนดไดโดย Visual Basic for Application (VBA) ทํ าใหสามารถใชในการเขียนคํ าส่ังแทนที่การกํ าหนดคา

คาสงออกคาคงที่ คา รายละเอียดvbOK 1 OKvbCancel 2 CancelvbAbort 3 AbortvbRetry 4 RetryvbIgnore 5 IgnorevbYes 6 YesvbNo 7 No

ลักษณะการประยุกตเมื่อมีการกํ าหนดอากิวเมนต helpfile และ context ผูใชสามารถกดปุม F1 เพื่อดูหัวขอการชวยเหลือที่ตรงกับ context ในบางโปรแกรมประยุกต เชน Microsoft Excel จะเพิ่มปุม Help ใหโดยอัตโนมัติใน dialog boxถา dialog box แสดงปุม Cancel การกดปุม ESC จะมีผลเชนเดียวกับการคลิกปุม Cancel ถา dialog box มีปุม Help จะมี context-sensitive Help ใหสํ าหรับ dialog box แตจะไมมีคาออกมาจนกวามีการคลิกปุมใดปุมหนึ่งบน dialog boxหมายเหตุ การกํ าหนดอากิวเมนตนอกเหนือจากอากิวเมนตแรกแลว ตองใชฟงกชัน MsgBox เปน expressionการไมกํ าหนดบางตํ าแหนงของอากิวเมนตตองใชเครื่องหมายจุลภาค (,) ในการขามตํ าแหนงนั้น

ดูเพ่ิมเติมฟงกชัน InputBox, MsgBox action

วิธีการประยุกตใน Accessฟงกชัน MsgBox สามารถใชใน Microsoft Access ในการสรางรูปแบบของขาวสารความผิดพลาดคลายกับขาวสารความผิดพลาดแบบ built-in ของ Microsoft Accessตัวอยางตอไปนี้แสดงรูปแบบของ dialog box ที่เปนขอความแบบแบงสวน สวนแรกเปนขอความเปนหัวเรื่องตัวหนา สวนที่สองเปนตัวอักษรธรรมดาใตหัวเรื่อง และสวนที่สามเปนตัวอักษรธรรมดาแสดงคํ าตอบของหัวเรื่อง ตามตัวอยางฟงกชัน

MsgBox "Wrong button!" & chr(13) & "This button doesn't work." & chr(13) _& "Try another.", vbOKOnly + vbExclamation

การแบงสวนสามารถใชเครื่องหมาย (@) แตใน Acc9TBD ฟงกชัน MsgBox ไมยินยอมใหใชเครื่องหมาย (@)ในการแบงสวน

Page 92: widebase.net: VBA References VBA References

widebase.net –VBA References

92

หมายเหตุ การแสดง message box โดยไมมีไอคอน ใน Microsoft Access ทํ าไดอยางงายๆโดยการไมกํ าหนดคาคงที่สํ าหรับ ไอคอน หรือใหคาเปน 0 สํ าหรับอากิวเมนต buttons ตามตัวอยางนี้

MsgBox "No icons included.", 0

วิธีการประยุกตใน Excelใน Microsoft Excel ขอความในอากิวเมนต prompt เก็บขอความไดไมเกิน 256 ตัวอักษร

ตัวอยางตัวอยางการใชฟงกชัน MsgBox ในการแสดงขาวสารความผิดพลาดวิกฤติ (Critical-error message) ใน dialog box ที่มีปุม Yes และ No โดยปุม No กํ าหนดเปนปุมเริ่มตน คาที่สงออกมาโดยฟงกชัน MsgBox ขึ้นกับปุมที่เลือกโดยผูใช ตามตัวอยางสมมติใหไฟล DEMO.HLP เปนไฟลชวยเหลือ (Help file) ที่เก็บหัวขอดวยหมายเลข Help context เทากับ 1000

Dim Msg, Style, Title, Help, Ctxt, Response, MyStringMsg = "Do you want to continue? " ' กํ าหนดขาวสารStyle = vbYesNo + vbCritical + vbDefaultButton2 ' กํ าหนดปุมTitle = "MsgBox Demonstration" ' กํ าหนดแถบไตเติลHelp = "DEMO.HLP" ' กํ าหนด Help file.Ctxt = 1000 ' กํ าหนด topic contextResponse = MsgBox(Msg, Style, Title, Help, Ctxt) ' แสดงขาวสารIf Response = vbYes Then ' ผูใชเลือก Yes MyString = "Yes" ' เตรยีมการทํ างานElse ' ผูใชเลือก No MyString = "No" ' เตรยีมการทํ างานEnd If

ตัวอยางการประยุกตใน Accessตัวอยางการใชฟงกชัน MsgBox ในการสรางรูปแบบของขาวสารใน Microsoft Access หมายเหตุ ใชเครื่องหมาย (@) ในการแบงสวน

Sub CustomMessage() Dim strMsg As String, strInput As String ' กํ าหนดขอความเริ่มตน strMsg = "Number outside range.@You entered a number that is " & "less than 1 or greater than 10.@Press OK to enter the number again."' Prompt สํ าหรับผูใชปอนคา strInput = InputBox("Enter a number between 1 and 10.") If strInput <> "" Then ' การหาคา ถาผูใชเลือก "Cancel" Do While strInput < 0 Or strInput > 10 ' ทดสอบคาที่ปอนของผูใช If MsgBox(strMsg, vbOKCancel, "Error!") = vbOK Then strInput = InputBox("Enter a number between 1 and 10.") Else Exit Sub End If Loop MsgBox "You entered the number " & strInput & "." ' แสดงวาผุใชปอนคาถูกตอง Else Exit Sub End IfEnd Sub

Page 93: widebase.net: VBA References VBA References

widebase.net –VBA References

93

Name Statementเปล่ียนชื่อไฟล

ไวยากรณName oldpathname As newpathnameไวยากรณประโยคคํ าส่ัง Name มีรายละเอียดสวน ดังนี้

สวน คํ าอธิบายOldpathname บังคับ, เปน string expression ที่ระบุชื่อไฟล และตํ าแหนง ซึ่งอาจจะรวมถึงไดเรคทอรี

หรือโฟลเดอร และไดรฟNewpathname บังคับ, เปน string expression ที่ระบุชื่อไฟลใหม และตํ าแหนง ซึ่งอาจจะรวมถึงไดเรค

ทอรี หรือโฟลเดอร ชื่อไฟลที่ระบุดวย newpathname ไมสามารถเปนไฟลที่มีอยูแลว

ลักษณะการประยุกตทั้ง newpathname และ oldpathname ตองอยูไดรฟเดียวกัน ถาพารทใน newpathname มีอยูและแตกตางจากพารทใน oldpathname ประโยคคํ าส่ัง Name จะยายไฟลไปที่ไดเรคทอรี หรือโฟลเดอรใหมและเปล่ียนชื่อไฟล ถา newpathname และ oldpathname มีพารทตางกัน และมีชื่อไฟลเดียวกัน ประโยคคํ าส่ัง Name จะยายไฟลไปที่ตํ าแหนงใหม และใชชื่อเดิม การใช Name สามารถยายไฟลจากไดเรคทอรี่หรือโฟลเดอรหนึ่งไปที่อื่น แตไมสามารถยายไดเรคทอรี หรือโฟลเดอร

ดูเพ่ิมเติมKill Statement

ตัวอยางDim OldName, NewNameOldName = "OLDFILE" ' กํ าหนดชื่อไฟลNewName = "NEWFILE"Name OldName As NewName ' เปลีย่นชื่อไฟลOldName = "C:\MYDIR\OLDFILE"NewName = "C:\YOURDIR\NEWFILE"Name OldName As NewName ' ยายและเปลี่ยนชื่อไฟล

Now Functionคาที่สงออกเปนประเภทขอมูล Variant (Date) ดวยคาวันที่ และเวลาปจจุบัน ตามนาฬิกาของระบบ

ไวยากรณNow

Page 94: widebase.net: VBA References VBA References

widebase.net –VBA References

94

ดูเพ่ิมเติมฟงกชัน Date, ฟงกชัน Day, ฟงกชัน Hour, ฟงกชัน Minute, ฟงกชัน Month, ฟงกชัน Second, ฟงกชัน Time,ฟงกชัน Weekday, ฟงกชัน Year

ตัวอยางDim myDate

myDate = Now ‘ กํ าหนดคาวันท่ี และเวลาปจจุบันจากนาฬิกาของเครื่อง

ตัวอยางการประยุกตใน Accessการกํ าหนดฟงกชัน Date ที่คุณสมบัติ ControlSource ใหกํ าหนดในรูปแบบเปน=Now()

NPer Functionสงออกคาเปนประเภทขอมูล Double ที่ระบุจํ านวนงวดของการจาย ทราบ โดยมีงวดการจายสมํ่ าเสมอ การจายคงที่ และอัตราดอกเบี้ยคงที่

ไวยากรณNPer(rate, pmt, pv [,fv [,type]])อากิวเมนตของฟงกชัน NPer มีความหมาย คือ

สวน รายละเอียดrate บังคับ, เปนประเภทขอมูล Double, ระบุอัตราดอกเบี้ยตองวด เชน การกูเงินซื้อรถยนตที่อัตราดอกเบี้ย

10% ตอป และงวดการจายเปนรายเดือน อัตราดอกเบี้ยตอเดือน คือ 0.1/12 หรือ 0.0083pmt บังคับ, เปนประเภทขอมูล Double, ระบุจํ านวนเงินจายในแตละงวด การจายปกติรวมเงินตนและดอก

เบี้ย ซึ่งไมสามารถเปลี่ยนไดตลอดอายุการใชงานpv บังคับ, เปนประเภทขอมูล Variant, มูลคาปจจุบัน (หรือเงินรวมทั้งหมด) ของชุดการจายสํ าหรับมูลคา

อนาคต เชน การยืมเงินเพื่อซื้อรถยนต เงินกู คือ มูลคาปจจุบันที่ผูกูตองจายเปนรายเดือน ถาไมกํ าหนดจะใชคาเปน 0

fv ไมบังคับ, เปนประเภทขอมูล Double, ระบุมูลคาในอนาคต หรือจํ านวนสดคงเหลือเมื่อส้ินสุดงวดการจาย เชน ตองการฝากเงินออมเพื่อหได ฿50,000 ในระยะเวลา 18 เดือน เงินจํ านวน ฿50,000 คือ มูลคาอนาคต ถาไมกํ าหนด จะใชคาเปน 0

type ไมบังคับ, เปนประเภทขอมูล Variant, ระบุกํ าหนดการจาย ใช 0 ถากํ าหนดชํ าระเปนส้ินงวด หรือ 1 ถากํ าหนดชํ าระเปนตนงวด ถาไมกํ าหนด จะใชคาเปน 0

ลักษณะการประยุกตงวดการจายเปนชุดการจายที่คงที่ตลอดระยะเวลาทั้งหมด การจายสามารถเปนการชํ าระเงินกู ( เชน คางวดเงินกูซื้อบาน) หรือการลงทุน ( เชน การฝากเงินออมเปนรายเดือน)

Page 95: widebase.net: VBA References VBA References

widebase.net –VBA References

95

อากิวเมนตทั้งหมด เงินสดจายออก ( เชน การฝากเงินออม) ใหเปนคาลบ เงินสดรับเขา ( เชน เงินปนผล) ใหเปนบวก

ดูเพ่ิมเติมฟงกชัน DDB, ฟงกชัน FV, ฟงกชัน IPmt, ฟงกชัน IRR, ฟงกชัน MIRR, ฟงกชัน NPV, ฟงกชัน Pmt, ฟงกชันPPmt, ฟงกชัน PV, ฟงกชัน Rate, ฟงกชัน SLN, ฟงกชัน SYD

ตัวอยางตัวอยางการใชฟงกชัน NPer ในการสงออกคาจํ านวนงวดของการจาย โดยการจายชํ าระเงินกูเก็บคาใน PVal อัตราดอกเบี้ยตอปซึ่งกํ าหนดเปนงวด (APR / 12), การจาย (Payment), มูลคาอนาคตของเงินกู (FVal) และตัวเลขที่ระบุกํ าหนดการจาย (PayType)

Dim FVal, PVal, APR, Payment, PayType, TotPmtsConst ENDPERIOD = 0, BEGINPERIOD = 1 ' เมือ่มีการจายFVal = 0 ' คา FV ของเงินกูมักจะกํ าหนดเปน 0PVal = InputBox("How much do you want to borrow?")APR = InputBox("What is the annual percentage rate of your loan?")If APR > 1 Then APR = APR / 100 ' ตรวจสอบความถูกตองPayment = InputBox("How much do you want to pay each month?")PayType = MsgBox("Do you make payments at the end of month?", vbYesNo)If PayType = vbNo Then PayType = BEGINPERIOD Else PayType = ENDPERIODTotPmts = NPer(APR / 12, -Payment, PVal, FVal, PayType)If Int(TotPmts) <> TotPmts Then TotPmts = Int(TotPmts) + 1MsgBox "It will take you " & TotPmts & " months to pay off your loan."

NPV Functionสงออกคาเปนประเภทขอมูล Double ของมูลคาปจจุบันสุทธิของการลงทุนที่ขึ้นกับงวดการจายสมํ่ าเสมอ การจายคงที่ และอัตราดอกเบี้ยคงที่

ไวยากรณNPV(rate, value())อากิวเมนตของฟงกชัน NPV มีความหมาย คือ

สวน รายละเอียดrate บังคับ, เปนประเภทขอมูล Double, ระบุอัตราดอกเบี้ยสวนลดตลอดชวงการลงทุน แสดงคาเปนเลข

ทศนิยมvalue บังคับ, เปน array ของประเภทขอมูล Double, ระบุมูลคาของกระแสเงิน โดย array ตองเก็บคาอยาง

นอยเปนคาลบ 1 คา (รายจาย) และคาบวก 1 คา (รายรับ)

ลักษณะการประยุกตมูลคาปจจุบันสุทธิของการลงทุนเปนกระแสของมูลคาในของรายจายและรายรับในอนาคต

Page 96: widebase.net: VBA References VBA References

widebase.net –VBA References

96

ฟงกชัน NPV ใชลํ าดับของ value ภายใน array ในการแปรความหมายลํ าดับของรายจายและรายรับ ดังนั้นจึงตองมั่นใจวารายจายและรายรับอยูในลํ าดับที่ถูกตองฟงกชัน NPV ใหการลงทุนเริ่มตนกอนเกิดกระแสเงินสดครั้งแรกและสิ้นสุดที่ส้ินงวดสุดทายของกระแสเงินสดในarrayถามูลคาปจจุบันสุทธิคํ านวณบนพื้นฐานของกระแสเงินสดในอนาคต ถากระแสเงินสดแรกเกิดขึ้นที่ตนงวด กระแสเงินสดจะนํ าไปรวมเปนคาที่สงออกของฟงกชัน NPV และไมนํ าไปรวมกับกระแสเงินสดของ valueฟงกชัน NPV คลายกับฟงกชัน PV แตมีขอแตกตางที่สํ าคัญระหวาง NPV และ PV คือ PV ยอมใหกระแสเงินสดที่งวดเริ่มสามารถกํ าหนดที่ตนงวดหรือปลายงวด และตัวแปร value ของ PV ตองคงที่ตลอดการลงทุน ในขณะที่ NPV ไมจํ าเปน

ดูเพ่ิมเติมฟงกชัน DDB, ฟงกชัน FV, ฟงกชัน IPmt, ฟงกชัน IRR, ฟงกชัน MIRR, ฟงกชัน NPer, ฟงกชัน Pmt, ฟงกชันPPmt, ฟงกชัน PV, ฟงกชัน Rate, ฟงกชัน SLN, ฟงกชัน SYD

ตัวอยางตัวอยางการใชฟงกชัน NPV ในการสงออกคามูลคาปจจุบันสุทธิสํ าหรับกระแสเงินสดที่เก็บใน array ชื่อ Values() RetRate แสดงคาอัตราผลตอบแทนภายในคงที่

Dim Fmt, Guess, RetRate, NetPVal, MsgStatic Values(5) As Double ' กํ าหนด arrayFmt = "###,##0.00" ' กํ าหนดรูปแบบการเงินGuess = .1 ' guess เรมิตนท่ี 10%RetRate = .0625 ' กํ าหนดอัตราผลตอบแทนภายในคงที่Values(0) = -70000 ' คาใชจายในจัดตั้งธุรกิจ

' กระแสเงนิสดเปนบวกแสดงรายรับ 4 ปในการทํ าธุรกิจValues(1) = 22000 : Values(2) = 25000Values(3) = 28000 : Values(4) = 31000NetPVal = NPV(RetRate, Values()) ' การค ํานวณผลตอบแทนภายในสุทธิ

Msg = "The net present value of these cash flows is "Msg = Msg & Format(NetPVal, Fmt) & "."MsgBox Msg ' แสดงคาผลตอบแทนภายในสุทธิ

Oct Function, Oct$ Functionฟงกชัน Oct สงออกคาเปน Variant (String) ที่แสดงคาเลขฐานแปดฟงกชัน Oct$ สงออกคาเปน String ที่แสดงคาเลขฐานแปด

ไวยากรณOct(number)Oct$(number)อากิวเมนต number เปนคาตัวเลข หรือ Expression ของตัวเลขที่มีคาจริง

Page 97: widebase.net: VBA References VBA References

widebase.net –VBA References

97

ลักษณะการประยุกตถา number ไมใชเลขจํ านวนเต็มจะไดรับการปรับคาเปนเลขจํ านวนเต็มที่ใกลที่สุดกอนประมวลผล

ถา number เปน คาที่สงออกมาNull NullEmpty ศูนย (0)ตัวเลขใดๆ แสดงคาเลขฐานแปดไดถึง 8 ตัวอักษร

ถาตองการแสดงเลขฐานแปดโดยตรงตามคาตัวเลขในชวงจริงดวย &O เชน &O(10) เพื่อแสดงทศนิยม ในรูปแบบของเลขฐานแปด

ดูเพ่ิมเติมฟงกชัน Hex, ฟงกชัน Hex$

ตัวอยางตัวอยางการใชฟงกชัน Oct ในแสดงตัวเลขเปนเลขฐานแปด

Dim MyOctMyOct = Oct(4) ' สงออกคา 4MyOct = Oct(8) ' สงออกคา 10MyOct = Oct(459) ' สงออกคา 713

Open Statementทํ าใหสามารถนํ าเขาและสงออก (input / output -I/O) ไปที่ไฟลได

ไวยากรณOpen pathname For mode [access] [lock] As [#] filenumber [Len = reclength]ไวยากรณประโยคคํ าส่ัง Open มีรายละเอียดสวนดังนี้

สวน คํ าอธิบายPathname บังคับ, เปน string expression ที่ระบุชื่อไฟล อาจจะรวมถึงไดเรคทอรี หรือโฟลเดอร

และไดรฟmode บังคับ, เปนคียเวิรดระบุโหมดของไฟลคือ Append, Binary, Input, output หรือ

Random ถาไมกํ าหนด ไฟลจะเปดสํ าหรับการเขาถึงแบบ Randomaccess ไมบังคับ, เปนคียเวิรดระบุการอนุญาตทํ างานบน ไฟลที่เปด คือ Read, Write หรือ

Read Writelock ไมบังคับ, เปนคียเวิรดระบุการอนุญาตทํ างานบน ไฟลที่เปดโดยกระบวนการอื่น คือ

Shared, Lock Read, Lock Write และ Lock Read Write

Page 98: widebase.net: VBA References VBA References

widebase.net –VBA References

98

สวน คํ าอธิบายfilenumber บังคับ, เปนหมายเลขไฟลภายในชวง 1 ถึง 511 ใช ฟงกชัน FreeFile สรางหมายเลข

และไฟลตอไปไดreclength ไมบังคับ, เปนตัวเลขนอยกวาหรือเทากับ 32,767 (ไบต) สํ าหรับไฟลที่เปดใหเขาถึง

แบบ Random คานี้คือ ความยาวเรคคอรด สํ าหรับไฟล Sequential คานี้ คือ จํ านวนตัวอักษรของบัฟเฟอร

ลักษณะการประยุกตตองมีการเปดไฟลกอนการทํ างานนํ าเขาและสงออกกับไฟล Open จัดสรรบัฟเฟอรสํ าหรับการนํ าเขาและสงออกใหกับไฟล และหาโหมดการเขาถึง เพื่อใชบัฟเฟอร ถาไฟลระบุโดย pathname ไมมีจริง จะไดรับการสรางเมื่อไฟลไดรับการเปดสํ าหรับ โหมด Append, Binary, Output หรือ Randomถาไฟลไดรับการเปดโดยกระบวนการอื่น และระบุประเภทของการสงเปนไมยินยอม การเปดไฟลจะลมเหลว และปรากฏความผิดพลาด Len Clause จะไดรับการละเลย ถาโหมด คือ Binary Important ในโหมด Binary, Input และ Random สามารถเปดไฟลดวยการใชหมายเลขไฟลที่ตางกัน โดยไมตองปดไฟลกอน ในโหมด Append และ Output ตองปดไฟลกอนการเปดดวยหมายเลขไฟลที่ตางกัน

ดูเพ่ิมเติมClose Statement, ฟงกชัน FreeFile

ตัวอยาง' เปดในโหมด sequential - inputOpen "TESTFILE" For Input As #1' ปดไฟลกอนเปดโหมดอื่นClose #1

' เปดในโหมด binary สํ าหรับการเขียนOpen "TESTFILE" For Binary Access Write As #1' ปดไฟลกอนเปดโหมดอื่นClose #1

' เปดไฟลสํ าหรับการเขาถึงแบบสุม (random access)Type Record ' กํ าหนด User - define type ID As Integer Name As String * 20End Type

Dim MyRecord As Record, Position ' ประกาศตัวแปรOpen "TESTFILE" For Random As #1 Len = Len(MyRecord)' ปดไฟลกอนเปดโหมดอื่นClose #1

' เปดในโหมด sequential - output และกระบวนการอื่นสามารถอานหรือเขียนไดOpen "TESTFILE" For Output Shared As #1' ปดไฟลกอนเปดโหมดอื่นClose #1

' เปดในโหมด binary สํ าหรบัการอาน และกระบวนการอื่นไมสามารถอานได

Page 99: widebase.net: VBA References VBA References

widebase.net –VBA References

99

Open "TESTFILE" For Binary Access Read Lock Read As #1' ปดไฟลกอนเปดโหมดอื่นClose #1

Partition Functionสงออกคาเปนประเภทขอมูล Variant (String) ที่ชี้ถึงการปรากฏของขอมูลภายในการคํ านวณตามลํ าดับของชวงขอมูล

ไวยากรณPartition(number, start, stop, interval)อากิวเมนตของฟงกชัน Partition มีรายละเอียด คือ

อากิวเมนต รายละเอียดnumber บังคับ, เปนเลขจํ านวนเต็มที่ตองหาคาในชวงstart บังคับ, เปนเลขจํ านวนเต็มที่เปนคาเริ่มตนของชวง และคาไมสามารถนอยกวา 0stop บังคับ, เปนเลขจํ านวนเต็มที่เปนคาส้ินสุดของชวง และคาไมตองนอยกวาหรือเทากับคา startinterval บังคับ, เปนเลขจํ านวนเต็มที่เปนคาภายในขอบเขตของแตละชวงตามลํ าดับจาก start ถึง

stop และคาไมสามารถนอยกวา 1

ลักษณะการประยุกตฟงกชัน Partition ชี้ถึงชวงที่ระบุที่ number มีคาภายในชวง และสงคาออกเปนประเภทขอมูล Variant (String) ที่อธิบายชวง ฟงกชัน Partition มีประโยชนในคิวรี่ โดยสรางคิวรี่ (Select query) ที่แสดงลํ าดับที่อยูภายในชวงตางๆ เชน ลํ าดับคาจาก 1 ถึง 1000, 1001 ถึง 2000 และอื่นๆตารางตอไปเปนการแสดงชวงที่หาดวยการตั้งคา 3 คาของ start, stop และ interval โดยคอลัมนชวงที่ 1 และชวงสุดทายเปนคาที่สงออกมาดวยฟงกชัน Partition ชวงเหลานี้แสดงดวย คาขอบเขตลาง:คาขอบเขตบน ซึ่งคาขอบเขตลางแยกจากคาขอบเขตบนดวยเครื่องหมาย colon (:)

start stop interval Before First First Range Last Range After Last0 99 5 " :-1" " 0: 4" " 95: 99" " 100: "20 199 10 " : 19" " 20: 29" " 190: 199" " 200: "100 1010 20 " : 99" " 100: 119" " 1000: 1010" " 1011: "

ในตารางขางบน แถวที่ 3 แสดงถึงผลลัพธเมื่อ start และ stop กํ าหนดกลุมของตัวเลขที่ไมสามารถหารดวย interval ไดลงตัวโดยชวงสุดทายมีชวงตัวเลขเปน 11 ในขณะที่ interval มีคา 20ถามีความจํ าเปน ฟงกชัน Partition จะสงออกชวงที่เผ่ือชองวางหนาตัวเลขทั้งคาขอบเขตลางและขอบเขตบน เพื่อทํ าใหม่ันใจวาฟงกชัน Partition สามารถดูแลตัวเลขตางและผลลัพธของขอความไดถูกตอง ระหวางการจัดเรียงลํ าดับ

Page 100: widebase.net: VBA References VBA References

widebase.net –VBA References

100

ถา interval เปน 1 จะไดชวงเปน number:number โดยไมพิจารณาอากิวเมนต start และ stop เชน intervalเปน 1, number เปน 100 และ stop เปน 100 ฟงกชัน Partition สงออกคาเปน “ 100: 100”ถามีสวนใดสวนหนึ่งเปนคาวาง ฟงกชัน Partition สงออกคาเปน คาวาง (Null)

ตัวอยางตัวอยางการใชฟงกชัน Partition โดยสมมติวา Table ชื่อ Orders มีฟลดชื่อ Freight ใหสรางชุดคํ าส่ัง SELECTเพื่อนับจํ านวนใบสั่งซื้อที่จัดชวงคาขนสงเปนชวงตางๆ ฟงกชัน Partition จะไดรับการใชกอนเพื่อสรางชวง จากนั้นฟงกชัน SQL Count จะนับใบส่ังซื้อในแตละชวง ในตัวอยางนี้ กํ าหนดคาอากิวเมนตของฟงกชัน Partitionคือ start = 0, stop = 500, interval = 50 จะไดชวงที่ 1 เปน 0:49 และตอไปจนถึง 500

SELECT DISTINCTROW Partition([freight],0, 500, 50) AS Range,Count(Orders.Freight) AS CountFROM OrdersGROUP BY Partition([freight],0,500,50);

ตัวอยางการประยุกตใน Accessสามารถใชฟงกชัน Partition ในตารางการออกแบบคิวรี่และ SQL view ของ Query window ในตารางการออกแบบคิวรี่สามารถใชฟงกชัน Partition ในฟลดคํ านวณหรือกํ าหนด Criteria สํ าหรับคิวรี่แบบ Selectตัวอยางตอไปแสดงการใชฟงกชัน Partition ในการสรางฟลดคํ านวณที่แสดงรายการจํ านวนเรคคอรดที่อยูในชวงที่ระบุ สมมติให Table ชื่อ Orders มีฟลด Freight ใน Query window ใหสรางคิวรี่แสดงผลรวมใหมโดยการเพิ่ม Table ชื่อ Orders และคลิกปุม Total บนเมนูคํ าส่ัง Query ทํ าการ drag ฟลด Freight ไปที่เซลลแรกของแถว Field บนตารางการออกแบบคิวรี่ และตั้งคาเวลลในแถว Totals เปน Count ในฟลดถัดมาใหกํ าหนด expression

Range: Partition([Freight], 0, 1000, 50)กํ าหนดเซลล Total ของฟลดนี้เปน Group by และเรียกใชคิวรี่ ฟงกชัน Partition จะสงออกคาเปน 11 ระดับ (0:99, 100:199, 200:299, และตอไป) คิวรี่แสดงจํ านวนใบสั่งซื้อที่อยูในแตละชวงตัวอยางตอไปแสดงการใชฟงกชัน Partition ใน SQL view ของ Query window โดยการสรางคิวรี่แบบ crosstab เพื่อหาคาของฟลด Freight ใน Table ชื่อ Orders ใหคํ านวณจํ านวนใบสั่งซื้อแยกตามชวงตนทุนคาขนสงของลูกคาแตละราย โดยชวงกํ าหนดดวยอากิวเมนตในฟงกชัน Partition ดังนี้ start = 0, stop = 1000, interval = 50 ใหปอน expression ใน SQL view เมื่อเรียกใชคิวรี่ จะปรากฏชื่อคอลัมนของแตละชวง

TRANSFORM Count(Orders.[OrderID]) AS [CountOfOrderID]SELECT Orders.[CustomerID]FROM OrdersGROUP BY Orders.[CustomerID]PIVOT Partition(Int([Freight]), 0, 1000, 50);

Page 101: widebase.net: VBA References VBA References

widebase.net –VBA References

101

Pmt Functionสงออกคาเปนประเภทขอมูล Double ที่ระบุจํ านวนเงินจายในแตละงวดที่ตองการทราบ โดยมีงวดการจายสม่ํ าเสมอ การจายคงที่ และอัตราดอกเบี้ยคงที่

ไวยากรณPmt(rate, nper, pv [,fv [,type]])อากิวเมนตของฟงกชัน Pmt มีความหมาย คือ

สวน รายละเอียดrate บังคับ, เปนประเภทขอมูล Double, ระบุอัตราดอกเบี้ยตองวด เชน การกูเงินซื้อรถยนตที่อัตราดอก

เบี้ย 10% ตอป และงวดการจายเปนรายเดือน อัตราดอกเบี้ยตอเดือน คือ 0.1/12 หรือ 0.0083per บังคับ, เปนประเภทขอมูล Double, ระบุงวดการจาย ซึ่งอยูในชวง 1 ถึง npernper บังคับ, เปนประเภทขอมูล Integer, ระบุจํ านวนงวดการจายทั้งหมด เชน การจายเงินกูรายเดือนของ

เงินกู 4 ป จํ านวนงวดทั้งหมด คือ 4 * 12 (หรือ 48) งวดการจายpv บังคับ, เปนประเภทขอมูล Variant, มูลคาปจจุบัน (หรือเงินรวมทั้งหมด) ของชุดการจายสํ าหรับมูล

คาอนาคต เชน การยืมเงินเพื่อซื้อรถยนต เงินกู คือ มูลคาปจจุบันที่ผูกูตองจายเปนรายเดือน ถาไมกํ าหนด จะใชคาเปน 0

fv ไมบังคับ, เปนประเภทขอมูล Double, ระบุมูลคาในอนาคต หรือจํ านวนสดคงเหลือเมื่อส้ินสุดงวดการจาย เชน ตองการฝากเงินออมเพื่อหได ฿50,000 ในระยะเวลา 18 เดือน เงินจํ านวน ฿50,000 คือ มูลคาอนาคต ถาไมกํ าหนด จะใชคาเปน 0

type ไมบังคับ, เปนประเภทขอมูล Variant, ระบุกํ าหนดการจาย ใช 0 ถากํ าหนดชํ าระเปนส้ินงวด หรือ 1ถากํ าหนดชํ าระเปนตนงวด ถาไมกํ าหนด จะใชคาเปน 0

ลักษณะการประยุกตงวดการจายเปนชุดการจายที่คงที่ตลอดระยะเวลาทั้งหมด การจายสามารถเปนการชํ าระเงินกู ( เชน คางวดเงินกูซอบาน) หรือการลงทุน ( เชน การฝากเงินออมเปนรายเดือน)อากิวเมนต rate และ nper ตองมีหนวยเปนหนวยเดียวกัน เชน rate คํ านวณเปนอัตราตอเดือน nper จะตองเปนรายเดือนดวยอากิวเมนตทั้งหมด เงินสดจายออก ( เชน การฝากเงินออม) ใหเปนคาลบ เงินสดรับเขา ( เชน เงินปนผล) ใหเปนบวก

ดูเพ่ิมเติมฟงกชัน DDB, ฟงกชัน FV ฟงกชัน IPmt, ฟงกชัน IRR, ฟงกชัน MIRR, ฟงกชัน NPer, ฟงกชัน NPV, ฟงกชันPPmt, ฟงกชัน PV, ฟงกชัน Rate, ฟงกชัน SLN, ฟงกชัน SYD

Page 102: widebase.net: VBA References VBA References

widebase.net –VBA References

102

ตัวอยางตัวอยางการใชฟงกชัน Pmt ในการสงออกคาการจายแตละงวดสํ าหรับเงินกูตลอดชวงเวลา โดยใหกํ าหนดอัตราดอกเบี้ยเปนงวด (APR / 12), จํ านวนงวดการจายทั้งหมด (TotPmts), มูลคาปจจุบันของการลงทุน (PVal), มูลคาเงินกูในอนาคต (FVal), และตัวเลขที่ระบุกํ าหนดการจาย (PayType)

Dim Fmt, FVal, PVal, APR, TotPmts, PayType, PaymentConst ENDPERIOD = 0, BEGINPERIOD = 1 ' เมือ่มีการจายFmt = "###,###,##0.00" ' กํ าหนดรูปแบบการเงินFVal = 0 ' คา FV ของเงินกูมักจะกํ าหนดเปน 0PVal = InputBox("How much do you want to borrow?")APR = InputBox("What is the annual percentage rate of your loan?")

If APR > 1 Then APR = APR / 100 ' ตรวจสอบความถูกตองTotPmts = InputBox("How many monthly payments will you make?")PayType = MsgBox("Do you make payments at the end of month?", vbYesNo)

If PayType = vbNo Then PayType = BEGINPERIOD Else PayType = ENDPERIODPayment = Pmt(APR / 12, TotPmts, -PVal, FVal, PayType)MsgBox "Your payment will be " & Format(Payment, Fmt) & " per month."

PPmt Functionสงออกคาเปนประเภทขอมูล Double ที่ระบุการเงินจายตนในงวดที่ตองการทราบ โดยมีงวดการจายสมํ่ าเสมอ การจายคงที่ และอัตราดอกเบี้ยคงที่

ไวยากรณPPmt(rate, per, nper, pv [,fv [,type]])อากิวเมนตของฟงกชัน PPmt มีความหมาย คือ

สวน รายละเอียดrate บังคับ, เปนประเภทขอมูล Double, ระบุอัตราดอกเบี้ยตองวด เชน การกูเงินซื้อรถยนตที่อัตราดอก

เบี้ย 10% ตอป และงวดการจายเปนรายเดือน อัตราดอกเบี้ยตอเดือน คือ 0.1/12 หรือ 0.0083per บังคับ, เปนประเภทขอมูล Double, ระบุงวดการจาย ซึ่งอยูในชวง 1 ถึง npernper บังคับ, เปนประเภทขอมูล Integer, ระบุจํ านวนงวดการจายทั้งหมด เชน การจายเงินกูรายเดือนของ

เงินกู 4 ป จํ านวนงวดทั้งหมด คือ 4 * 12 (หรือ 48) งวดการจายpv บังคับ, เปนประเภทขอมูล Variant, มูลคาปจจุบัน (หรือเงินรวมทั้งหมด) ของชุดการจายสํ าหรับมูล

คาอนาคต เชน การยืมเงินเพื่อซื้อรถยนต เงินกู คือ มูลคาปจจุบันที่ผูกูตองจายเปนรายเดือน ถาไมกํ าหนด จะใชคาเปน 0

fv ไมบังคับ, เปนประเภทขอมูล Double, ระบุมูลคาในอนาคต หรือจํ านวนสดคงเหลือเมื่อส้ินสุดงวดการจาย เชน ตองการฝากเงินออมเพื่อหได ฿50,000 ในระยะเวลา 18 เดือน เงินจํ านวน ฿50,000 คือ มูลคาอนาคต ถาไมกํ าหนด จะใชคาเปน 0

type ไมบังคับ, เปนประเภทขอมูล Variant, ระบุกํ าหนดการจาย ใช 0 ถากํ าหนดชํ าระเปนส้ินงวด หรือ 1ถากํ าหนดชํ าระเปนตนงวด ถาไมกํ าหนด จะใชคาเปน 0

Page 103: widebase.net: VBA References VBA References

widebase.net –VBA References

103

ลักษณะการประยุกตงวดการจายเปนชุดการจายที่คงที่ตลอดระยะเวลาทั้งหมด การจายสามารถเปนการชํ าระเงินกู ( เชน คางวดเงินกูซอบาน) หรือการลงทุน ( เชน การฝากเงินออมเปนรายเดือน)อากิวเมนต rate และ nper ตองมีหนวยเปนหนวยเดียวกัน เชน rate คํ านวณเปนอัตราตอเดือน nper จะตองเปนรายเดือนดวยอากิวเมนตทั้งหมด เงินสดจายออก ( เชน การฝากเงินออม) ใหเปนคาลบ เงินสดรับเขา ( เชน เงินปนผล) ใหเปนบวก

ดูเพ่ิมเติมฟงกชัน DDB, ฟงกชัน FV, ฟงกชัน IPmt, ฟงกชัน IRR, ฟงกชัน MIRR, ฟงกชัน NPer, ฟงกชัน NPV,

ฟงกชัน Pmt, ฟงกชัน PV, ฟงกชัน Rate, ฟงกชัน SLN, ฟงกชัน SYD

ตัวอยางตัวอยางการใชฟงกชัน PPmt ในการคํ านวณการเงินตนในงวดที่ตองการทราบโดยการจายทุกงวดเทากัน โดยใหกํ าหนดอัตราดอกเบี้ยเปนงวด (APR / 12), งวดที่ตองทราบการจายเงินตน (Period), จํ านวนงวดการจายทั้งหมด (TotPmts), มูลคาปจจุบันของการลงทุน (PVal), มูลคาเงินกูในอนาคต (FVal), และตัวเลขที่ระบุกํ าหนดการจาย (PayType)

Dim NL, TB, Fmt, FVal, PVal, APR, TotPmts, PayType, Payment, Msg, MakeChart, Period, P, IConst ENDPERIOD = 0, BEGINPERIOD = 1 ' เมือ่มีการจายNL = Chr(13) & Chr(10) ' กํ าหนดแถวใหมTB = Chr(9) ' กํ าหนดแทบFmt = "###,###,##0.00" ' กํ าหนดรูปแบบการเงินFVal = 0 ' คา FV ของเงินกูมักจะกํ าหนดเปน 0PVal = InputBox("How much do you want to borrow?")APR = InputBox("What is the annual percentage rate of your loan?")

If APR > 1 Then APR = APR / 100 ' ตรวจสอบความถูกตองTotPmts = InputBox("How many monthly payments do you have to make?")PayType = MsgBox("Do you make payments at the end of month?", vbYesNo)

If PayType = vbNo Then PayType = BEGINPERIOD Else PayType = ENDPERIODPayment = Abs(-Pmt(APR / 12, TotPmts, PVal, FVal, PayType))Msg = "Your monthly payment is " & Format(Payment, Fmt) & ". "Msg = Msg & "Would you like a breakdown of your principal and "Msg = Msg & "interest per period?"

MakeChart = MsgBox(Msg, vbYesNo) ' ถาตองการสรางกราฟIf MakeChart <> vbNo Then If TotPmts > 12 Then MsgBox "Only first year will be shown." Msg = "Month Payment Principal Interest" & NL For Period = 1 To TotPmts If Period > 12 Then Exit For ' แสดงเฉพาะ 12 คาแรก P = PPmt(APR / 12, Period, TotPmts, -PVal, FVal, PayType) P = (Int((P + .005) * 100) / 100) ' ปรบัคาเงินตน I = Payment - P I = (Int((I + .005) * 100) / 100) ' ปรบัคาดอกเบี้ย Msg = Msg & Period & TB & Format(Payment, Fmt) Msg = Msg & TB & Format(P, Fmt) & TB & Format(I, Fmt) & NL

Page 104: widebase.net: VBA References VBA References

widebase.net –VBA References

104

Next Period MsgBox Msg ' แสดงตารางEnd If

Print # Statementเขียนขอมูลตามรูปแบบที่แสดงไปที่ไฟล Sequential

ไวยากรณPrint # filenumber, [outputlist]ไวยากรณประโยคคํ าส่ัง Print # มีรายละเอียดสวนดังนี้

สวน คํ าอธิบายfilenumber บังคับ, เปนหมายเลขไฟลoutputlist ไมบังคับ, เปน expression หรือรายการ expression ที่ใชพิมพ

การตั้งคาอากิวเมนต outputlist ตั้งคาดังนี้

[{Spc(n) / Tab [(n)]}] [expression] [charpos]

การตั้งคา คํ าอธิบายSpc(n) ใชการแทรกชองวางในผลลัพธสงออก โดย n เปนจํ านวนของชองวางที่แทรกTab(n) ใชกํ าหนดตํ าแหนงจุดแทรกไปที่หมายเลขคอลัมน สมบูรณ โดย n เปนหมายเลขคอลัมน

ใช Tab ที่ไมมีอากิวเมนตกํ าหนดตํ าแหนงจุดแทรกที่จุดเริ่มตนของพื้นที่การพิมพตอไปexpression numeric expression หรือ string expression ที่พิมพcharpos ระบุจุดแทรกสํ าหรับอักษรตอไป ใชเครื่องหมาย semicolon (;) เพื่อกํ าหนดตํ าแหนงจุด

แทรกทันที หลังจากตัวอักษรสุดทายแสดงออกมา ใช Tab (n) กํ าหนดตํ าแหนงจุดแทรกที่หมายเลขคอลัมน สมบูรณ ใช Tab ที่ไมอากิวเมนต กํ าหนดตํ าแหนง แทรกที่จุดเริ่มตนของพื้นที่การพิมพตอไป ถา ละ charpos ตัวอักษรตอไปจะพิมพในบรรทัดตอไป

ลักษณะการประยุกตขอมูลที่เขียนดวย Print # มักจะอานจากไฟลดวย Line Input # หรือ Inputถาละ outputlist และรวมเฉพาะรายการที่แยกหลัง filenumber และบรรทัดวางไดรับการพิมพไปที่ไฟล หลาย expression สามารถแยกดวยชองวาง หรือ semicolon ชองวางมีผลเหมือนกับ semicolonสํ าหรับขอมูล Boolean ทั้ง True และ False ไดรับการพิมพ คียเวิรด True และ False ไมมีการแปลขอมูล Date ไดรับการเขียนดวยการใชรูปแบบมาตรฐาน short date ที่ระบบของเครื่องที่ใชรูจัก เมื่อสวนวันที่หรือเวลาหายไปหรือเปนศูนย สวนที่มีอยูจะไดรับการเขียนลงสูไฟล

Page 105: widebase.net: VBA References VBA References

widebase.net –VBA References

105

ไมมีการเขียนขอมูลลงสูไฟล ถาขอมูลของ outputlist วางเปลา แตถาขอมูลของ outputlist เปน Null คา Null จะไดรับการเขียนลงสูไฟลสํ าหรับขอมูล Error ที่มีผลลัพธปรากฏเปนรหัสความผิดพลาด คียเวิรด Error จะไมมีการแปลขอมูลทั้งหมดที่เขียนลงไฟลดวยการใช Print # ตองระวังการตั้งคา International เนื่องจากการจัดรูปแบบขอมูลจากการใชเครื่องหมายแบงทศนิยม เนื่องจาก Print # เขียนภาพของขอมูลลงสูไฟล จึงตองลดการจํ ากัด เพื่อทํ าใหการพิมพถูกตอง ถาใช Tab ที่ไมมีอากิวเมนต เพื่อยายตํ าแหนงการพิมพไปที่พื้นที่การพิมพตอไป Print # สามารถเขียนชองวางระหวางการพิมพฟลดไปที่ไฟลหมายเหตุ ถามีความผิดพลาดเกิดขึ้น ตองอานขอมูลจากไฟลดวยการใช ประโยคคํ าส่ัง Input #ใหใชประโยคคํ าส่ัง Write # แทนที่ Print # เพื่อเขียนขอมูลลงสูไฟล การใช Write # ทํ าใหม่ันใจวา Integrity ของแตละฟลดขอมูล แยกโดยตัวแบงขอมูล ดังนั้น ทํ าใหสามารถ อานกลับโดยการใช Input # การใช Write # ทํ าใหม่ันใจวามีการอานอยางถูกตองในทุก locale

ดูเพ่ิมเติมOpen Statement, เมธอด Print, ฟงกชัน Spc, ฟงกชัน Tab, Write # Statement

ตัวอยาง

' ตวัอยางการใชประโยคคํ าส่ัง printOpen "TESTFILE" For Output As #1 ' เปดไฟลสํ าหรับผลลัพธPrint #1, "This is a Test" ' พมิพขอความไปที่ไฟลPrint #1, ' พมิพแถววางในไฟลPrint #1, "Zone 1"; Tab; "Zone 2" ' พมิพใน 2 พื้นท่ีพิมพPrint #1, "Hello"; " "; "World" ' แยกขอความดวยชองวางPrint #1, Spc(5); "5 ชองวางขางหนา" ' พมิพ 5 ชองวางขางหนาPrint #1, Tab(10); "Hello" ' พมิพคํ าที่คอลัมน 10

' กํ าหนดคา boolean, date, null และ errorDim MyBool, MyDate, MyNull, MyErrorMyBool = False: MyDate = #February 12, 2002#: MyNull = NullMyError = CVErr(32767)' True, False, Null และ Error จะไดการแปลดวยการตั้งคา locale' Date จะไดรบัการดวยรูปแบบ short datePrint #1, MyBool; " is a boolean value"Print #1, MyDate; " is a date"Print #1, MyNull; " is a null value"Print #1, MyError; " is an error value"Close #1 ' ปดไฟล

Put Statementเขียนขอมูลจากตัวแปรลงสูไฟลในดิสก

ไวยากรณPut [#] filenumber, [recnumber], varnameไวยากรณประโยคคํ าส่ัง Put มีรายละเอียดสวน ดังนี้

Page 106: widebase.net: VBA References VBA References

widebase.net –VBA References

106

สวน คํ าอธิบายfilenumber บังคับ, เปนหมายเลขไฟลrecnumber ไมบังคับ, ประเภทขอมูล Variant (Long), หมายเลขเรคคอรด (ไฟลโหมด Random)

หรือหมายเลขไบต (ไฟลโหมด Binary) ที่เริ่มตนการเขียนvarname บังคับ, ชื่อของตัวแปรเก็บขอมูลที่เขียนลงสูดิสก

ลักษณะการประยุกตขอมูลที่เขียนดวย Put มักจะอานจากไฟลดวย Getเรคคอรด หรือไบตแรกในไฟล คือ ตํ าแหนงที่ 1 เรคคอรดหรือไบตที่ 2 คือ ตํ าแหนงที่ 2 และตอไป ถาละ recnumber เรคคอรดหรือไบตตอไปภายหลังประโยคคํ าส่ัง Get หรือ Put สุดทาย หรือช้ีโดยฟงกชัน Seek จะไดรับการเขียน ตองรวมเครื่องหมายจุลภาคใน การแบงดวย

Put # 4, , FileBuffer

สํ าหรับการเปดไฟลในโหมด Random ตองทํ าตามกฎนี้- ถาความยาวของขอมูลที่กํ าลังอานนอยกวาความยาวที่ระบุใน Len Clause ของประโยคคํ าส่ัง Open การ

อานเรคคอรดของ Get อานตามขอบเขตความยาวเรคคอรด ชองวางระหวางจุดส้ินสุดของเรคคอรดหนึ่งกับจุดเริ่มตนของเรคคอรดตอไป มีการรองรับดวยขอมูลที่มีอยูของไฟลบัฟเฟอร เนื่องจากจํ านวนของขอมูลรองรับไมสามารถคนหาไดแนนอน โดยทั่วไป แนวคิดที่ดี คือ มีความยาวเรคคอรดตรงกับความยาวของขอมูลที่กํ าลังอาน

- ถาตัวแปรที่กํ าลังรับขอมูลเปน Variable - Length String การอานของ Get อานขอมูล 2 ไบต ที่ความยาวขอความ และตอไปอานขอมูลเขาสูตัวแปร ดังนั้น ความยาวเรคคอรดระบุโดย Len clause ในประโยคคํ าส่ัง Open ตองยาวมากกวาอยางนอย 2 ไบตของความยาวจริงของขอความ

- ถาตัวแปรที่กํ าลังรับขอมูลเปนประเภทขอมูล Variant ที่เปนตัวเลข Get อาน 2 ไบตตามการระบุ Vartype ของประเภทขอมูล Variant แลวขอมูลไปสูตัวแปร ตัวอยาง เมื่ออาน Variant ของ Vartype 3 การอานของ Get คือ การอาน 6 ไบต ไดแก 2 ไบต สํ าหรับการระบุประเภทขอมูล Variant เปน Vartype 3 (Long) และ 4 ไบตเก็บขอมูล ความยาวของเรคคอรดที่ระบุโดย Len Clause ในประโยคคํ าส่ัง Open ตองการอยางนอย 2 ไบตมากกวาจํ านวนไบตจริงของขอมูลที่ตองการเผื่อเก็บในตัวแปร

หมายเหตุ ประโยคคํ าส่ัง Get สามารถใชอาน Variant array จากดิสก แตไมสามารถใช Get อานประเภทขอมูล Variant แบบปริมาณที่เก็บใน array และไมสามารถใช Get อานออบเจคจากดิสก- ถาตัวแปรที่รับขอมูลเปนประเภทขอมูล Variant ของ Vartype 8 (String) การอานของ Get อาน 2 ไบต

ระบุ Vartype, 2 ไบตระบุความยาวของขอความ และอานขอมูลของขอความ การระบุความยาวของ Len clause ในประโยคคํ าส่ัง Open ตองการอยางนอย 4 ไบตมากกวาความยาวของขอความจริง

- ถาตัวแปรที่รับขอมูล คือ dynamic array การอานของ Get อาน descriptor ซึ่งยาวเทากับ 2 บวก 8 เทาของจํ านวนมิติ คือ 2 + 8 * จํ านวนของมิติ ความยาวเรคคอรดที่ระบุ โดย Len Clause ในประโยคคํ าส่ัง

Page 107: widebase.net: VBA References VBA References

widebase.net –VBA References

107

Open ตองมากกวาหรือเทากับจํ านวนรวมไบตทั้งหมดที่ตองการ เพื่ออานขอมูล array และ descriptor ของ array ตัวอยางเชน การประกาศ array ตอไปตองการ 118 ไบต เมื่อ array ไดรับการเขียนไปที่ดิสกDim MyArray (1 To 5, 1 To 10) As Integer

จํ านวน 118 ไบต คือ 18 ไบต สํ าหรับ descriptor (2+8*2) และ 100 ไบต สํ าหรับขอมูล (5*10*2)- ถาตัวแปรรับขอมูล คือ static array การอานของ Get อานเฉพาะขอมูล ไมมีการอาน descriptor- ถาตัวแปรรับขอมูลเปนตัวแปรประเภทอื่น (นอกจาก Variable-Length string หรือ Variant) การอานของ

Get อานเฉพาะขอมูลของตัวแปร ความยาวของเรคคอรดระบุ โดย Len Clause ในประโยคคํ าส่ัง Open ตองมากกวาหรือเทากับความยาวของขอมูลที่ไดรับการอาน

- Get อาน element ของ User-defined type เหมือนกับการอานอยางเอกเทศ ยกเวน ไมมีการรองรับระหวาง element บนดิสก dynamic array ใน User - define type (เขียนดวย Put) มีคํ านํ าหนาโดย descriptor ซึ่งยาวเทากับ 2 บวก 8 เทาของจํ านวนมิติ เทากับ 2 + 8 * จํ านวนของมิติ ความยาวเรคคอรดที่ระบุโดย Len Clause ในประโยคคํ าส่ัง Open ตองมากกวา หรือเทากับจํ านวนรวมของไบตทั้งหมดที่ตองการ เพื่ออานแตละ element รวมถึง array และ descriptor

สํ าหรับไฟลที่เปดในโหมด Binary กฎ Random ทั้งหมดไดรับการประยุกต ยกเวน- Len Clause ในประโยคคํ าส่ัง Open ไมมีผลกระทบ การอานของ Get อาน ตัวแปรทั้งหมดติดตอกัน ซึ่ง

ไมมีการแบงระหวางเรคคอรด- array อื่น นอกจาก array ใน User - defined type การอานของ Get อานเฉพาะขอมูล ไมมีการอาน

descriptor- Get อาน Variable - Length String ที่ไมใช element ของ User – defined type โดยไมมีการยกเวน

ความยาว descriptor 2 ไบต จํ านวนของไบตที่อานเทากับจํ านวนตัวอักษรในขอความตัวอยาง ประโยคคํ าส่ังตอไปอาน 10 ไบต จากไฟลหมายเลข 1

VarString = String (10, " " )Put # 1, VarString

ดูเพ่ิมเติมGet Statement, Open Statement, ฟงกชัน Seek, Type Statement, ฟงกชัน VarType

ตัวอยาง

Type Record ' กํ าหนด User - define type ID As Integer Name As String * 20End Type

Dim MyRecord As Record, RecordNumber ' ประกาศตัวแปร

' เปดไฟลสํ าหรับการเขาถึงแบบสุม (random access)Open "TESTFILE" For Random As #1 Len = Len(MyRecord)For RecordNumber = 1 To 5 ' loop 5 รอบ MyRecord.ID = RecordNumber ' กํ าหนด id MyRecord.Name = "My Name" & RecordNumber ' สรางขอความ Put #1, RecordNumber, MyRecord ' เขยีนเรคคอรดลงไฟล

Page 108: widebase.net: VBA References VBA References

widebase.net –VBA References

108

Next RecordNumberClose #1 ' ปดไฟล

PV Functionสงออกคาเปนประเภทขอมูล Double ที่ระบุมูลคาปจจุบันของการลงทุน โดยมีงวดการจายสมํ่ าเสมอ การจายคงที่ และอัตราดอกเบี้ยคงที่

ไวยากรณPV(rate,nper,pv[,fv[,type]])อากิวเมนตของฟงกชัน PV มีความหมาย คือ

สวน รายละเอียดrate บังคับ, เปนประเภทขอมูล Double, ระบุอัตราดอกเบี้ยตองวด เชน การกูเงินซื้อรถยนตที่อัตราดอก

เบี้ย 10% ตอป และงวดการจายเปนรายเดือน อัตราดอกเบี้ยตอเดือน คือ 0.1/12 หรือ 0.0083nper บังคับ, เปนประเภทขอมูล Integer, ระบุจํ านวนงวดการจายทั้งหมด เชน การจายเงินกูรายเดือนของ

เงินกู 4 ป จํ านวนงวดทั้งหมด คือ 4 * 12 (หรือ 48) งวดการจายpv บังคับ, เปนประเภทขอมูล Variant, มูลคาปจจุบัน (หรือเงินรวมทั้งหมด) ของชุดการจายสํ าหรับมูล

คาอนาคต เชน การยืมเงินเพื่อซื้อรถยนต เงินกู คือ มูลคาปจจุบันที่ผูกูตองจายเปนรายเดือน ถาไมกํ าหนด จะใชคาเปน 0

fv ไมบังคับ, เปนประเภทขอมูล Double, ระบุมูลคาในอนาคต หรือจํ านวนสดคงเหลือเมื่อส้ินสุดงวดการจาย เชน ตองการฝากเงินออมเพื่อหได ฿50,000 ในระยะเวลา 18 เดือน เงินจํ านวน ฿50,000 คือ มูลคาอนาคต ถาไมกํ าหนด จะใชคาเปน 0

type ไมบังคับ, เปนประเภทขอมูล Variant, ระบุกํ าหนดการจาย ใช 0 ถากํ าหนดชํ าระเปนส้ินงวด หรือ 1ถากํ าหนดชํ าระเปนตนงวด ถาไมกํ าหนด จะใชคาเปน 0

ลักษณะการประยุกตงวดการจายเปนชุดการจายที่คงที่ตลอดระยะเวลาทั้งหมด การจายสามารถเปนการชํ าระเงินกู ( เชน คางวดเงินกูซอบาน) หรือการลงทุน ( เชน การฝากเงินออมเปนรายเดือน)อากิวเมนต rate และ nper ตองมีหนวยเปนหนวยเดียวกัน เชน rate คํ านวณเปนอัตราตอเดือน nper จะตองเปนรายเดือนดวยอากิวเมนตทั้งหมด เงินสดจายออก (เชน การฝากเงินออม) ใหเปนคาลบ เงินสดรับเขา (เชน เงินปนผล) ใหเปนบวก

ดูเพ่ิมเติมฟงกชัน DDB, ฟงกชัน FV ฟงกชัน IPmt, ฟงกชัน IRR, ฟงกชัน MIRR, ฟงกชัน NPer, ฟงกชัน NPV, ฟงกชันPmt, ฟงกชัน PPmt, ฟงกชัน Rate, ฟงกชัน SLN, ฟงกชัน SYD

Page 109: widebase.net: VBA References VBA References

widebase.net –VBA References

109

ตัวอยางตัวอยางการใชฟงกชัน PV ในการสงออกคาของมูลคาปจจุบันของการออม ฿1,000,000 โดยแบงฝากเปนปละ ฿50,000 ตลอดระยะ 20 ป ใหอัตราดอกเบี้ยตอป (APR), จํ านวนงวดการจายทั้งหมด (TotPmts), จํ านวนการของแตละงวด (YrIncome), มูลคาในอนาคต (FVal), และตัวเลขที่ระบุกํ าหนดการจาย (PayType) ซึ่ง YrIncome เปนคาลบเพราะเปนการแสดงการจายเงินออกเพื่อนํ าไปฝากเปนเงินออม

Dim Fmt, APR, TotPmts, YrIncome, FVal, PayType, PValConst ENDPERIOD = 0, BEGINPERIOD = 1 ' เมือ่มีการจาย

Fmt = "###,##0.00" ' กํ าหนดรูปแบบการเงินAPR = .0825 ' อัตราดอกเบี้ยรายปTotPmts = 20 ' จ ํานวนงวดทั้งหมดYrIncome = 50000 ' เงนิฝากรายปFVal = 1000000 ' มลูคาในอนาคตPayType = BEGINPERIOD ' การจายที่ตนงวด

PVal = PV(APR, TotPmts, -YrIncome, FVal, PayType)MsgBox "The present value is " & Format(PVal, Fmt) & "."

QBColor Functionสงออกคาเปนประเภทขอมูล Long ที่แสดงรหัสสี RGB ตามหมายเลขสีที่กํ าหนด

ไวยากรณQBColor(color)อากิวเมนต color เปนเลขจํ านวนเต็มในชวง 0-15

การตั้งคาอากิวเมนต color ตั้งคาได ดังนี้

หมายเลข สี หมายเลข สี0 ดํ า (Black) 8 เทา (Gray)1 นํ้ าเงิน (Blue) 9 นํ้ าเงินออน (Light Blue)2 เขียว (Green) 10 เขียวออน (Light Green)3 Cyan 11 Light Cyan4 แดง (Red) 12 แดงออน (Light Red)5 Magenta 13 Light Magenta6 เหลือง (Yellow) 14 เหลืองออน (Light Yellow)7 ขาว (White) 15 Bright Yellow

Page 110: widebase.net: VBA References VBA References

widebase.net –VBA References

110

ลักษณะการประยุกตอากิวเมนต color แสดงคาของสีที่ใชกับภาษา Visual Basic เวอรชันเริ่มแรก (เชน Microsoft Visual Baiscสํ าหรับ MS-DOS และคอมไพลเลอรภาษา Basic) การเริ่มตนดวยไบตที่นอยที่สุด เพื่อการระบุคาสีแดง, เขียว และนํ้ าเงิน โดยการตั้งคาสีในระบบ RGB

ดูเพ่ิมเติมฟงกชัน RGB

ตัวอยางตัวอยางการใชฟงกชัน QBColor เพื่อเปล่ียนคุณสมบัติ BackColor ของฟอรม จากการสงผานคาใน MyForm เปนสีที่ระบุดวย ColorCode ฟงกชัน QBColor ยอมรับคาจํ านวนเต็มระหวาง 0 ถึง 15

Sub ChangeBackColor (ColorCode As Integer, MyForm As Form) MyForm.BackColor = QBColor(ColorCode)End Sub

Randomize Statementinitial ตัวสรางเลขสุม

ไวยากรณRandomize [number]number เปนอากิวเมนตไมบังคับ และเปนประเภทขอมูล variant หรือ numeric expression

ลักษณะการประยุกตRandomize ใช number ในการ initial ฟงกชัน Rnd ที่เปนตัวสรางเลขสุม เพื่อใหคาเริ่มตน (seed value) ให ถาละ number คาสงออกโดยเวลาของระบบใชเปนคาเริ่มตนใหมถาไมใช Randomize ฟงกชัน Rnd ที่ไมมีอากิวเมนต ใชตัวเลขเดียวกับคาเริ่มตนจากการเรียกครั้งแรก และใชหมายเลขที่สรางครั้งสุดทายเปนคาเริ่มตนหมายเหตุ การซํ้ าอนุกรมของเลขสุมใหเรียก Rnd ดวย อากิวเมนตคาลบทันทีกอนการใชRandomize ดวยอากิวเมนตตัวเลข การใช Randomize ดวยคาเดียวกัน number จะไมซํ้ าอนุกรมกอน

ดูเพ่ิมเติมฟงกชัน Rnd, ฟงกชัน Timer

ตัวอยาง

Dim MyValeRondomize ' initial การสรางเลขสุมMyValue = Int((6 * Rnd) + 1) ' สรางเลขสุมระหวาง 1 ถึง 6

Page 111: widebase.net: VBA References VBA References

widebase.net –VBA References

111

Rate Functionสงออกคาเปนประเภทขอมูล Double ที่ระบุอัตราดอกเบี้ยในการคํ านวณ

ไวยากรณRate(nper, pv [,fv [,type [,guess]]])อากิวเมนตของฟงกชัน Rate มีความหมาย คือ

สวน รายละเอียดnper บังคับ, เปนประเภทขอมูล Integer, ระบุจํ านวนงวดการจายทั้งหมด เชน การจายเงินกูรายเดือนของ

เงินกู 4 ป จํ านวนงวดทั้งหมด คือ 4 * 12 (หรือ 48) งวดการจายpv บังคับ, เปนประเภทขอมูล Variant, มูลคาปจจุบัน (หรือเงินรวมทั้งหมด) ของชุดการจายสํ าหรับมูล

คาอนาคต เชน การยืมเงินเพื่อซื้อรถยนต เงินกู คือ มูลคาปจจุบันที่ผูกูตองจายเปนรายเดือน ถาไมกํ าหนด จะใชคาเปน 0

fv ไมบังคับ, เปนประเภทขอมูล Double, ระบุมูลคาในอนาคต หรือจํ านวนสดคงเหลือเมื่อส้ินสุดงวดการจาย เชน ตองการฝากเงินออมเพื่อหได ฿50,000 ในระยะเวลา 18 เดือน เงินจํ านวน ฿50,000 คือ มูลคาอนาคต ถาไมกํ าหนด จะใชคาเปน 0

type ไมบังคับ, เปนประเภทขอมูล Variant, ระบุกํ าหนดการจาย ใช 0 ถากํ าหนดชํ าระเปนส้ินงวด หรือ 1ถากํ าหนดชํ าระเปนตนงวด ถาไมกํ าหนด จะใชคาเปน 0

guess ไมบังคับ, เปนประเภทขอมูล Variant, ระบุคาในการประมาณคาสงออกของฟงกชัน IRR ถาไมกํ าหนด จะใหคา guess เปน 0.1 (10%)

ลักษณะการประยุกตงวดการจายเปนชุดการจายที่คงที่ตลอดระยะเวลาทั้งหมด การจายสามารถเปนการชํ าระเงินกู ( เชน คางวดเงินกูซอบาน) หรือการลงทุน ( เชน การฝากเงินออมเปนรายเดือน)อากิวเมนตทั้งหมด เงินสดจายออก (เชน การฝากเงินออม) ใหเปนคาลบ เงินสดรับเขา (เชน เงินปนผล) ใหเปนบวกฟงกชัน Rate จํ าคํ านวณแบบซํ้ า (iteration) โดยเริ่มจากคาของ guess โดยฟงกชัน Rate จะคํ านวณจนกระทั่งไดคาแมนยํ าภายใน 0.00001% ถาฟงกชัน Rate ไมสามารถหาไดภายใน 20 รอบ จะไมสามารถหาคํ าตอบได

ดูเพ่ิมเติมฟงกชัน DDB, ฟงกชัน FV ฟงกชัน IPmt, ฟงกชัน IRR, ฟงกชัน MIRR, ฟงกชัน NPer, ฟงกชัน NPV, ฟงกชันPmt, ฟงกชัน PPmt, ฟงกชัน PV, ฟงกชัน SLN, ฟงกชัน SYD

Page 112: widebase.net: VBA References VBA References

widebase.net –VBA References

112

ตัวอยางตัวอยางการใชฟงกชัน Rate ในการคํ านวณอัตราดอกเบี้ยของเงินกูที่กํ าหนดจํ านวนงวดทั้งหมด (TotPmts), การจายเงินกู (Payment), มูลคาปจจุบันหรือเงินตน (PVal), มูลคาเงินกูในอนาคต (FVal), ตัวเลขที่ระบุกํ าหนดการจาย (PayType), และคาประมาณของอัตราดอกเบี้ย (Guess)

Dim Fmt, FVal, Guess, PVal, Payment, TotPmts, PayType, APRConst ENDPERIOD = 0, BEGINPERIOD = 1 ' เมือ่มีการจาย

Fmt = "##0.00" ' กํ าหนดรูปแบบรอยละFVal = 0 ' คา FV ของเงินกูมักจะกํ าหนดเปน 0Guess = .1 ' คา Guess 10%PVal = InputBox("How much did you borrow?")Payment = InputBox("What's your monthly payment?")TotPmts = InputBox("How many monthly payments do you have to make?")PayType = MsgBox("Do you make payments at the end of the month?", vbYesNo)

If PayType = vbNo Then PayType = BEGINPERIOD Else PayType = ENDPERIODAPR = (Rate(TotPmts, -Payment, PVal, FVal, PayType, Guess) * 12) * 100MsgBox "Your interest rate is " & Format(CInt(APR), Fmt) & " percent."

Reset Statementปดไฟลทั้งหมดที่เปดดวยประโยคคํ าส่ัง Open

ไวยากรณReset

ลักษณะการประยุกตประโยคคํ าส่ัง Reset ปดไฟลทั้งหมดที่เปดโดยประโยคคํ าส่ัง Open และเขียนขอมูลจากไฟลบัฟเฟอรทั้งหมดลงสูดิสก

ดูเพ่ิมเติมClose Statement, End Statement, Open Statement

ตัวอยาง

Dim FileNumber ' ประกาศตัวแปรFor FileNumber = 1 To 5 ' loop 5 รอบ' เปดไฟลสํ าหรับ output, FileName น ําไปตอขอความ TEST สํ าหรับชื่อไฟล, หมายเลขตอทาย # Open "TEST" & FileNumber For Output As #FileNumber Write #FileName, "Hello World" ' เขยีนขอมูลลงไฟลNext FileNameReset ' ปดไฟลและเขียนขอมูลลงดิสก

Page 113: widebase.net: VBA References VBA References

widebase.net –VBA References

113

RGB Functionสงออกคาเปนประเภทขอมูล Long ที่แสดงรหัสสี RGB

ไวยากรณRGB(red, green, blue)ฟงกชัน RGB มีไวยากรณของอากิวเมนต คือ

สวน รายละเอียดRed บังคับ, เปนประเภทขอมูล Variant (Integer) โดยหมายเลขมีชวงระหวาง 0-255 ซึ่งเปนการแสดง

สวนประกอบของสีแดงgreen บังคับ, เปนประเภทขอมูล Variant (Integer) โดยหมายเลขมีชวงระหวาง 0-255 ซึ่งเปนการแสดง

สวนประกอบของสีเขียวblue บังคับ, เปนประเภทขอมูล Variant (Integer) โดยหมายเลขมีชวงระหวาง 0-255 ซึ่งเปนการแสดง

สวนประกอบของสีนํ้ าเงิน

ลักษณะการประยุกตเมธอด Application และคุณสมบัติยอมรับการกํ าหนดสี ยกเวนการกํ าหนดที่เปนหมายเลขที่คาสี RGB โดยคาของสี RGB ระบุตามความเขมขนของสีแดง, เขียว และนํ้ าเงิน เพื่อผสมเปนสีที่กํ าหนดคาสํ าหรับอากิวเมนตของฟงกชัน RGB ที่เกินกวา 255 จะใชคา 255ตารางเปนตัวอยางรายการของสีมาตรฐาน

สี สีแดง สีเขียว สีนํ้ าเงินดํ า 0 0 0นํ้ าเงิน 0 0 255เขียว 0 255 0Cyan 0 255 255แดง 255 0 0Magenta 255 0 255เหลือง 255 255 0ขาว 255 255 255

ดูเพ่ิมเติมฟงกชัน QBColor

Page 114: widebase.net: VBA References VBA References

widebase.net –VBA References

114

ตัวอยางตัวอยางการใชฟงกชัน RGB เพื่อใชสงคาหมายเลขแทนคาสี RGB ซึ่งใชสํ าหรับเมธอด Application และคุณสมบัติซึ่งยอมการกํ าหนด โดยออบเจคและคุณสมบัติของ MyObject ใชสํ าหรับเปาหมายขางตน ถาไมมี MyObject หรือไมมีคุณสมบัติ Color จะเกิดความผิดพลาด

Dim RED, I, RGBValue, MyObjectRed = RGB(255, 0, 0) ' สงออกคาของสีแดงI = 75 ' การกํ าหนดคาเริ่มตนRGBValue = RGB(I, 64 + I, 128 + I) ' เหมอืนกับ RGB(75, 139, 203).MyObject.Color = RGB(255, 0, 0) ' กํ าหนดคุณสมบัติ Color ของ MyObject เปนสีแดง

Right Function, Right$ Functionฟงกชัน Right สงออกคาเปนประเภทขอมูล Variant (String) ตามจํ านวนตัวอักษรที่ระบุโดยเริ่มตนจากดานขวามือฟงกชัน Right $ สงออกคาเปนประเภทขอมูล String ตามจํ านวนตัวอักษรที่ระบุโดยเริ่มตนจากดานขวามือ

ไวยากรณRight(starting, length)Right$(starting, length)อากิวเมนตของฟงกชัน Right และฟงกชัน Right$ มีขอกํ าหนด คือ

สวน รายละเอียดstring บังคับ, โดย Expression ของขอความที่ตองการสงคาดานซาย ถา string เปนคาวาง (Null) ผล

ลัพธจะเปนคาวางlength บังคับ, โดยประเภทขอมูลเปน Variant (Long) หรือเปนเลขจํ านวนเต็ม ซึ่ง Expression ของตัว

เลขเปนการระบุจํ านวนตัวอักษรที่ตองการใหสงคาออกมา ถาเปน 0 คาที่สงออกจะเปน Zero-legth string (“ “) ถาคา length มากกวาหรือเทากับ string ขอความที่มีอยูจะไดรับการสงออกมา

ลักษณะการประยุกตถาตองการหาจํ านวนตัวอักษรของขอความใหใชฟงกชัน Lenหมายเหตุ

• การใชฟงกชัน RightB กับประเภทขอมูลไบตของขอความ การระบุคา length จะเปนระบุจํ านวนไบต

ดูเพ่ิมเติมฟงกชัน Left, ฟงกชัน Left$, ฟงกชัน Len, ฟงกชัน Mid, ฟงกชัน Mid$

ตัวอยางฟงกชัน Right นํ ามาใชสงคาของจํ านวนตัวอักษรซึ่งเริ่มตนจากดานซาย

Page 115: widebase.net: VBA References VBA References

widebase.net –VBA References

115

Dim anyString, myStranyString = "Hello World"myStr = Left(anyString, 1) ' ผลลัพธ "d"myStr = Left(anyString, 8) ' ผลลัพธ "lo World"myStr = Left(anyString, 25) ' ผลลัพธ "Hello World"

RmDir Statementลบไดเรคทอรี่หรือโฟลเดอรที่มีอยู

ไวยากรณRmDir pathpath เปนอากิวเมนตบังคับ และเปน string expression ที่ระบุไดเรคทอรี หรือโฟลเดอรที่ตองการลบ

path อาจจะรวมถึงไดรฟ ถาไมระบุไดรฟ RmDir ลบไดเรคทอรี หรือโฟลเดอรบนไดรฟปจจุบัน

ลักษณะการประยุกตถาใช RmDir กับไดเรคทอรี หรือโฟลเดอรที่มีไฟลอยู จะเกิดความผิดพลาด ใหใชประโยคคํ าส่ัง Kill ลบไฟลทั้งหมด กอนการลบไดเรคทอรี หรือโฟลเดอร

ดูเพ่ิมเติมChDir Statement, ฟงกชัน CurDir, Kill Statement, MkDir Statement

ตัวอยาง

' สมมตวิา "MYDIR" เปนไดเรคทอรีหรือโฟลเดอรวางRmDir "MyDir" ' ลบไดเรคทอรีหรือโฟลเดอรวาง

Rnd Functionสงออกคาเปนเลขสุมที่มีประเภทขอมูล Single

ไวยากรณRnd[(number)]อากิวเมนต number เปนตัวเลือก (ไมบังคับ) และมีประเภทขอมูล Single หรือ Expression ที่ใหคา

ดังกลาว

ลักษณะการประยุกตฟงกชัน Rnd จะสงคาออกเปนคาที่นอยกวา 1 แตมากกวาหรือเทากับศูนยตัวอยางDim myValuemyValue = Int((6*Rnd)+1) ' สรางคาสุมระหวาง 1 ถึง 6

Page 116: widebase.net: VBA References VBA References

widebase.net –VBA References

116

RTrim, RTrim$ Functionดู LTrim, LTrim$ Function

SaveSetting Statementใชในการบันทึกคาหรือสราง application entry ใน Windows Register

ไวยากรณSaveSetting appname, section, key, settingฟงกชัน SaveSetting มีไวยากรณของอากิวเมนต คือ

สวน รายละเอียดappname บังคับ, เปน expression ของขอความที่เก็บช่ือการประยุกตหรือโครงการที่ key setting ตองการsection บังคับ, เปน expression ของขอความที่เก็บช่ือ section ที่ key setting ไดรับบันทึกคาkey บังคับ, เปน expression ของขอความที่เก็บช่ือ key setting ที่ตองการบันทึกคาdefault บังคับ, เปน expression เก็บคาที่ใชกํ าหนดให key

ลักษณะการประยุกตความผิดพลาดเกิดขึ้นเมื่อ key setting ไมสามารถบันทึกคาได

ดูเพ่ิมเติมDeleteSetting Statement, ฟงกชัน GetAllSettings, ฟงกชัน GetSetting,

ตัวอยางตัวอยางการใชคํ าส่ัง SaveSettings ซึ่งเริ่มจากการใชคํ าส่ัง SaveSetting ทํ าการ Regirtry ใน Windows (หรือไฟล .ini ใน 16-bit Windows) สํ าหรับโปรแกรมประยุกต MyApp และใชคํ าส่ัง DeleteSetting ลบคาทั้งหมด

' ท่ีเกบ็คาบางสวนของ Settings ใน registrySaveSetting "MyApp","Startup", "Top", 75SaveSetting "MyApp","Startup", "Left", 50

' ใชคํ าส่ัง DeleteSetting ยกเลิก section และคาทั้งหมดจาก RegisterDeleteSetting "MyApp", "Startup"

Second Functionสงออกคาเปนประเภทขอมูล Variant (Integer) ในชวง 0 ถึง 59 จากสวนวินาทีของนาที

ไวยากรณSecond(time)

Page 117: widebase.net: VBA References VBA References

widebase.net –VBA References

117

อากิวเมนต time สามารถเปนประเภทขอมูลขอความ (String) ตัวเลข หรือ Expression ที่แสดงในรูปแบบของเวลา ถา time เปนคาวาง (Null) ผลลัพธจะเปนคาวาง

ดูเพ่ิมเติมฟงกชัน Day, ฟงกชัน Hour, ฟงกชัน Minute, ฟงกชัน Now, ฟงกชัน Time

ตัวอยางฟงกชัน Second นํ ามาใชในการแปลงเวลาที่กํ าหนด ใหเปนคาของวินาที

Dim MyTime, MySecondMyTime = #4:35:17 PM# ' กํ าหนดเวลาMySecond = Second(MyTime) ' MySecond เกบ็ของวินาที

Seek Functionสงออกคาประเภทขอมูล Long ที่ระบุการอานหรือเขียนปจจุบัน ในไฟลที่เปดดวยคํ าส่ัง Open

ไวยากรณSeek(filenumber)อากิวเมนต filenumber เปนประเภทขอมูลเลขจํ านวนเต็มที่เก็บคาหมายเลขไฟลที่มีจริง

ลักษณะการประยุกตคํ าอธิบายตอไปเปนคาสงออกสํ าหรับแตละโหมดของไฟลที่เขาถึง

โหมด คาที่สงออกRandom หมายเลขของเรคคอรดตอไปของไฟลที่อานหรือเขียนBinary, Output,Append, Input

ตํ าแหนงไบตที่จะปรากฏในครั้งตอไป โดยไบตแรกเปนไฟลตํ าแหนง 1, ไบตที่สองเปนไฟลตํ าแหนง 2 และตอๆไป

ดูเพ่ิมเติมGet Statement, ฟงกชัน Loc, Open Statement, Put Statement, Seek Statement

ตัวอยางตัวอยางการใชฟงกชัน Seek สงคาตํ าแหนงปจจุบัน สมมติให TESTFILE เปนไฟลที่เก็บเรคคอรดที่ผูใชกํ าหนดประเภท

Type Record ' กํ าหนดผูใชกํ าหนดประเภท ID As Integer Name As String * 20End Type

Page 118: widebase.net: VBA References VBA References

widebase.net –VBA References

118

สํ าหรับไฟลที่เปดในโหมด Random ฟงกชัน Seek สงหมายเลขของเรคคอรดตอไปDim MyRecord As Record ' ประกาศตัวแปรOpen "TESTFILE" For Random As #1 Len = Len(MyRecord)Do While Not EOF(1) ' วนรอบจนกระทั้งส้ินสุดไฟล Get #1, , MyRecord ' อานเรคคอรดตอไป Debug.Print Seek(1) ' พมิพออกใน Immediate windowLoopClose #1 ' ปดไฟล

การเปดในโหมดอื่นนอกเหนือจาก Random ฟงกชัน Seek สงตํ าแหนงไบตที่เปนการทํ างานครั้งตอไป สมมติให TESTFILE เปน text file ที่มีขอมูลตัวอยาง

Dim MyCharOpen "TESTFILE" For Input As #1 'เปดไฟลสํ าหหรับอานDo While Not EOF(1) ' วนรอบจนกระทั้งส้ินสุดไฟล MyChar = Input(1, #1) ' อานตัวอักษรของขอมูลตอไป Debug.Print Seek(1) ' พมิพออกใน Immediate windowLoopClose #1 ' ปดไฟล

Seek Statementตั้งคาตํ าแหนงสํ าหรับการทํ างาน อาน/เขียนตอไปภายในไฟลที่เปดดวยการใชประโยคคํ าส่ัง Open

ไวยากรณSeek [#] filenumber, positionไวยากรณประโยคคํ าส่ัง Seek มีรายละเอียดสวน ดังนี้

สวน คํ าอธิบายfilenumber บังคับ, เปนหมายเลขไฟลposition บังคับ, เปนตัวเลขในชวง 1 - 2, 147, 483, 647 ที่ชี้ ถึงการทํ างาน อาน/เขียนตอไปควร

เกิดขึ้น

ลักษณะการประยุกตหมายเลขเรคคอรดที่ระบุในประโยคคํ าส่ัง Get และ Put จะแทนที่ตํ าแหนงที่ทํ างานโดย Seekการทํ างานเขียนไฟลภายหลังการทํ างาน โดย Seek กอนการสิ้นสุดไฟล ถาพยายามให Seek ทํ างานไปที่ตํ าแหนงคาลบหรือศูนย จะเกิดความผิดพลาด

ดูเพ่ิมเติมGet Statement, ฟงกชัน Loc, Open Statement, Put Statement, ฟงกชัน Seek

ตัวอยางเปดในโหมด random สามารถใช Seek คนหาเรคคอรดตอไป

Page 119: widebase.net: VBA References VBA References

widebase.net –VBA References

119

Type Record ' กํ าหนด User - define type ID As Integer Name As String * 20End Type

Dim MyRecord As Record, MaxSize, RecordNumber ' ประกาศตัวแปร

' เปดไฟลสํ าหรับการเขาถึงแบบสุม (random access)Open "TESTFILE" For Random As #1 Len = Len(MyRecord)MaxSize = LOF(1) \ Len(MyRecord)For RecordNumber = MaxSize To 1 Step -1 Seek #1, RecordNumber ' ตัง้คาตํ าแหนง Get #1, , MyRecord ' อานเรคคอรดNext RecordNumberClose #1 ' ปดไฟล

เปดในโหมดอื่นที่ไมใชโหมด Random สามารถใช Seek คนหาตํ าแหนงไบตได

Dim MaxSize, NextChar, MyChar ' ประกาศตัวแปร

' เปดสํ าหรับ inputOpen "TESTFILE" For Input As #1MaxSize = LOF(1)For NextChar = MaxSize To 1 Step -1 Seek #1, NextChar ' ตั้งคาตํ าแหนง MyChar = Input(1, #1) ' อานตัวอักษรNext NextCharClose #1 ' ปดไฟล

SendKeys Statementสงแปนพิมพไปที่ window เหมือนกับการกดปุมแปนพิมพ

ไวยากรณSendKeys string [, wait]ไวยากรณประโยคคํ าส่ัง SendKeys มีรายละเอียดอากิวเมนตดังนี้

สวน คํ าอธิบายString บังคับ, เปน string expression ระบุแปนพิมพที่สงWait ไมบังคับ, เปนคา Boolean ที่ระบุโหมดการคอย ถาเปน False (คาเริ่มตน) ตอง

control ไดรับการ สงไปที่ procedure ทันที ภายหลัง แปนพิมพไดรับการสง ถาเปนTrue แปนพิมพตองไดรับการประมวลผล กอนการสงออกตัว control ไปที่ procedure

ลักษณะการประยุกตแตละแปนพิมพ นํ าเสนอดวย 1 ตัวอักษร หรือมากกวา ในการระบุแปนพิมพตัวอักษร ใชตัวอักษรนั้น เชน ตัวอักษร A ใช “A” สํ าหรับอากิวเมนต string การนํ าเสนอมากกวา 1 ตัวอักษร ใหใชการตอเพิ่มตัวอักษร เชน การนํ าเสนอตัวอักษร A,B และ C ใช “ABC” สํ าหรับอากิวเมนต string

Page 120: widebase.net: VBA References VBA References

widebase.net –VBA References

120

เครื่องหมายบวก (+), caret (^), เปอรเซ็นต (%), tilde (~) และวงเล็บ ( ) มีความหมายพิเศษสํ าหรับ SendKeys การระบุตัวอักษรเหลานี้ใหปดภายในเครื่องหมายปก ({ })เชน เครื่องหมายบวก ใช { + }, วงเล็บส่ีเหลี่ยม ([ ]) ไมมีความหมายพิเศษ สํ าหรับ SendKeys แตตองอยูในเครื่องหมายปกกา ในการประยุกตอื่น วงเล็บส่ีเหลี่ยมมีความหมายเฉพาะที่มีความสํ าคัญ เมื่อเกิด dynamic data exchange (DDE) การระบุเครื่องหมายปกกาใช { { } และ { } }การระบุตัวอักษรไมแสดงขึ้นเมื่อมีการกดปุมแปนพิมพ เชน ENTER หรือ TAB และแปนพิมพที่นํ าเสนอการกระทํ ามากกวาตัวอักษร ใชรหัสตามรายการตอไป

แปนพิมพ รหัสBACKSPACE {BACKSPACE}, {BS} หรือ {BKSP]BREAK {BREAK}CAPS LOCK {CAPSLOCK}DEL หรือ DELETE {DELETE} หรือ {DEL}DOWN ARROW {DOWN}END {END}ENTER {ENTER} หรือ ~ESC {ESC}HELP {HELP}HOME {HOME}INS หรือ INSERT {INSERT} หรือ {INS}LEFT ARROW {LEFT}NUM LOCK {NUMLOCK}PAGE DOWN {PGDN}PAGE UP {PGUP}PRINT SCREEN {PRTSC}RIGHT ARROW {RIGHT}SCROLL LOCK {SCROLLLOCK}TAB {TAB}UP ARROW {UP}F1 {F1}F2 {F2}F3 {F3}F4 {F4}F5 {F5}F6 {F6}

Page 121: widebase.net: VBA References VBA References

widebase.net –VBA References

121

แปนพิมพ รหัสF7 {F7}F8 {F8}F9 {F9}F10 {F10}F11 {F11}F12 {F12}F13 {F13}F14 {F14}F15 {F15}F16 {F16}

การระบุแปนพิมพที่ใชพรอมกัน (Keys combined)ที่รวมกับปุม SHIFT, CTRL และ ALT รหัสของแปนพิมพ คือ

แปนพิมพ รหัสSHIFT +CTRL ^ALT %

การระบุแปนพิมพที่ใชพรอมกับปุม SHIFT, CTRL และ ALT ควรจะกดลงหลายแปนพิมพในเวลากดปุม ใหลอมรหัสเหลานี้ดวยวงเล็บ เชน การระบุใหกดปุม SHIFT ขณะที่ E และ C ไดรับการกดลงใช “ + (EC) “ การระบุใหกดปุม SHIFT ขณะที่กดปุม E ตามดวย C ที่ไมใช SHIFT ใช “+EC”การระบุแปนพิมพซํ้ า ใชรูปแบบ (Key number) ตองมีชองวางระหวาง Key กับ number เชน {LEFT 42} หมายถึง กดปุม ลูกศรซาย 42 ครั้ง {h 10} หมายถึงกดปุม H 10 ครั้งหมายเหตุ ไมสามารถใช SendKeys เพื่อใหแปนพิมพไปที่โปรแกรมประยุกต ที่ไมไดรับการออกแบบ สํ าหรับการทํ างานกับ Microsoft Windows และ SendKeys ไมสามารถสง PRINT SCREEN {PRTSC} ไปที่โปรแกรมประยุกตอื่น

ดูเพ่ิมเติมAppAcitve Statement, ฟงกชัน DoEvents

ตัวอยางตัวอยางเปนการใชฟงกชัน Shell เรียกใชโปรแกรมประยุกต Calculator ของ Microsoft Windows คํ าส่ังใชประโยคคํ าส่ัง SendKeys เพื่อสงแปนพิมพ สํ าหรับบวกตัวเลข แลวออกจาก Calculator ประโยคคํ าส่ัง SendKeys ไมมีใหกับ Macintosh

Dim ReturnValue, iReturnValue = Shell("CALC.EXE", 1) ' เรียกใช calculator

Page 122: widebase.net: VBA References VBA References

widebase.net –VBA References

122

AppActivate ReturnValue ' activate calculatorFor i = 1 To 100 ' กํ าหนด loop SendKeys i & "{+}", True ' สง key stroke ไปที่ calculatorNext i ' เพิ่มคาทีละ 1SendKeys "=", True ' หาผลรวมSendKeys "%{F4}", True ' สง ALT+F4 เพื่อปด calculator

SetAttr Statementใชกํ าหนดสารสนเทศของคุณลักษณะของไฟล

ไวยากรณSetAttr pathname, attributeประโยคคํ าส่ัง SetAttr Statement มีไวยากรณ คือ

สวน รายละเอียดpathname บังคับ, เปน expression ของขอความที่ระบุชื่อไฟล - ไดเรคทอรี่ หรือโฟลเดอรและ driveattribute บังคับ, เปนคาคงที่ หรือ expression ของตัวเลขที่เปนผลรวมที่ระบุคุณลักษณะของไฟล

การตั้งคาอากิวเมนต attribute ตั้งคาไดดังนี้

คาคงที่ คา รายละเอียดvbNormal 0 ปกติvbReadOnly 1 อานอยางเดียวvbHidden 2 ซอนvbSystem 4 System file (ไมมีใหกับ Macintosh)vbArchive 32 ไฟลที่เปล่ียนหลังการสํ ารองครั้งสุดทาย (ไมมีใหกับ Macintosh)

หมายเหตุ• คาคงที่เหลานี้เปนระบุโดย Visual Basic for Application ชื่อเหลานี้สามารถใชในคํ าส่ังในการหาคา

ลักษณะการประยุกตถาตั้งคา attribute ขณะที่ไฟลเปดอยูจะเกิด run-time error

ดูเพ่ิมเติมฟงกชัน FileAttr, ฟงกชัน GetAttr

ตัวอยางตัวอยางการใชคํ าส่ัง SetAttr ในกํ าหนดคาคุณลักษณะของไฟล

Page 123: widebase.net: VBA References VBA References

widebase.net –VBA References

123

SetAttr "TESTFILE", vbHidden ' กํ าหนด attribute เปนการซอนSetAttr "TESTFILE", vbHidden + vbReadOnly ' กํ าหนด attribute เปนการซอนและอานอยางเดียว

Sgn Functionสงออกคาเปนประเภทขอมูล Variant ที่ใชแสดงคาเครื่องหมายของตัวเลข

ไวยากรณSgn(number)อากิวเมนต number เปนประเภทขอมูลตัวเลขใดๆ หรือ Expression ที่ใหคาดังกลาว

คาสงออกคา number คา Sgnมากกวาศูนย 1เทากับศูนย 0นอยกวาศูนย -1

ลักษณะการประยุกตคาผลลัพธของฟงกชัน Sgn ใชในการหาเครื่องหมายของคานํ าเขาหรืออากิวเมนต number ดูเพ่ิมเติมฟงกชัน Abs

ตัวอยางDim myVar1, myVar2, myVar3, mySignmyVar1 = 8: myVar2 = -5: myVar3 = 0mySign = Sgn(myVar1) ' ผลลัพธ 1mySign = Sgn(myVar2) ' ผลลัพธ 0mySign = Sgn(myVar3) ' ผลลัพธ -1

Shell Functionใชเรียกโปรแกรมแบบ Executable และสงออกคาเปนประเภทขอมูล Variant (Double) ที่แสดงดวย Task IDของโปรแกรม ถาเรียกได และเปน 0 สํ าหรับกรณีอื่นๆ

ไวยากรณShell(pathname [,windowstyle])ฟงกชัน Shell มีไวยากรณของอากิวเมนต คือ

สวน รายละเอียดpathname บังคับ, เปนประเภทขอมูล Variant ของขอความที่เก็บช่ือโปรแกรมประยุกตที่จะประมวลผล

และตองการอากิวเมนตหรือ command-line โดยใหระบุ ไดเรคทอรี่หรือโฟลเดอรและ drive

Page 124: widebase.net: VBA References VBA References

widebase.net –VBA References

124

สวน รายละเอียดwindowstyle ไมบังคับ, เปนประเภทขอมูล Variant ของขอความที่ตรงกับรูปแบบของ Window ที่โปรแกรม

จะถูกเรียกใช ถาไมกํ าหนด windowstyle โปรแกรมจะเริ่มตนแบบ Minimized

ชื่ออากิวเมนตของ windowstyle มีคาดังนี้

คาคงที่ คา รายละเอียดvbHide 0 ซอน Window และโฟกัสจะถูกสงไปที่ Window ที่ซอนvbNormalFocus 1 Window ไดรับการโฟกัสและแสดงในขนาดและตํ าแหนงปกติvbMinimizedFocus 2 Window แสดงเปน icon ซึ่งไดรับการโฟกัสvbMaximizedFocus 3 Window แสดงแบบใหญที่สุด ซึ่งไดรับการโฟกัสvbNormalNoFocus 4 Window แสดงในขนาดและตํ าแหนงปกติ แต Window ปจจุบันยังคง active

ลักษณะการประยุกตถาฟงกชัน Shell สามารถประมวลผลชื่อไฟลได จะสง Task ID ของโปรแกรมเริ่มตน ซึ่ง Task ID เปนเลขที่ไมซํ้ าเพื่อชี้โปรแกรมที่ทํ างาน ถาฟงกชัน Shell ไมสามารถเริ่มตนชื่อไฟล จะเกิดความผิดพลาด ถาใชฟงกชัน MacID กับถาฟงกชัน Shell ใน Window ของ Macintosh จะเกิดความผิดพลาด

ดูเพ่ิมเติมAppActivate Statement, MacID Statement

ตัวอยางตัวอยางการใชฟงกชัน Shell สํ าหรับการประมวลผลโปรแกรมประยุกตที่กํ าหนดโดยผูใช

' กํ าหนด 1 เปนอากิวเมนตท่ี 2 ท่ีเปดโปรแกรมประยุกตดวยการโฟกัสที่ Window ปกติDim RetValRetVal = Shell("C:\WINDOWS\CALC.EXE", 1)

Sin Functionสงออกคาเปนผลลัพธของคา Sine ของมุม โดยมีประเภทขอมูลเปน Double

ไวยากรณSin(number)อากิวเมนต number เปนคาที่มีประเภทขอมูลตัวเลข หรือ Expression ที่ใหคาดังกลาวตองมีคามุมที่

เปนเรเดียน

Page 125: widebase.net: VBA References VBA References

widebase.net –VBA References

125

ลักษณะการประยุกตฟงกชัน Sin เปนสัดสวนของความยาวดานตรงขามมุมหารดวยความยาวดานตรงขามมุมฉากคาของ Sin อยูระหวาง –1 ถึง 1การแปลงคาองศาใหเปนเรเดียน องศา คูณ π/180การแปลงเรเดียนใหเปนองศา เรเดียน คูณ 180/π

ดูเพ่ิมเติมฟงกชัน Atn, ฟงกชัน Cos, ฟงกชัน Tan

ตัวอยางDim myAngle, myCosecantmyAngle = 1.5 ' กํ าหนดองศาเปน เรเดียนmyCosecant = 1/ Sin(myAngle) ' ค ํานวณคา Cosecant

SLN Functionสงออกคาเปนประเภทขอมูล Double ของคาเสื่อมราคาในทรัพยสินแบบ straight-line

ไวยากรณSLN(cost, salvage, life)อากิวเมนตของฟงกชัน SLN มีความหมาย คือ

สวน รายละเอียดcost บังคับ, เปนประเภทขอมูล Double, ระบุตนทุนเริ่มตนsalvage บังคับ, เปนประเภทขอมูล Double, ระบุราคาซากเมื่อส้ินสุดอายุใชงานlife บังคับ, เปนประเภทขอมูล Double, อายุการใชงานในการคํ านวณ

ลักษณะการประยุกตอากิวเมนต life และ period ตองใชหนวยเดียวกัน เชน ถา life กํ าหนดเปนเดือน period ตองใชหนวยเปนเดือนดวย อากิวเมนตทั้งหมดตองเปนคาบวก

ดูเพ่ิมเติมฟงกชัน DDB, ฟงกชัน FV ฟงกชัน IPmt, ฟงกชัน IRR, ฟงกชัน MIRR, ฟงกชัน NPer, ฟงกชัน NPV, ฟงกชันPmt, ฟงกชัน PPmt, ฟงกชัน PV, ฟงกชัน Rate, ฟงกชัน SYD

ตัวอยางตัวอยางการใชฟงกชัน SLN เพื่อสงออกคาเสื่อมราคาแบบ straight-line depreciation โดยใหคาตนทุนเริ่มตน (InitCost) ราคาซากที่งวดสุดทาย (SalvageVal) และอายุการใชงานของทรัพยสินเปนป (LifeTime)

Page 126: widebase.net: VBA References VBA References

widebase.net –VBA References

126

Dim Fmt, InitCost, SalvageVal, MonthLife, LifeTime, PDeprConst YEARMONTHS = 12 ' จ ํานวนเดือนใน 1 ปFmt = "###,##0.00" ' กํ าหนดรูปแบบการเงินInitCost = InputBox("What's the initial cost of the asset?")SalvageVal = InputBox("What's the asset's value at the end of its useful life?")MonthLife = InputBox("What's the asset's useful life in months?")Do While MonthLife < YEARMONTHS ' Ensure period is >= 1 year. MsgBox "Asset life must be a year or more." MonthLife = InputBox("What's the asset's useful life in months?")LoopLifeTime = MonthLife / YEARMONTHS ' แปลงเดือนเปนปIf LifeTime <> Int(MonthLife / YEARMONTHS) Then LifeTime = Int(LifeTime + 1) ' ปรบัคาขึ้นเปนปท่ีใกลท่ีสุดEnd IfPDepr = SLN(InitCost, SalvageVal, LifeTime)MsgBox "The depreciation is " & Format(PDepr, Fmt) & " per year."

Space Function, Space$ Functionฟงกชัน Space สงออกคาเปนประเภทขอมูล Variant (String) โดยเปนชองวางตามที่ระบุฟงกชัน Space$ สงออกคาเปนประเภทขอมูล String โดยเปนชองวางตามที่ระบุ

ไวยยากรณSpace(number)Space$(number)อากิวเมนต number เปนคาบังคับ เพื่อระบุจํ านวนชองวางที่ตองการในขอความ

ลักษณะการประยุกตฟงกชัน Space และฟงกชัน Space$ คือ การกํ าหนดรูปแบบสํ าหรับผลลัพธ และขจัดขอมูลใน fixed-length string

ดูเพ่ิมเติมฟงกชัน Spc, ฟงกชัน String, ฟงกชัน String$

ตัวอยางฟงกชัน Space ใชในการสงออกขอความที่ประกอบดวยจํ านวนชองวางที่ระบุ

Dim MyString' สงออกขอความที่เปน 10 ชองวางMyString = Space(10)

' เพิม่ 10 ชองวางระหวาง 2 ขอความMyString = "Hello" & Space(10) & "World"

Page 127: widebase.net: VBA References VBA References

widebase.net –VBA References

127

Spc Functionใชทํ างานรวมกับคํ าส่ัง Print# Statement หรือเมธอด Print เพื่อกํ าหนดตํ าแหนงผลลัพธ

ไวยากรณSpc(n)อากิวเมนต n เปนตัวเลขของชองวางที่ตองการเพิ่มเขาไปกอนการแสดงบนจอภาพหรือการพิมพ

expression ตอไปในรายการ

ลักษณะการประยุกตถา n นอยกวาความกวางของแถว ตํ าแหนงการพิมพตอไปจะอยูตอจากจํ านวนชองวางที่พิมพ ถา n มากกวาความกวางของแถว ฟงกชัน Spc จะคํ านวณตํ าแหนงการพิมพตอไปดวยสูตร

currentprintposition + (n Mod width)

เชน ถาตํ าแหนงการพิมพปจจุบัน คือ 24 ความกวางแถวของผลลัพธ คือ 80 และกํ าหนด Spc(90) ตํ าแหนงการพิมพตอไปเริ่มที่ 34 (ตํ าแหนงการพิมพปจจุบัน + ผลหารของ 90/80) ถาความแตกตางระหวางตํ าแหนงการพิมพปจจุบันและความกวางแถวของผลลัพธนอยกวา n (หรือ n Mod width) ฟงกชัน Spc จะขามไปที่จุดเริ่มตนของแถวใหมและสรางชองงาวเทากับ n- (width – currentprintposition)ถาใชเมธอด Print กับ Font แบบชองวางตามสัดสวน ความกวางของชองวางที่พิมพที่ใชฟงกชัน Spc จะเทากับคาเฉลี่ยความกวางของตัวอักษรทั้งในหนากระดาษที่เลือกใช Font แตจะไมมีความสัมพันธระหวางจํ านวนตัวอักษรที่พิมพกับจํ านวนของคอลัมนที่ใชความกวางคงที่ซึ่งมีตัวอักษรนั้น เชน อักษรตัวใหญ W ใชที่มากกวาความกวางคงที่และอักษรตัวเล็ก i ใชที่นอยความกวางคงที่

ดูเพ่ิมเติมMod (Operator), Print# Statement, เมธอด Print, ฟงกชัน Space, ฟงกชัน Space$, ฟงกชัน Tab, Width#Statement

ตัวอยางตัวอยางการใชฟงกชัน Spc กํ าหนดตํ าแหนงผลลัพธของไฟลและใน Immediate window

' ฟงกชัน Spc สามารถใชกับคํ าส่ัง Print # statementOpen "TESTFILE" For Output As #1 ' เปดไฟลPrint #1, "10 spaces between here"; Spc(10); "and here."Close #1 ' ปดไฟล.

การใชเมธอด Print เพื่อพิมพผลลัพธใน immediate window ดวยชองวาง 30 ชอง

Debug.Print Spc(30); "Thirty spaces later..."

Page 128: widebase.net: VBA References VBA References

widebase.net –VBA References

128

Sqr Functionสงออกคาเปนผลลัพธของรากที่ 2 โดยมีประเภทขอมูลเปน Double

ไวยากรณSqr(number)อากิวเมนต number เปนคาที่มีประเภทขอมูลตัวเลข หรือ Expression ที่ใหคาดังกลาวซึ่งจะตองมีคา

มากกวาหรือเทากับศูนย

ตัวอยางDim mySqrmySqr = Sqr(4) ' ผลลัพธ คือ 2mySqr = Sqr(34) ' ผลลัพธ คือ 5.8309518948453mySqr = Sqr(0) ' ผลลัพธ คือ 0mySqr = Sqr(-4) ' จะเกิดความผิดพลาดแบบ run-time error

Str Function, Str$ Functionฟงกชัน Str คาที่สงออกมาเปนประเภทขอมูล Variant (String) ที่แสดงในรูปตัวเลขฟงกชัน Str$ คาที่สงออกมาเปนประเภทขอมูล String ที่แสดงในรูปตัวเลข

ไวยากรณStr(number)Str$(number)อากิวเมนต number เปนขอประเภทตัวเลข Long ที่มีคาตัวเลขจริง

ลักษณะการประยุกตเมื่อตัวเลขไดรับการแปลงใหเปนขอความจะมีการเติมชองวางดานหนาสํ าหรับเครื่องหมายหนาตัวเลข ถาnumber เปนคาบวกจะเปนชองวางโดยรับรูวาเปนเครื่องหมายบวกการใชฟงกชัน Format เปนการแปลงคาตัวเลขที่ตองการใหเปนรูปแบบที่ตองการ เชน วันที่ เวลา คาการเงิน หรือรูปแบบที่กํ าหนดเอง แตแตกตางจากฟงกชัน Str โดยไมมีชองวางดานหนาสํ าหรับเครื่องหมายหนาตัวเลขหมายเหตุ

• ฟงกชัน Str จะรับทราบเฉพาะเครื่องหมายจุลภาคสํ าหรับการใชเปนเครื่องหมายทศนิยม• ฟงกชัน CStr ใชในการแปลงตัวเลขเปนขอความ

ดูเพ่ิมเติมฟงกชัน Format, ฟงกชัน Val

ตัวอยางตัวอยางการใชฟงกชัน Str ในการสงออกขอความที่แสดงคาตัวเลข

Page 129: widebase.net: VBA References VBA References

widebase.net –VBA References

129

Dim MyStringMyString = Str(459) ' สงออกคา " 459"MyString = Str(-459.65) ' สงออกคา "-459.65"MyString = Str(459.001) ' สงออกคา " 459.001"

StrComp Functionคาที่สงออกมาเปนประเภทขอมูล Variant (String) ที่แสดงผลลัพธจากการเปรียบเทียบขอความ

ไวยากรณStrComp(sting1, string2[,compare])อากิวเมนตของฟงกชัน StrComp มีขอกํ าหนด คือ

สวน รายละเอียดstring1 บังคับ, โดย Expression ของขอความstring2 บังคับ, โดย Expression ของขอความcompare ไมบังคับ, สํ าหรับระบุวิธีการเปรียบเทียบ อากิวเมนต compare สามารถไมระบุ หรือกํ าหนด

เปน 0,1 หรือ 2 การกํ าหนดเปน 0 เปนกํ าหนดการคนหาแบบไบนารี ระบุเปน 1 กํ าหนดการคนหาแบบขอความที่ไมพิจารณาอักษรตัวเล็กหรือใหญ ระบุเปน 2 สํ าหรับ MicrosoftAccess โดยเฉพาะ เปนคนหาตามสารสนเทศที่มีอยูในฐานขอมูล ถา compare เปนคาวางจะปรากฏขอผิดพลาด ถาcompare ไมไดระบุ ฟงกชันจะคนหาวิธีการเปรียบเทียบ

คาสงออกถา คาสงออกของ StrCompstring1 นอยกวา string2 -1string1 เทากับ string2 0string1 มากกวา string2 1string1 หรือ string2 เปนคาวาง คาวาง (Null)

ดูเพ่ิมเติมฟงกชัน InStr, Option Compare Statement

ตัวอยางฟงกชัน StrComp ใชในการเปรียบเทียบระหวาง 2 ขอความ

Dim myStr1, myStr2, myComparemyStr1 = "ABCD"myStr2 = "abcd"myCompare = StrComp(myStr1, myStr2, 1) ' สงออกคาเปน 0myCompare = StrComp(myStr1, myStr2, 0) ' สงออกคาเปน –1myCompare = StrComp(myStr2, myStr1) ' สงออกคาเปน 1

Page 130: widebase.net: VBA References VBA References

widebase.net –VBA References

130

StrConv Functionคาที่สงออกมาเปนประเภทขอมูล Variant (String) ที่แปลงลักษณะตามที่ระบุ

ไวยากรณStrConv(string, conversion)อากิวเมนตของฟงกชัน StrConv มีไวยากรณ คือ

สวน รายละเอียดstring บังคับ, เปน Expression แบบขอความที่ตองแปลงconversion บังคับ, เปนคาคงที่เพื่อระบุวันแรกของสัปดาห ถาไมกํ าหนด จะใชวันอาทิตยเปนวันแรกของ

สัปดาห

การตั้งคาคาอากิวเมนต conversion กํ าหนดคาไดเปน

คาคงที่ คา รายละเอียดvbUpperCase 1 แปลงขอความใหเปนอักษรตัวใหญvbLowerCase 2 แปลงขอความใหเปนอักษรตัวเล็กvbPrpoerCase 3 แปลงขอความใหอักษรตัวแรกของทุกคํ าในขอความเปนอักษรตัวใหญvbWide 4 แปลงอักษรตัวแคบ (single-byte) ในขอความเปนตัวกวาง (double-byte)vbNorrow 8 แปลงอักษรตัวกวาง (double-byte) ในขอความเปนตัวแคบ (single-byte)vbKatakana 16 แปลงตัวอักษร Hiragana ในขอความเปนตัวอักษร KatakanavbHiragana 32 แปลงตัวอักษร Katakana ในขอความเปนตัวอักษร HiraganavbUnicode 64 แปลงขอความเปน Unicode โดยใชคาเริ่มตน code page ของระบบvbFormUnicode 128 แปลงเปนขอความจาก Unicode โดยใชคาเริ่มตน code page ของระบบ

ดูเพ่ิมเติมฟงกชัน Chr, ฟงกชัน Chr$, ประเภทขอมูล String

String Function, String$ Functionฟงกชัน String สงออกคาเปนประเภทขอมูล Variant (String) โดยแสดงอักษรซํ้ าตามที่ระบุฟงกชัน Space$ สงออกคาเปนประเภทขอมูล String โดยแสดงอักษรซํ้ าตามที่ระบุ

ไวยากรณString(number, character)

Page 131: widebase.net: VBA References VBA References

widebase.net –VBA References

131

String$(number, character)อากิวเมนตของฟงกชัน String มีไวยากรณ คือ

สวน รายละเอียดnumber บังคับ, ใชตัวเลขประเภท Long ซึ่งเปนความยาวของขอความ ถา number เปนคาวาง

คาที่สงออกเปนคาวางcharacter บังคับ, ใชประเภทขอมูล variant ซึ่งเปนรหัสตัวอักษรเพื่อระบุตัวอักษร หรือ Expression

ของขอความ โดยที่อักษรตัวแรกไดรับการสรางเปนขอความที่สงออกมา ถา characterเปนคาวาง คาที่สงออกเปนคาวาง

ลักษณะการประยุกตถาการกํ าหนดหมายเลขของตัวอักษรมากกวา 255 ฟงกชัน String จะแปลงหมายเลขใหอยูในรหัสตัวอักษรโดยการใชสูตรคํ านวณ

character Mod 256

ดูเพ่ิมเติมMod (Operator), ฟงกชัน Space, ฟงกชัน Space$, ประเภทขอมูล String

ตัวอยางฟงกชัน String ใชในการแสดงตัวอักษรซํ้ าตามความยาวที่ตองการ

Dim myStringmyString = String(5, "*") ' สงออกคา "*****"myString = String(8, 42) ' สงออกคา "*******"myString = String(10, "ABC") ' สงออกคา "AAAAAAAAAA"

Switch Functionสํ าหรับการหาคาจากรายการ expression และสงออกคาเปนประเภทขอมูล Variant หรือ expression ที่ตรงกับ expression แรกจากรายการที่มีคาเปน True

ไวยากรณSwitch(expr-1,value-1[,expr-2,value-2,…[,expr-n,value-n]])ฟงกชัน Switch มีไวยากรณของสวน คือ

สวน รายละเอียดexpr บังคับ, เปน expression ของ Variant ที่ตองการหาคาvalue บังคับ, เปน คา หรือ expression ที่สงคาออกถา expression ที่เกี่ยวกันมีคาเปน True

Page 132: widebase.net: VBA References VBA References

widebase.net –VBA References

132

ลักษณะการประยุกตรายการอากิวเมนตของฟงกชัน Switch ประกอบดวยคูของอากิวเมนต expr (expression) และ value โดยการหาคา expression จากซายไปขวา และสงออกคาที่คูกันของ expression แรกที่มีคาเปน True ถามีอากิวเมนตที่ไมมีคู จะปรากฏความผิดพลาด run-time error เชน ถา expr-1 เปน True ฟงกชัน Switch จะสงออกคาของ value-1 ถา expr-1 เปน False แต expr-2 เปน True ฟงกชัน Switch จะสงออกคาของ value-2 และตอๆไปฟงกชัน Switch สงออกคาเปนคาวาง (Null) ถา• ไมมีคาใดที่มี expression เปน True• Expression แรกที่พบตรงคาที่เปนคาวางฟงกชัน Switch หาคาจาก expression ทั้งหมด แตสงคาออกเพียงคาเดียว ผลดังกลาวทํ าใหเกิดผลกระทบขางเคียง เชน ถาการหาผลลัพธจาก expression ในคาความผิดพลาดจากการหารดวยศูนย จะเกิดขอความของความผิดพลาด

ดูเพ่ิมเติมฟงกชัน Choose, ฟงกชัน IIf, Select Case Statement

วิธีการประยุกตใน Accessฟงกชัน Switch สามารถใชในตัว control บนฟอรมหรือรายงานใน Microsoft Access เชน การใชฟงกชัน Switch กํ าหนดคาของตัว control เพื่อแสดคาตามคาของฟลดอื่น ใหตั้งคาคุณสมบัติ ControlSource ของตัว control ดวย expression ของฟงกชัน Switchตามตัวอยางตอไปนี้ ฟงกชัน Switch สงออกขอความที่เปนชื่อของ Shipper ตามคาที่หาไดจากฟลด Fright ถาคาของฟลด Fright นอยกวา 25 ฟงกชัน Switch สงออกคาเปน “Speedy” ถามากกวาหรือเทากับ 25 แตนอยกวา 50 ฟงกชัน Switch สงออกคาเปน “United” และถามากกวา 50 ฟงกชัน Switch สงออกคาเปน “Federal”

=Switch([Freight] < 25, "Speedy", ([Freight] >= 25 _ and [Freight] <= 50), "United", [Freight] > 50, "Federal")

หมายเหตุ ในโมดูล Visual Basic สามารถใชประโยคคํ าส่ัง Select Case เต็มรูปแบบในการสงคาออกจากกลุมของตัวเลือก

ตัวอยางการใชฟงกชัน Switch ในการสงออกชื่อของภาษาที่ expression มีคาตรงกับช่ือเมือง

Function MatchUp (CityName As String) Matchup = Switch(CityName = "London", "English", CityName _ = "Rome", "Italian", CityName = "Paris", "French")End Function

Page 133: widebase.net: VBA References VBA References

widebase.net –VBA References

133

ตัวอยางการประยุกตใน Accessตัวอยางการใชฟงกชัน Switch ในการหาคาที่เหมาะสมของภาษาซึ่งระบุดวยชื่อเมืองตามคาของฟลด ShipCountry และ ShipCity ใน Table ชื่อ Orders โดยสามารถสรางตัว control แบบคํ านวณบนฟอรม สํ าหรับ expression ที่แสดงเปนแบบหลายบรรทัด สามารถปอนเปนบรรทัดเดียวได

= Switch([ShipCity] = "Madrid", "Spanish", [ShipCity] = "Berlin", "German", _ [ShipCity] = "Torino", "Italian", [ShipCountry] = "France", "French", True, "English")

ถาเมือง คือ Madrid ฟงกชัน Switch จะสงออกคาเปน “Spanish” ถาเปน “Berlin” คาที่สงออก คือ “German”และตอๆไป ถาไมตรงกับชื่อเมืองในรายการ แต ShipCountry คือ France คาสงออก คือ “French” ถาไมตรงกับชื่อเมืองในรายการ ฟงกชัน Switch จะสงคาออกเปน “English”

SYD Functionสงออกคาเปนประเภทขอมูล Double ที่ระบุคาเสื่อมราคาของทรัพยสินแบบ sum-of-year ในงวดที่ระบุ

ไวยากรณSYD(cost, salvage, life, period)อากิวเมนตของฟงกชัน SYD มีความหมาย คือ

สวน รายละเอียดcost บังคับ, เปนประเภทขอมูล Double, ระบุตนทุนเริ่มตนsalvage บังคับ, เปนประเภทขอมูล Double, ระบุราคาซากเมื่อส้ินสุดอายุใชงานlife บังคับ, เปนประเภทขอมูล Double, อายุการใชงานในการคํ านวณperiod บังคับ, เปนประเภทขอมูล Double, ระบุจํ านวนงวดในการคํ านวณคาเสื่อมราคา

ลักษณะการประยุกตอากิวเมนต life และ period ตองใชหนวยเดียวกัน เชน ถา life กํ าหนดเปนเดือน period ตองใชหนวยเปนเดือนดวย อากิวเมนตทั้งหมดตองเปนคาบวก

ดูเพ่ิมเติมฟงกชัน DDB, ฟงกชัน FV ฟงกชัน IPmt, ฟงกชัน IRR, ฟงกชัน MIRR, ฟงกชัน NPer, ฟงกชัน NPV, ฟงกชันPmt, ฟงกชัน PPmt, ฟงกชัน PV, ฟงกชัน Rate, ฟงกชัน SLN

ตัวอยางตัวอยางการใชฟงกชัน SYD เพื่อสงออกคาเสื่อมราคาของสินทรัพยในงวดที่ระบุ โดยใหคาตนทุนเริ่มตน (InitCost) ราคาซากที่งวดสุดทาย (SalvageVal) อายุการใชงานของทรัพยสินเปนป (LifeTime) ใหคํ านวณงวดที่ตองการทราบคาเสื่อมราคา (PDepr).

Page 134: widebase.net: VBA References VBA References

widebase.net –VBA References

134

Dim Fmt, InitCost, SalvageVal, MonthLife, LifeTime, DepYear, PDeprConst YEARMONTHS = 12 ' จ ํานวนเดือนใน 1 ปFmt = "###,##0.00" ' กํ าหนดรูปแบบการเงินInitCost = InputBox("What's the initial cost of the asset?")SalvageVal = InputBox("What's the asset's value at the end of its life?")MonthLife = InputBox("What's the asset's useful life in months?")Do While MonthLife < YEARMONTHS ' Ensure period is >= 1 year. MsgBox "Asset life must be a year or more." MonthLife = InputBox("What's the asset's useful life in months?")LoopLifeTime = MonthLife / YEARMONTHS ' แปลงเดือนเปนปIf LifeTime <> Int(MonthLife / YEARMONTHS) Then LifeTime = Int(LifeTime + 1) ' ปรบัคาขึ้นเปนปท่ีใกลท่ีสุดEnd IfDepYear = CInt(InputBox("For which year do you want depreciation?"))Do While DepYear < 1 Or DepYear > LifeTime MsgBox "You must enter at least 1 but not more than " & LifeTime DepYear = CInt(InputBox("For what year do you want depreciation?"))LoopPDepr = SYD(InitCost, SalvageVal, LifeTime, DepYear)MsgBox "The depreciation for year " & DepYear & " is " & Format(PDepr, Fmt) & "."

Tab Functionใชทํ างานรวมกับคํ าส่ัง Print# Statement หรือเมธอด Print เพื่อกํ าหนดตํ าแหนงผลลัพธ

ไวยากรณTab[(n)]อากิวเมนต n เปนอากิวเมนต ไมบังคับ ซึ่งเปนจํ านวนคอลัมนที่เคลื่อนไปกอนการแสดงบนจอภาพ

หรือการพิมพ expression ตอไปในรายการ ถาไมกํ าหนด ฟงกชัน Tab จะแทรกตํ าแหนงไปที่จุดเริ่มตนของเขตการพิมพตอไป และยินยอมให Tab ใชแทนเครื่องหมายจุลภาคในกรณีที่เครื่องหมายจุลภาคนํ าไปใชเปนจุดทศนิยม

ลักษณะการประยุกตถาตํ าแหนงการพิมพปจจุบันบนแถวที่กํ าลังพิมพใหญกวา n ฟงกชัน Tab จะขามไปที่คอลัมนที่ n ของแถวตอไป ถา n นอยกวา 1 ฟงกชัน Tab จะไปที่คอลัมน 1 ถา n มากกวาความกวางของแถว ฟงกชัน Tab จะคํ านวณตํ าแหนงการพิมพตอไปโดยใชสูตร

n Mod width

เชน ถา width เปน 80และกํ าหนด Tab(90) การพิมพตอไปจะเริ่มที่คอลัมนที่ 10 (ผลหารของ 90/80) ถา nนอยกวาตํ าแหนงการพิมพปจจุบัน การพิมพจะเริ่มแถวใหมที่ตํ าแหนงการพิมพที่คํ านวณได ถาการคํ านวณตํ าแหนงใหญกวาตํ าแหนงการพิมพปจจุบัน การพิมพจะเริ่มที่ตํ าแหนงที่คํ านวณไดบนแถวเดียวกันดานซายสุดของตํ าแหนงบนแถวผลลัพธเปน 1 เสมอ เมื่อใชคํ าส่ัง Print# Statement ในการพิมพเปนไฟล และดานขวาสุดเปนความกวางของไฟลผลลัพธ ซึ่งการกํ าหนดคาใชคํ าส่ัง Width# Statementถาใชฟงกชัน Tab ดวยเมธอด Print พื้นที่การพิมพจะถูกแบงใหเหมือน ความกวางคอลัมนคงที่ ความกวางของแตละคอลัมนเปนคาเฉลี่ยความกวางของตัวอักษรทั้งในหนากระดาษที่เลือกใช Font แตจะไมมีความสัมพันธ

Page 135: widebase.net: VBA References VBA References

widebase.net –VBA References

135

ระหวางจํ านวนตัวอักษรที่พิมพกับจํ านวนของคอลัมนที่ใชความกวางคงที่ซึ่งมีตัวอักษรนั้น เชน อักษรตัวใหญ W ใชที่มากกวาความกวางคงที่และอักษรตัวเล็ก i ใชที่นอยความกวางคงที่

ดูเพ่ิมเติมMod (Operator), Print# Statement, เมธอด Print, ฟงกชัน Space, ฟงกชัน Space$, ฟงกชัน Spc, Width#Statement

ตัวอยางตัวอยางการใชฟงกชัน Tab กํ าหนดตํ าแหนงผลลัพธของไฟลและใน immediate window

' ฟงกชัน Spc สามารถใชกับคํ าส่ัง Print # statementOpen "TESTFILE" For Output As #1 ' เปดไฟล' พมิพคํ าที่ 2 ท่ีคอลัมน 20Print #1, "Hello"; Tab(20); "World."' ถาละอากวิเมนต เคอรเซอรจะยายไปที่พื้นท่ีการพิมพตอไปPrint #1, "Hello"; Tab; "World"Close #1 ' ปดไฟล

การใชเมธอด Print เพื่อพิมพผลลัพธใน immediate window โดยเริ่มตนที่คอลัมนที่ 10Debug.Print Tab(10); "10 columns from start."

Tan Functionสงออกคาเปนผลลัพธของคา Tangent ของมุม โดยมีประเภทขอมูลเปน Double

ไวยากรณTan(number)อากิวเมนต number เปนคาที่มีประเภทขอมูลตัวเลข หรือ Expression ที่ใหคาดังกลาวซึ่งตองเปน

ของมุมที่เปนเรเดียน

ลักษณะการประยุกตTan เปนสัดสวนของความยาวดานตรงขามมุมหารดวยความยาวดานประชิดมุมการแปลงคาองศาใหเปนเรเดียน องศา คูณ π/180การแปลงเรเดียนใหเปนองศา เรเดียน คูณ 180/π

ดูเพ่ิมเติมฟงกชัน Atn, ฟงกชัน Cos, ฟงกชัน Sin

ตัวอยางDim myAngle, myCotangentmyAngle = 1.5 ' กํ าหนดองศาเปน เรเดียนmyCotangent = 1/ Tan(myAngle) ' ค ํานวณคา Cotangent

Page 136: widebase.net: VBA References VBA References

widebase.net –VBA References

136

Time Function, Time$ Functionฟงกชัน Time คาที่สงออกเปนประเภทขอมูล Variant (Date) โดยเปนคาเวลาตามนาฬิกาของระบบฟงกชัน Time$ คาที่สงออกเปนประเภทขอมูล String โดยเปนคาเวลาตามนาฬิกาของระบบ

ไวยากรณTimeTime$

ดูเพ่ิมเติมฟงกชัน Date, ฟงกชัน Timer

วิธีการประยุกตใน Accessการแทรกฟงกชัน Time เพื่อแสดงคาเวลาปจจุบันจากนาฬิกาของเครื่องในฟอรมและรายงานสามารถทํ าไดโดยคลิกที่คํ าส่ัง Date and Time บนเมนู Insert ซึ่งคํ าส่ังนี้จะสรางตัว Control แบบ Text box บนฟอรมหรือรายงาน โดยตั้งคาคุณสมบัติ ControlSource เปนฟงกชัน Timeการประยุกตกับคิวรี่ หรือมาโครใหเพิ่มวงเล็บตอจากฟงกชัน เปน Time() ตัวอยางDim myTimemyTime = Time ' กํ าหนดคาเวลาปจจุบันจากนาฬิกาของเครื่อง

ตัวอยางการประยุกตใน Accessการกํ าหนดฟงกชัน Time ที่คุณสมบัติ ControlSource ใหกํ าหนดในรูปแบบเปน=Time ()

Time Statementตั้งคาเวลาของระบบ

ไวยากรณTime = timetime เปนอากิวเมนตบังคับ และเปน numeric expression, string expression หรือลักษณะรวมอื่น

ที่สามารถนํ าเสนอเวลา

ลักษณะการประยุกตคา time เปนขอความ Time พยายามแปลงอากิวเมนต time ใหเปนเวลา ดวยการใชตัวแบงเวลา ตามที่ระบุสํ าหรับระบบ ถาไมสามารถแปลงเปนเวลาจริงได จะเกิดความผิดพลาด

Page 137: widebase.net: VBA References VBA References

widebase.net –VBA References

137

ดูเพ่ิมเติมฟงกชัน Date, Date Statement, ฟงกชัน Time

ตัวอยางตัวอยางการใชประโยคคํ าส่ัง Time เพื่อตั้งเวลาของเครื่องคอมพิวเตอร ตามเวลาที่ผูใชกํ าหนด

Dim MytimeMyTime= # 4:35:17 pm # ' กํ าหนดเวลาTime =MyTime ' ตัง้คาเวลาของเวลาตาม MyTime

Timer Functionคาที่สงออกเปนประเภทขอมูล Single โดยเปนจํ านวนวินาทีที่เลยเที่ยงคืน

ไวยากรณTimer

ดูเพ่ิมเติมRandomize Statement, ฟงกชัน Time

ตัวอยางตัวอยางการใชฟงกชัน Timer หยุดโปรแกรมประยุกต ตัวอยางคํ าส่ังไดใช DoEvents เพื่อใหกระบวนการอื่น ทํ างานไดระหวางการหยุด

Dim PauseTime, Start, Finish, TotalTimeIf (MsgBox("กดปุม Yes เพื่อหยุด 5 วินาที", 4)) = vbYes Then PauseTime = 5 ' ตัง้คาชวงเวลา Start = Timer ' ตัง้คาเวลาเริ่มตน Do While Timer < Start + PauseTime DoEvents ' ใหกระบวนการอื่นทํ างาน Loop Finish = Timer ' ตัง้คาเวลาสิ้นสุด TotalTime = Finish - Start MsgBox "Pause for " & TotalTime & " seconds"Else EndEnd If

ตัวอยางการประยุกตใน Accessตัวอยางการใชฟงกชัน Timer หาระยะเวลาการทํ างานของคิวรี่

Sub QueryTimer(strQueryName As String) Dim sngStart As Single, sngEnd As Single Dim sngElapsed As Single sngStart = Timer DoCmd.OpenQuery strQueryName, acViewNormal sngEnd = Timer sngElapsed = Format(sngEnd - sngStart, "Fixed")

Page 138: widebase.net: VBA References VBA References

widebase.net –VBA References

138

MsgBox ("ควิรี ่" & strQueryName & " ใชเวลา " & sngElapsed & " วินาที ในการทํ างาน")End Sub

TimeSerial Functionคาที่สงออกเปนประเภท Variant (Date) โดยเปนคาของเวลา จากการกํ าหนดชั่วโมง, นาที และวินาที

ไวยากรณTimeSerial(Hour, minute, second)อากิวเมนตของฟงกชัน TimeSerial มีขอกํ าหนด คือ

สวน รายละเอียดHour บังคับ, เปนคาจํ านวนเต็ม (Integer) ซึ่งจะตองมีคาระหวาง 0 (12:00 AM) ถึง 23 (11:00 PM)

รวมถึง Expression ที่ใหคาดังกลาวminute บังคับ, เปนคาจํ านวนเต็ม (Integer) รวมถึง Expression ที่ใหคาดังกลาวsecond บังคับ, เปนคาจํ านวนเต็ม (Integer) รวมถึง Expression ที่ใหคาดังกลาว

ลักษณะการประยุกตฟงกชัน TimeSerial ใชในการเจาะจงเวลา โดยคาของอากิวเมนตจะยอมรับชวงของตามสวน เชน hour ยอมรับคา 0 – 23, minute และ second ยอมรับคา 0 – 59 ซึ่งการแสดงคาของอากิวเมนตสามารถใช Expression ที่ใหผลลัพธเปนขอมูลตัวเลข เชน การหาคา 15 นาทีกอน (-15), คาชั่วโมง 6 กอนเที่ยง (12 – 6) หรือ 5:45:0 AMTimeSerial(12 – 6, – 15, 0)

ดูเพ่ิมเติมฟงกชัน DateSerial, ฟงกชัน DateValue, ฟงกชัน Hour, ฟงกชัน Minute, ฟงกชัน Second, ฟงกชัน

TimeValue

ตัวอยางDim myTimemyTime = TimeSerial(16, 35, 17) ' ผลลัพธคือ myTime = 4:35:17 PM

TimeValue Functionคาที่สงออกเปนประเภท Variant (Date) และเปนคาของเวลา

ไวยากรณTimeValue(time)

Page 139: widebase.net: VBA References VBA References

widebase.net –VBA References

139

อากิวเมนต time ตามปกติมักจะเปน Expression ที่เปนตัวอักษร โดยเริ่ม 0:00:00 (12:00:00 AM)ถึง 23:59:59 (11:59:59 PM) ซึ่งคาเวลาที่แสดงออกมาจะตองอยูชวงที่กํ าหนด ถา time เปนคาวาง (Null) ผลลัพธจะเปนคาวาง

ลักษณะการประยุกตการปอนคาของอากิวเมนต time สามารถปอนคาไดทั้งระบบ 12 ชั่วโมง และ 24 ชั่วโมง เชน “6:36:15 PM” หรือ “18:36:15” ซึ่งอากิวเมนต time ยอมรับคาทั้งสอง

ดูเพ่ิมเติมฟงกชัน DateSerial, ฟงกชัน DateValue, ฟงกชัน Hour, ฟงกชัน Minute, ฟงกชัน Now, ฟงกชัน Second,ฟงกชัน TimeSerial

ตัวอยางฟงกชัน TimeValue นํ ามาใชในการแปลงขอความที่อยูในรูปแบบเวลา ใหเปนคาเวลาDim myTimemyTime = TimeValue("6:36:15 PM") ' ผลลพัธเปนเวลา

Trim, Trim$ Functionดู LTrim, LTrim$ Function

TypeName Functionสงออกคาเปนประเภทขอมูล String ที่แสดงสารสนเทศของตัวแปร

ไวยากรณTypeName(varname)อากิวเมนต varname ตองการคาตัวแปรใดๆยกเวน ตัวแปรที่ผูใชกํ าหนดประเภทขอมูลใดๆ

ลักษณะการประยุกตขอความที่สงออกมาโดยฟงกชัน TypeName มีรายการ คือ

ขอความสงออก ตัวแปรobject type ออบเจคที่มีประเภทขอมูลออบเจคByte Byte value (คาไบต)Integer Integer (จํ านวนเต็ม)Long Long integer (จํ านวนเต็มแบบ Long)Single Single-precision floating-point number (จํ านวนจริงแบบ Single)

Page 140: widebase.net: VBA References VBA References

widebase.net –VBA References

140

ขอความสงออก ตัวแปรDouble Double-precision floating-point number (จํ านวนจริงแบบ Double)Currency Currency value (คาการเงิน)Decimal Decimal value (คาทศนิยม)Date Date value (คาวันที่)String String (ขอความ)Boolean Boolean value (คาทางตรรกะ)Error An error value (คาผิดพลาด)Empty Uninitialized (ยังไมไดกํ าหนดคา)Null No valid data (คาวาง)Object ออบเจคUnknown เปนออบเจคที่ไมทราบประเภทNothing ตัวแปรออบเจคที่ไมมีการอางถึงออบเจค

ถา varname สงออกคาเปนขอความที่เปนมีอยูในรายการจะสงคา ขอความที่มีวงเล็บเปลา เชน ถา varnameสงคาเปน array ของเลขจํ านวนเต็ม (Integer) ฟงกชัน TypeName จะสงคาเปน “Integer()”

ดูเพ่ิมเติมฟงกชัน IsArray, ฟงกชัน IsDate, ฟงกชัน IsEmpty, ฟงกชัน IsError, ฟงกชัน IsMissing, ฟงกชัน IsNull,ฟงกชัน IsNumeric, ฟงกชัน IsObject, ฟงกชัน TypeName, ฟงกชัน VarType, ประเภทขอมูล Variant

ตัวอยางตัวอยางฟงกชัน TypeName ในการสงออกสารสนเทศของตัวแปร

' ประกาศตัวแปรDim NullVar, MyType, StrVar As String, IntVar As Integer, CurVar As CurrencyDim ArrayVar (1 To 5) As Integer

NullVar = Null ' กํ าหนดคาเปน NullMyType = TypeName(StrVar) ' สงออกคาเปน "String"MyType = TypeName(IntVar) ' สงออกคาเปน "Integer"

ตัวอยางประยุกตใน Accessตัวอยางฟงกชันที่สรางตัวแปรออบเจคหลายตัวและสงผานไปยังฟงกชัน TypeName

Sub ObjectTypes() Dim dbs As Database, tdf As TableDef Dim fld As Field Set dbs = CurrentDb ' เรยีกฐานขอมูลปจจุบัน Set tdf = dbs.TableDefs("Orders") ' สงออกออบเจค TableDef ท่ีชี้ไปยัง table ชื่อ Orders Set fld = tdf.Fields("OrderDate") ' สงออกฟลดของออบเจคที่ชไปยังฟลด OrderDate field ' ส่ังพมิพคาที่สงออกโดยฟงกชัน TypeName สํ าหรับแตละออบเจค Debug.Print TypeName(dbs)

Page 141: widebase.net: VBA References VBA References

widebase.net –VBA References

141

Debug.Print TypeName(tdf) Debug.Print TypeName(fld)End Sub

Type Conversion Functionแตละฟงกชันใชในการแปลงคาใหเปนประเภทขอมูลที่ตองการ

ไวยากรณCByte(expression)CCur(expression)CDate(expression)CDbl(expression)CDec(expression)CInt(expression)CLng(expression)CSng(expression)CStr(expression)CVar(expression)อากิวเมนต expression ตองเปน expression ของขอความหรือคาตัวเลข

ประเภทขอมูลที่สงออกการหาประเภทขอมูลที่สงออกมาโดยแตละฟงกชัน

ฟงกชัน ประเภทขอมูลที่สงออก

ชวงของอากิวเมนต Expression

CBool Boolean expression ที่เปนขอความหรือตัวเลขที่มีจริงCByte Byte 0 to 255CCur Currency -922,337,203,685,477.5808 ถึง 922,337,203,685,477.5807CDate Date expression ที่เปนวันที่ที่มีจริงCDbl Double คาลบ -1.79769313486231E308 ถึง -4.94065645841247E-324

คาบวก 4.94065645841247E-324 ถึง 1.79769313486232E308CDec Decimal รูปแบบไมมีทศนิยม +/-79,228,162,514,264,337,593,543,950,335

รูปแบบทศนิยม 28 ตํ าแหนง +/-7.9228162514264337593543950335คานอยที่สุดที่ไมเปนศูนย คือ 0.0000000000000000000000000001

CInt Integer จํ านวนเต็ม -32,768 to 32,767 โดยปรับคาทศนิยมCLng Long จํ านวนเต็มแบบ Long -2,147,483,648 to 2,147,483,647 โดยปรับคาทศนิยมCSng Single คาลบ -3.402823E38 to -1.401298E-45

Page 142: widebase.net: VBA References VBA References

widebase.net –VBA References

142

ฟงกชัน ประเภทขอมูลที่สงออก

ชวงของอากิวเมนต Expression

คาบวก 1.401298E-45 to 3.402823E38CStr String คาที่สงออกขึ้นกับอากิวเมนตของ expressionCVar Variant สํ าหรับตัวเลข เหมือนกับประเภทขอมูล Double สํ าหรับคาที่ไมใชตัวเลขเหมือน

กับประเภทขอมูล String

ลักษณะการประยุกตถา expression สงคาไปยังฟงกชันที่นอกจากชวงของประเภทขอมูลที่จะแปลงคา จะปรากฏคาความผิดพลาดโดยทั่วไปแลวสามารถเขียนคํ าส่ังโดยใชฟงกชันแปลงประเภทขอมูลเพื่อแสดงผลลัพธในรูปแบบของประเภทขอมูลที่เจาะจงแทนที่การใชประเภทขอมูลตามคาเริ่มตน เชน การใชฟงกชัน CCur เพื่อบังคับใหเปนคาทางการเงินแทนที่ตัวเลขจํ านวนเต็มแบบ Single, หรือ Doubleในการใชฟงกชันแปลงประเภทขอมูลแทนที่คาของฟงกชัน Val ใชรูปแบบ international ในการระวังการแปลงประเภทขอมูล เชน ถาใชฟงกชัน CCur ความแตกตางของเครื่องจุดทศนิยม, เครื่องหมายแบงหลักพัน และสัญลักษณทางการเงิน จะเปนไปตามตามการตั้งคาของเครื่องคอมพิวเตอรที่ใชเมื่อดานสวนของคาตัวเลขมีคาเปน 0.5 พอดี ฟงกชัน CInt และ CLng จะปรับคาขึ้นเปนเลขคูที่ใกลที่สุด เชน 0.5 ปรับเปน 0, 1.5 ปรับเปน 2 ฟงกชัน CInt และ CLng แตกตางจากฟงกชัน Fix และ Int ซึ่งใชการตัดทศนิยมออก และคาที่สงออกของฟงกชัน Fix และ Int เปนประเภทขอมูลเดิมการใชฟงกชัน IsDate ในการหาคา ถา date สามารถแปลงเปน วันที่หรือ เวลา สวนฟงกชัน CDate จะกํ าหนดเปนรูปแบบ date และ time ใหตัวเลขที่อยูในชวงพยัญชนะของ Date โดยแปลงคาตัวเลขดานจํ านวนเต็มเปนวันที่ และดานสวนเปนเวลา ซึ่งเวลาจะเริ่มจากเที่ยงคืนฟงกชัน CDate จะใหรูปแบบ date ตามการตั้งคาของเครื่องคอมพิวเตอร ลํ าดับวันที่ เดือน และปที่ถูกตองจะไมสามารถหาไดถาเปนรูปแบบอื่นซึ่งระบบวันที่ไมรับรู นอกจากนี้รูปแบบ Long date ไมเปนที่รับรูถาเก็บคาเปนขอความแบบ day-of-the-weekฟงกชัน CVDate ใชสํ าหรับทํ างานกับภาษา Visual Basic เวอรชันกอน ไวยากรณของฟงกชัน CVDate เหมือนกับฟงกชัน CDate แต ฟงกชัน CVDate สงคาออกเปนประเภทขอมูล Variant ที่มีประเภทยอยเปน Date แทนที่เปนประเภทขอมูล Date โดยตรง เพราะประเภทขอมูล Date โดยตรงไมมีสวนประกอบที่ฟงกชัน CVDateตองการ ผลอยางเดียวกันนี้สามารถแปลง expression เปน Date แลวจึงกํ าหนดเปนประเภทขอมูล Variantโดยเท็คนิคนี้ใชในการแปลงประเภทขอมูลอื่นๆใหเปนประเภทขอมูลยอยของ Variantตัวอยางฟงกชัน CBoolตัวอยางการใชฟงกชัน CBool ในการแปลงคา expression เปน Boolean โดยคาที่ไมใช 0 ฟงกชัน CBool จะสงคาเปน True คาอื่นๆสงคาเปน FalseDim A, B, CheckA = 5: B = 5 ' Initial ตัวแปรCheck = CBool(A = B) ' Check มคีาเปน TrueA = 0 ' กํ าหนด variable.Check = CBool(A) ' Check มคีาเปน False

Page 143: widebase.net: VBA References VBA References

widebase.net –VBA References

143

ฟงกชัน CByteตัวอยางการใชฟงกชัน CByte ในการแปลงคา expression เปน ByteDim MyDouble, MyByteMyDouble = 125.5678 ' MyDouble มปีระเภทขอมูลเปน Double.MyByte = CByte(MyDouble) ' MyByte มคีาเปน 126

ฟงกชัน CCurตัวอยางการใชฟงกชัน CCur ในการแปลงคา expression เปน Currency.Dim MyDouble, MyCurrMyDouble = 543.214588 ' MyDouble is a Double.MyCurr = CCur(MyDouble * 2) ' ผลลัพธของ MyDouble * 2 = (1086.429176)

' ไดผลลัพธคาการเงิน Currency (1086.4292)

ฟงกชัน CDateตัวอยางการใชฟงกชัน CDate ในการแปลงคา expression เปน Date โดยทั่วไปไมแนะนํ าใหการเขียนคํ าส่ังแบบ hard-coding ของ dates and times เปนขอความ (string) แตใหใชรูปแบบของ date และ time เชน #2/12/1969# and #4:45:23 PM#Dim MyDate, MyShortDate, MyTime, MyShortTimeMyDate = "February 12, 1969" ' กํ าหนดวันท่ีMyShortDate = CDate(MyDate) ' แปลงเปนประเภทขอมูล DateMyTime = "4:35:47 PM" ' กํ าหนดเวลาMyShortTime = CDate(MyTime) ' แปลงเปนประเภทขอมูล Date

ฟงกชัน CDblตัวอยางการใชฟงกชัน CDbl ในการแปลงคา expression เปน DoubleDim MyCurr, MyDoubleMyCurr = CCur(234.456784) ' MyCurr เปน CurrencyMyDouble = CDbl(MyCurr * 8.2 * 0.01) ' แปลงผลลัพธเปน Double

ฟงกชัน CDecตัวอยางการใชฟงกชัน CDec ในการแปลงคา expression เปน DecimalDim MyDecimal, MyCurrMyCurr = 10000000.0587 ' MyCurr เปน CurrencyMyDecimal = CDec(MyCurr) ' แปลงผลลัพธเปน Decimal

ฟงกชัน CIntตัวอยางการใชฟงกชัน CInt ในการแปลงคา expression เปน Integer.Dim MyDouble, MyIntMyDouble = 2345.5678 ' MyDouble เปน DoubleMyInt = CInt(MyDouble) ' MyInt เก็บคา 2346

ฟงกชัน CLngตัวอยางการใชฟงกชัน CLng ในการแปลงคา expression เปน Long.Dim MyVal1, MyVal2, MyLong1, MyLong2MyVal1 = 25427.45: MyVal2 = 25427.55 ' MyVal1, MyVal2 เปน DoubleMyLong1 = CLng(MyVal1) ' MyLong1 เก็บคา 25427MyLong2 = CLng(MyVal2) ' MyLong2 เก็บคา 25428

Page 144: widebase.net: VBA References VBA References

widebase.net –VBA References

144

ฟงกชัน CSngตัวอยางการใชฟงกชัน CSng ในการแปลงคา expression เปน Single.Dim MyDouble1, MyDouble2, MySingle1, MySingle2 'MyDouble1,MyDouble2 เปน DoubleMyDouble1 = 75.3421115: MyDouble2 = 75.3421555MySingle1 = CSng(MyDouble1) ' MySingle1 เก็บคา 75.34211MySingle2 = CSng(MyDouble2) ' MySingle2 เก็บคา 75.34216

ฟงกชัน CStrตัวอยางการใชฟงกชัน CStr ในการแปลงคา expression เปน String.Dim MyDouble, MyStringMyDouble = 437.324 ' MyDouble เปน DoubleMyString = CStr(MyDouble) ' MyString เก็บคา "437.324"

ฟงกชัน CVarตัวอยางการใชฟงกชัน CVar ในการแปลงคา expression เปน Variant.Dim MyInt, MyVarMyInt = 4534 ' MyInt เปน IntegerMyVar = CVar(MyInt & "000") ' MyVar เกบ็คาเปน string = 4534000

UBound Functionสงออกประเภทขอมูล Long ที่เปนคามากที่สุดสํ าหรับการระบุมิติของ array

ไวยากรณUBound(arrayname [,dimension])ฟงกชัน UBound มีไวยากรณของสวน ดังนี้

สวน รายละเอียดarrayname บังคับ, เปนชื่อของตัวแปร array ตามมาตรฐานการตั้งชื่อ arraydimension ไมบังคับ, มีคาเปน Variant(Long) ซึ่งเปนเลขจํ านวนเต็มของมิติขอบเขตดานบนที่ไดรับการสง

ออก ใช 1 สํ าหรับมิติที่ 1, 2 สํ าหรับมิติที่ 2 และตอไป ถาละ dimension จะกํ าหนดคาเปน 1

ลักษณะการประยุกตฟงกชัน UBound จะใชงานรวมกับฟงกชัน LBound เพื่อคนหาขนาดของ array โดยฟงกชัน LBound ใชคนหาขอบเขตดานลางของ arrayฟงกชัน UBound สงออกคาตามตารางนี้สํ าหรับ array ตัวอยาง

DIM A (1 To 100, 0 To 3, -3 To 4)

ประโยคคํ าส่ัง คาสงออกLBound(A, 1) 100LBound(A, 2) 3LBound(A, 3) -4

Page 145: widebase.net: VBA References VBA References

widebase.net –VBA References

145

ดูเพ่ิมเติมDim Statement, ฟงกชัน LBound, Option Base Statement, Private Statement, Public Statement,ReDim Statement, Static Statement

ตัวอยางตัวอยางการใชฟงกชัน UBound คนหาคานอยที่สุดสํ าหรับการระบุมิติของ array ใชประโยคคํ าส่ัง Option Base เขียนทับคาฐานเริ่มตนของ array ใหมีคาเปนศูนย

Dim LowerDim MyArray(1 To 10, 5 To 15, 10 To 20)Dim AnyArrya(10)Lower = LBound(MyArray, 1) ' สงออกคา 10Lower = LBound(MyArray, 3) ' สงออกคา 20Lower = LBound(AnyArray) ' สงออกคา 10

ตัวอยางการประยุกตใน Excelตัวอยางการเขียน element ของรายการที่เจาะจงในคอลัมนแรกบน Sheet1

listArray = Application.GetCustomListContents(1)For i = LBound(listArray, 1) To Ubound(listArray, 1)

Worksheets("Sheet1").Cells(i, 1).Value = listArray(i)Next i

UCase function, UCase$ functionฟงกชัน UCase คาสงออกเปนประเภทขอมูล Variant (String) ที่แปลงเปนอักษรตัวใหญฟงกชัน UCase$ คาสงออกเปนประเภทขอมูล String ที่แปลงเปนอักษรตัวใหญ

ไวยากรณUCase(string)UCase$(string)อากิวเมนต string ที่ตองการเปน Expression ที่เปนจริง ถา string เปนคาวาง (Null) ผลลัพธจะเปน

คาวางลักษณะการประยุกตจะเปลี่ยนเฉพาะอักษรตัวเล็กใหเปนอักษรตัวใหญ โดยอักษรตัวใหญและคาประเภทอื่นจะไมมีการเปลี่ยนแปลง

ดูเพ่ิมเติมฟงกชัน LCase, ฟงกชัน LCase$

ตัวอยางฟงกชัน UCase นํ ามาใชในการแปลงตัวอักษรใหเปนอักษรตัวใหญ

Dim UpperCase, LowerCase

Page 146: widebase.net: VBA References VBA References

widebase.net –VBA References

146

LowerCase = "Hello World 2000"UpperCase = UCase(LowerCase) ' ผลลัพธ UpperCase = "HELLO WORLD 2000"

Unload Statementยกเลิกออบเจคจากหนวยความจํ า

ไวยากรณUnload objectobject เปนสวนบังคับที่แสดง object expression ที่ประเมินออบเจคใน Apply To list

ลักษณะการประยุกตเมื่อ Unload ออบเจค จะมีการยกเลิกจากหนวยความจํ า และหนวยความจํ าที่ เกี่ยวของกับออบเจค ตั้งแตออบเจคไดรับการวางในหนวยความจํ าดวยการใชประโยคคํ าส่ัง Load ผูใชไมสามารถติดตอกับออบเจค และออบเจคไมสามารถควบคุมดวยโปรแกรม

ดูเพ่ิมเติมActive Events, Deactivate Events, เมธอด Hide, Load Statement

ตัวอยางตัวอยาง สมมติให userForms 2 ฟอรมในโปรแกรม ใน Initialise event ของ UserForm 1 ใหโหลดและแสดง UserForm2 เมื่อผูใชคลิก UserForm 2 ใหยกเลิกฟอรม UserForm2 เมื่อ UserForm1 ปรากฏขึ้น และไดรับการคลิก ใหยกเลิกฟอรม UserForm1

' Initialize event procedure สํ าหรับ UserForm1Private Sub Form_Initialize() Load UserForm2 UserForm2.ShowEnd Sub

' Click event ของ UserForm2Private Sub Form_Click() UserForm2.HideEnd Sub

' Click event ของ UserForm1Private Sub Form_Click() UserForm2.ShowEnd Sub

Unlock Statementดู Lock Statement

Page 147: widebase.net: VBA References VBA References

widebase.net –VBA References

147

Val Functionคาที่สงออกเปนตัวเลขที่มาจากขอความที่แสดงคาดวยตัวเลขใหเปนประเภทขอมูลที่เหมาะสม

ไวยากรณVal(string)อากิวเมนต string เปน expression ที่มีคาจริง

ลักษณะการประยุกตฟงกชัน Val จะหยุดขอความเมื่อตัวอักษรที่ไมใชตัวเลขและสงคาเทาที่อานได นอกจากนี้เครื่องหมายที่เกี่ยวกับตัวเลขตางๆ เชน จุลภาค เครื่องหมายดอลลาร จะไมรับทราบในฐานะที่เปนตัวเลข แตฟงกชัน Val สามารถแปรความหมายของตัวนํ าหนาเลขฐาน เชน &O (เลขฐานแปด) และ &H (เลขฐานสิบหก) สวนชองวางภายในขอความจะถูกขจัดออกไป

ดูเพ่ิมเติมฟงกชัน Str

ตัวอยางตัวอยางการใชฟงกชัน Val ในการสงคาตัวเลขจากขอความ

Dim MyValueMyValue = Val("2457") ' สงออกคา 2457MyValue = Val(" 2 45 7") ' สงออกคา 2457MyValue = Val("24 and 57") ' สงออกคา 24

VarType Functionสงออกคาเปนประเภทขอมูล Integer ที่แสดงประเภทยอยของตัวแปร

ไวยากรณTypeName(varname)อากิวเมนต varname ตองการคาตัวแปรใดๆยกเวน ตัวแปรที่ผูใชกํ าหนดประเภทขอมูลใดๆ

คาสงออกคาคงที่ คา รายละเอียดvbEmpty 0 Empty (ยังไมไดกํ าหนดคา)vbNull 1 Null (คาวาง)vbInteger 2 Integer (จํ านวนเต็ม)vbLong 3 Long integer (จํ านวนเต็มแบบ Long)vbSingle 4 Single-precision floating-point number (จํ านวนจริงแบบ Single)

Page 148: widebase.net: VBA References VBA References

widebase.net –VBA References

148

คาคงที่ คา รายละเอียดvbDouble 5 Double-precision floating-point number (จํ านวนจริงแบบ Double)vbCurrency 6 Currency value (คาการเงิน)vbDate 7 Date value (คาวันที่)vbString 8 String (ขอความ)vbObject 9 Object (ออบเจค)vbError 10 Error value (คาผิดพลาด)vbBoolean 11 Boolean value (คาผิดพลาด)vbVariant 12 Variant (ใชเฉพาะ array ที่ประเภทขอมูลเปน Variant)vbDataObject 13 ออบเจคของ data accessvbDecimal 14 Decimal value (คาทศนิยม)vbByte 17 Byte value (คาไบต)vbUserDefinedType 36 Variants ที่ผูใชกํ าหนดประเภทเองvbArray 8192 Array

ฟงกชัน VarType ไมสงออกคาเปน array โดยตรง แตใชการเพิ่มคาบางคาเพื่อช้ีถึงประเภทขอมูลของ array คาคงที่ของ vbVariant เปนการแสดงคารวมกับ vbArray เพื่อชี้ถึงอากิวเมนตของฟงกชัน VarType ที่เปน array ที่ประเภทขอมูลเปน Variant เชน คาที่สงออกมาเปน array ของจํ านวนเต็มจะคํ านวณเปน vbInteger + vbArray (8192 + 2 = 8194) ถาออบเจคมีคุณสมบัติตามคาเริ่มตน ฟงกชัน VarType สงออกคาเปนประเภทของออบเจคตามคาคุณสมบัติตามคาเริ่มตน

ดูเพ่ิมเติมฟงกชัน IsArray, ฟงกชัน IsDate, ฟงกชัน IsEmpty, ฟงกชัน IsError, ฟงกชัน IsMissing, ฟงกชัน IsNull,ฟงกชัน IsNumeric, ฟงกชัน IsObject, ฟงกชัน TypeName, ประเภทขอมูล Variant

ตัวอยางตัวอยางการใชฟงกชัน VarType ในการหาประเภทขอมูลยอยของตัวแปร

Dim IntVar, StrVar, DateVar, MyCheckIntVar = 459: StrVar = "Hello World": DateVar = #2/12/69# ' การตัง้คาเริ่นตนของตัวแปรMyCheck = VarType(IntVar) ' สงออกคาเปน 2MyCheck = VarType(DateVar) ' สงออกคาเปน 7MyCheck = VarType(StrVar) ' สงออกคาเปน 8

Page 149: widebase.net: VBA References VBA References

widebase.net –VBA References

149

Weekday Functionคาที่สงออกเปนประเภทขอมูล Variant (Integer) ที่เปนคาตัวเลขที่ใชแทนวันในสัปดาห

ไวยากรณWeekDay(date, [firstdayofweek])อากิวเมนตของฟงกชัน Weekday มีความหมาย คือ

สวน รายละเอียดdate บังคับ, เปน Expression แบบ String, ตัวเลข หรือแบบผสม ที่แสดงรูปแบบของวันที่ ถา

date เปนคาวาง (Null) ผลลัพธจะเปนคาวางfirstdayofweek ไมบังคับ,เปนคาคงที่เพื่อระบุวันแรกของสัปดาห ถาไมกํ าหนด จะใชวันอาทิตยเปนวันแรก

ของสัปดาห

การตั้งคาคาอากิวเมนต firstdayofweek กํ าหนดคาไดเปน

คาคงที่ คา รายละเอียดvbUseSystem 0 ตั้งคาตาม NLS APIvbSunday 1 วันอาทิตย (คาเริ่มตน)vbMonday 2 วันจันทรvbTuesday 3 วันอังคารvbWednesday 4 วันพุธvbThursday 5 วันพฤหัสบดีvbFriday 6 วันศุกรvbSaturday 7 วันเสาร

คาสงออกคาคงที่ คา รายละเอียดvbSunday 1 วันอาทิตย (คาเริ่มตน)vbMonday 2 วันจันทรvbTuesday 3 วันอังคารvbWednesday 4 วันพุธvbThursday 5 วันพฤหัสบดีvbFriday 6 วันศุกรvbSaturday 7 วันเสาร

Page 150: widebase.net: VBA References VBA References

widebase.net –VBA References

150

ดูเพ่ิมเติมฟงกชัน Date, ฟงกชัน Day, ฟงกชัน Month, ฟงกชัน Now, ฟงกชัน Year

ตัวอยางDim myDate, myWeekmyDate = # January 15, 2000#myWeek = Weekday(myDate) ' ผลลัพธ myWeek = 7 เนือ่งจากเปนวันเสาร

Width # Statementกํ าหนดความกวางของแถวผลลัพธของไฟลที่เปด ดวยประโยคคํ าส่ัง Open

ไวยากรณWidth # filenumber, widthไวยากรณประโยคคํ าส่ัง Width # มีรายละเอียดสวนดังนี้

สวน คํ าอธิบายfilenumber บังคับ, เปนหมายเลขไฟลwidth บังคับ, เปน numeric expression ในชวง 0 – 255 ที่ระบุวาจํ านวนตัวอักษรที่แสดงบน

แถวกอนเริ่มตน แถวใหม ถา width เทากับศูนย ไมมีขอจํ ากัดของ ความยาวของแถว คาเริ่มตนสํ าหรับ width คือศูนย

ดูเพ่ิมเติมOpen Statement, Print # Statement

ตัวอยางตัวอยางการใชประโยคคํ าส่ัง Width # ที่ตั้งคาความกวางของแถวผลลัพธสํ าหรับไฟล

Dim iOpen "TESTFILE" For Output As #1 ' เปดสํ าหรับ outputWidth #1, 5 ' ตัง้คาความกวางบรรทัดเปน 5For i = 0 To 9 ' loop 10 รอบ Print #1, Chr(48 + i); ' พมิพ 5 ตัวอักษรตอบรรทัดNext i

Close #1 ' ปดไฟล

Write # Statement เขียนขอมูลไปที่ไฟล Sequential

ไวยากรณWrite # filenumber, [outputlist]

Page 151: widebase.net: VBA References VBA References

widebase.net –VBA References

151

ไวยากรณประโยคคํ าส่ัง Write # มีรายละเอียดสวนดังนี้

สวน คํ าอธิบายfilenumber บังคับ, เปนหมายเลขไฟลoutputlist ไมบังคับ, เปน 1 expression หรือมากกวา ที่แบงดวยเครื่องหมายจุลภาค ของ

expression ตัวเลข หรือขอความ

ลักษณะการประยุกตขอมูลที่เขียนดวย Write # มักจะอานจากไฟลดวย Input #ถาละ outputlist และรวมเฉพาะรายการที่แยกหลัง filenumber และบรรทัดวางไดรับการพิมพไปที่ไฟล หลาย expression สามารถแยกดวยชองวาง หรือ semicolon ชองวางมีผลเหมือนกับ semicolonเมื่อใช Write # เขียนขอมูลไปที่ไฟล มีหลายขอสมมติสากล เพื่อทํ าใหขอมูลไดรับการอาน และแปลอยางถูกตอง ดวยการใช Input # โดยไมพิจารณา locale- ขอมูลตัวเลข เขียนดวยจุด ในฐานะตัวแบงทศนิยม- สํ าหรับขอมูล Boolean ทั้ง True และ False ไดรับการพิมพ คียเวิรด True และ False ไมมีการแปล- ขอมูล Date ไดรับการเขียนดวยการใชรูปแบบมาตรฐาน short date ที่ระบบของเครื่องที่ใชรูจัก เมื่อสวน

วันที่หรือเวลาหายไปหรือเปนศูนย สวนที่มีอยูจะไดรับการเขียนลงสูไฟล- ไมมีการเขียนขอมูลลงสูไฟล ถาขอมูลของ outputlist วางเปลา แตถาขอมูลของ outputlist เปน Null คา

Null จะไดรับการเขียนลงสูไฟล- สํ าหรับขอมูล Error ที่มีผลลัพธปรากฏเปนรหัสความผิดพลาด คียเวิรด Error จะไมมีการแปลWrite # แตกตางจาก Print # คือ การแทรกเครื่องหมายจุลภาค แบงขอมูล และเครื่องหมายคํ าพูดใชกับขอความ เมื่อเขียนลงสูไฟล ไมตองมีการระบุตัวแบงรายการ Write # แทรกตัวอักษรบรรทัดใหม คือ carriage return – linefeed (Chr(13) + Chr(10)) หลังจากการเขียนตัวอักษรสุดทายใน outputlist ไปที่ไฟล

ดูเพ่ิมเติมInput # Statement, Open Statement, Print # Statement

ตัวอยาง

' ตวัอยางการใชประโยคคํ าส่ัง WriteOpen "TESTFILE" For Output As #1 ' เปดไฟลสํ าหรับผลลัพธWrite #1, "Hello World", 234 ' เขยีนขอมลูดวยเครื่องหมายจุลภาคWrite #1, ' พมิพแถววางในไฟล

' กํ าหนดคา boolean, date, null และ errorDim MyBool, MyDate, MyNull, MyErrorMyBool = False: MyDate = #February 12, 2002#: MyNull = NullMyError = CVErr(32767)' ขอมลู Boolean ไดรับการเขียนเปน #TRUE# หรือ #FALSE#' Date จะไดรบัการดวยรปูแบบ สากล เชน #1994-07-13# แสดงวันท่ี 13 กรกฎาคม 2537' ขอมลู Error ไดรับการเขียนเปน #Error รหัสความผิดพลาด#Write #1, MyBool; " is a boolean value"

Page 152: widebase.net: VBA References VBA References

widebase.net –VBA References

152

Write #1, MyDate; " is a date"Write #1, MyNull; " is a null value"Write #1, MyError; " is an error value"Close #1 ' ปดไฟล

Year Functionคาที่สงออกเปนประเภทขอมูล Variant (Integer) จากสวนปของวันที่

ไวยากรณYear(date)อากิวเมนต date สามารถเปนประเภทขอมูลขอความ (String) ตัวเลข หรือ Expression ที่แสดงในรูป

แบบของวันที่ ถา date เปนคาวาง (Null) ผลลัพธจะเปนคาวาง

ดูเพ่ิมเติมฟงกชัน Date, ฟงกชัน Day, ฟงกชัน Now, ฟงกชัน Month, ฟงกชัน Weekday

ตัวอยางฟงกชัน Year นํ ามาใชในการแปลงขอความในรูปแบบวันที่ ใหเปนคาของปDim myDate, myYearmyDate = #June 12, 1968#myYear = Year(myDate) ' ผลลัพธ myYear =1968