ฟังก์ชัน Dir

นำไปใช้กับ
Access for Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

หมายเหตุ

ฟังก์ชัน วิธีการ วัตถุ หรือคุณสมบัติที่อธิบายไว้ในหัวข้อนี้จะถูกปิดใช้งานถ้า Microsoft Jet Expression Service กําลังทํางานในโหมด Sandbox ซึ่งจะป้องกันการประเมินนิพจน์ที่อาจไม่ปลอดภัย สําหรับข้อมูลเพิ่มเติมเกี่ยวกับโหมด Sandbox ให้ค้นหา "โหมด Sandbox" ในวิธีใช้

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

ไวยากรณ์

Dir[(pathname [, attributes] )]

ไวยากรณ์ของฟังก์ชัน Dir มีอาร์กิวเมนต์ดังต่อไปนี้

อาร์กิวเมนต์ คำอธิบาย
pathname ไม่จำเป็น นิพจน์สตริงที่ระบุชื่อไฟล์ — อาจรวมถึงไดเรกทอรีหรือโฟลเดอร์ และไดรฟ์ สตริงความยาวเป็นศูนย์ ("") จะถูกส่งกลับ ถ้าไม่พบชื่อเส้นทาง
แอตทริบิวต์ ไม่จำเป็น นิพจน์ค่าคงที่หรือตัวเลข ซึ่ง sum ระบุแอตทริบิวต์ของไฟล์ ถ้าละไว้ จะส่งกลับไฟล์ที่ตรงกับ ชื่อเส้นทาง แต่ไม่มีแอตทริบิวต์

    

การตั้งค่า

การตั้งค่าอาร์กิวเมนต์แอตทริบิวต์มีดังนี้

ค่าคงที่ ค่า คำอธิบาย
vbNormal 0 (ค่าเริ่มต้น) ระบุไฟล์ที่ไม่มีแอตทริบิวต์
vbReadOnly 1 ระบุไฟล์แบบอ่านอย่างเดียวนอกเหนือจากไฟล์ที่ไม่มีแอตทริบิวต์
vbHidden 2 ระบุไฟล์ที่ซ่อนอยู่นอกเหนือจากไฟล์ที่ไม่มีแอตทริบิวต์
VbSystem 4 ระบุไฟล์ระบบนอกเหนือจากไฟล์ที่ไม่มีแอตทริบิวต์ ไม่พร้อมใช้งานใน Macintosh
vbVolume 8 ระบุป้ายชื่อไดรฟ์ข้อมูล ถ้ามีการระบุแอตทริบิวต์อื่นๆ vbVolume จะถูกละเว้น ไม่พร้อมใช้งานใน Macintosh
vbDirectory 16 ระบุไดเรกทอรีหรือโฟลเดอร์นอกเหนือจากไฟล์ที่ไม่มีแอตทริบิวต์
vbAlias 64 ชื่อไฟล์ที่ระบุเป็นนามแฝง พร้อมใช้งานบน Macintosh เท่านั้น

    

หมายเหตุ

ค่าคงที่เหล่านี้ถูกระบุโดย Visual Basic for Applications (VBA) และสามารถใช้กับทุกตําแหน่งในโค้ดของคุณแทนค่าจริง

ข้อสังเกต

ใน Microsoft Windows Dir สนับสนุนการใช้อักขระตัวแทนหลายอักขระ ()* และอักขระเดียว (?) เพื่อระบุไฟล์หลายไฟล์ บน Macintosh อักขระเหล่านี้จะถือเป็นอักขระชื่อไฟล์ที่ถูกต้อง และไม่สามารถใช้เป็นอักขระตัวแทนเพื่อระบุไฟล์หลายๆ ไฟล์ได้

เนื่องจาก Macintosh ไม่สนับสนุนอักขระตัวแทน ให้ใช้ชนิดไฟล์เพื่อระบุกลุ่มไฟล์ คุณสามารถใช้ฟังก์ชัน MacID เพื่อระบุชนิดไฟล์แทนการใช้ชื่อไฟล์ ตัวอย่างเช่น คําสั่งต่อไปนี้จะส่งกลับชื่อของไฟล์ TEXT แรกในโฟลเดอร์ปัจจุบัน:

Dir("SomePath", MacID("TEXT"))

เมื่อต้องการทําซ้ําไฟล์ทั้งหมดในโฟลเดอร์ ให้ระบุสตริงว่าง ดังนี้

Dir("")

ถ้าคุณใช้ฟังก์ชัน MacID กับ Dir ใน Windows ข้อผิดพลาดจะเกิดขึ้น

ค่าแอตทริบิวต์ใดๆ ที่มากกว่า 256 จะถือว่าเป็นค่า MacID

คุณต้องระบุ ชื่อเส้นทาง ในครั้งแรกที่คุณเรียกใช้ฟังก์ชัน Dir มิฉะนั้นจะเกิดข้อผิดพลาดขึ้น ถ้าคุณระบุแอตทริบิวต์ของไฟล์ด้วย ต้องใส่ ชื่อเส้นทาง ด้วย

Dir ส่งกลับชื่อไฟล์แรกที่ตรงกับชื่อเส้นทาง เมื่อต้องการรับชื่อไฟล์เพิ่มเติมที่ตรงกับ ชื่อเส้นทาง ให้เรียกใช้ Dir อีกครั้งโดยไม่มีอาร์กิวเมนต์ เมื่อไม่มีชื่อไฟล์อื่นที่ตรงกัน Dir จะ ส่งกลับสตริงความยาวเป็นศูนย์ ("") เมื่อส่งกลับสตริงที่มีความยาวเป็นศูนย์ คุณต้องระบุ ชื่อเส้นทาง ในการเรียกใช้ครั้งต่อๆ ไป มิฉะนั้นจะเกิดข้อผิดพลาดขึ้น คุณสามารถเปลี่ยนเป็น ชื่อเส้นทาง ใหม่โดยไม่ต้องเรียกใช้ชื่อไฟล์ทั้งหมดที่ตรงกับ ชื่อเส้นทางปัจจุบันทั้งหมด อย่างไรก็ตาม คุณไม่สามารถเรียกใช้ฟังก์ชัน Dir แบบเรียกใช้ซ้ําได้ การเรียก Dir ด้วยแอตทริบิวต์ vbDirectory ไม่ได้ส่งกลับไดเรกทอรีย่อยอย่างต่อเนื่อง

เคล็ดลับ เนื่องจากชื่อไฟล์จะถูกดึงข้อมูลไม่ตามลําดับ คุณอาจต้องการจัดเก็บชื่อไฟล์ที่ส่งกลับในอาร์เรย์ จากนั้นเรียงลําดับอาร์เรย์

ตัวอย่าง

หมายเหตุ

ตัวอย่างต่อไปนี้จะสาธิตการใช้ฟังก์ชันนี้ในโมดูล Visual Basic for Applications (VBA) สําหรับข้อมูลเพิ่มเติมเกี่ยวกับการทํางานกับ VBA ให้เลือก การอ้างอิงนักพัฒนาในรายการ ดรอปดาวน์ที่อยู่ถัดจาก ค้นหา แล้วใส่คําอย่างน้อยหนึ่งคําในกล่องค้นหา

ตัวอย่างนี้ใช้ฟังก์ชัน Dir เพื่อตรวจสอบว่ามีไฟล์และไดเรกทอรีอยู่หรือไม่ บน Macintosh "HD:" คือชื่อไดรฟ์เริ่มต้นและส่วนของชื่อเส้นทางจะถูกคั่นด้วยเครื่องหมายจุดคู่แทนเครื่องหมายแบคสแลช นอกจากนี้ อักขระตัวแทนของ Windows จะถือเป็นอักขระชื่อไฟล์ที่ถูกต้องบน Macintosh อย่างไรก็ตาม คุณสามารถใช้ฟังก์ชัน MacID เพื่อระบุกลุ่มไฟล์ได้

Dim MyFile, MyPath, MyName
' Returns "WIN.INI" (on Microsoft Windows) if it exists.
MyFile = Dir("C:\WINDOWS\WIN.INI")    
' Returns filename with specified extension. If more than one *.ini
' file exists, the first file found is returned.
MyFile = Dir("C:\WINDOWS\*.INI")
' Call Dir again without arguments to return the next *.INI file in the 
' same directory.
MyFile = Dir
' Return first *.TXT file with a set hidden attribute.
MyFile = Dir("*.TXT", vbHidden)
' Display the names in C:\ that represent directories.
MyPath = "c:\"    ' Set the path.
MyName = Dir(MyPath, vbDirectory)    ' Retrieve the first entry.
Do While MyName <> ""    ' Start the loop.
    ' Ignore the current directory and the encompassing directory.
    If MyName <> "." And MyName <> ".." Then
        ' Use bitwise comparison to make sure MyName is a directory.
        If (GetAttr(MyPath & MyName) And vbDirectory) = vbDirectory Then
            Debug.Print MyName    ' Display entry only if it
        End If    ' it represents a directory.
    End If
    MyName = Dir    ' Get next entry.
Loop