פונקציית VBA DIR - הסבר קל עם דוגמאות

ל- VBA יש כמה פונקציות שימושיות שיכולות להביא את האוטומציה שלך ב- Excel לשלב הבא.

פונקציה אחת כזו היא פונקציית VBA DIR.

כשלעצמו, זה אולי נראה כמו פונקציה פשוטה שעושה דבר אחד ספציפי.

אך כאשר אתה משלב אותו עם כמה אלמנטים שימושיים אחרים של שפת הקידוד VBA, אתה יכול ליצור דברים רבי עוצמה (מכוסה בדוגמאות בהמשך הדרכה זו).

מה עושה פונקציית VBA Dir?

השתמש בפונקציית VBA DIR כאשר ברצונך לקבל את שם הקובץ או תיקיה באמצעות שם הנתיב שלהם.

כדי לתת לך דוגמה, אם יש לך קובץ Excel בתיקיה, תוכל להשתמש בפונקציית VBA DIR כדי לקבל את שם קובץ ה- Excel (או כל סוג אחר של קובץ).

מה אם אני רוצה לקבל את שמות כל קבצי האקסל בתיקייה (או את כל הקבצים - בין אם זה קובץ אקסל או לא)?

גם אתה יכול לעשות זאת!

כאשר אתה משתמש בפונקציית DIR פעם אחת, הוא מחזיר את שם הקובץ הראשון בתיקייה. כעת, אם ברצונך לקבל גם את השמות של הקבצים השני, השלישי, הרביעי, תוכל להשתמש בפונקציית DIR שוב (מכוסה מאוחר יותר כדוגמה).

במאי מחזירה את שם הקובץ הראשון התואם את שם הנתיב. כדי לקבל שמות קבצים נוספים התואמים את שם הנתיב, התקשר במאי שוב ללא טיעונים. כשאין יותר שמות קבצים תואמים, במאי מחזירה מחרוזת באורך אפס (""). מכוסה בדוגמה 3 ו -4 בהמשך הדרכה זו.

תחביר הפונקציה VBA DIR

Dir [(שם הנתיב [, תכונות])]
  • שם הנתיב: זהו טיעון אופציונלי. זה יכול להיות שם הקובץ, שם התיקיה או שם הספרייה. אם שם הנתיב לא נמצא, הפונקציה VBA DIR מחזירה מחרוזת באורך אפס ("")
  • תכונות: זהו טיעון אופציונלי. אתה יכול להשתמש בארגומנט זה כדי לציין כמה תכונות ופונקציית DIR תחזיר את שמות הקבצים בהתבסס על תכונות אלה. לדוגמה, אם אתה רוצה רשימה של כל הקבצים הנסתרים או הקבצים לקריאה בלבד (יחד עם קבצים ללא תכונות), עליך לציין זאת בארגומנט זה.

תכונות הזמינות לשימוש בפונקציית VBA DIR (ניתן להשתמש באחת או יותר מהן):

קָבוּעַ ערך תיאור
vbNormal 0 (ברירת מחדל) מציין קבצים ללא תכונות.
vbReadOnly 1 מציין קבצים לקריאה בלבד בנוסף לקבצים ללא תכונות.
vbHidden 2 מציין קבצים מוסתרים בנוסף לקבצים ללא תכונות.
VbSystem 4 מציין קבצי מערכת בנוסף לקבצים ללא תכונות. לא זמין במקינטוש.
vbVolume 8 מציין תווית אמצעי אחסון; אם מצוין כל ייחוס אחר, התעלמות מ- vbVolume. לא זמין במקינטוש.
vbDirectory 16 מציין ספריות או תיקיות בנוסף לקבצים ללא תכונות.
vbAlias 64 שם הקובץ שצוין הוא כינוי. זמין רק במקינטוש.

שימוש בתווים כלליים עם פונקציית DIR

אם אתה עובד עם Windows, תוכל גם להשתמש בתווים כלליים בפונקציית DIR.

שים לב שאינך יכול להשתמש בהם בעת עבודה עם VBA במקינטוש.

שימוש בתווים כלליים יכול להיות שימושי כאשר:

  • ברצונך לקבל את שמות הקבצים מסוג קובץ מסוים (כגון .XLSX או .PPTX)
  • כאשר יש לך סיומת/קידומת ספציפית בשמות קבצים ואתה רוצה לקבל את שמות הקבצים/תיקיות/ספריות אלה. לדוגמה, אם אתה רוצה את שמות כל הקבצים עם הקידומת 2021-2022, תוכל לעשות זאת באמצעות תווים כלליים.

יש שלוש תווים כלליים ב- Excel:

  1. * (כוכבית) - הוא מייצג כל מספר תווים. לדוגמה, 2019* היה נותן לך את שמות כל הקבצים עם הקידומת 2021-2022.
  2. ? (סימן שאלה) - הוא מייצג דמות אחת. למשל, 2021-2022? היה נותן לך את שמות כל הקבצים שמתחילים עם 2020-2022 ויש להם תו אחד נוסף בשם (כגון 2021-2022A, 2021-2022B, 2021-2022C וכן הלאה)

הערה: יש עוד תו כללי אחד - tilde (~). מכיוון שלא נעשה בו שימוש רב, דילגתי על ההסבר שלו. אתה יכול לקרוא עוד על זה כאן אם אתה מעוניין.

פונקציית VBA DIR - דוגמאות

כעת בואו נצלול ונראה כמה דוגמאות לשימוש בפונקציית VBA DIR.

דוגמה 1 - קבלת שם הקובץ מהנתיב שלו

כשיש לך נתיב של קובץ, תוכל להשתמש בפונקציית DIR כדי לקבל ממנו את שם הקובץ.

לדוגמה, הקוד שלהלן מחזיר את שם הקובץ ומציג אותו בתיבת הודעות.

Sub GetFileNames () Dim FileName As String FileName = Dir ("C: \ Users \ sumit \ Desktop \ Test \ Excel File A.xlsx") MsgBox FileName End Sub

הקוד לעיל משתמש במשתנה 'שם קובץ' לאחסון שם הקובץ המוחזר על ידי הפונקציה DIR. לאחר מכן הוא משתמש בתיבת הודעות כדי להציג את שם הקובץ (כפי שמוצג להלן).

ומה קורה כשהקובץ לא קיים?

במקרה זה, הפונקציה DIR תחזיר מחרוזת ריקה.

הקוד שלהלן משתמש בהצהרה If Then Else כדי לבדוק אם הקובץ קיים או לא. אם הקובץ אינו קיים, הוא מציג תיבת הודעות עם הטקסט "קובץ אינו קיים", אחרת הוא מראה את שם הקובץ.

Sub CheckFileExistence () Dim FileName As String FileName = Dir ("C: \ Users \ sumit \ Desktop \ Test \ Excel File A.xlsx") אם שם קובץ "" ואז MsgBox שם קובץ אחר MsgBox "קובץ לא קיים" סוף אם מסתיים תַת

דוגמה 2 - בדוק אם קיים מדריך קיים או לא (וצור אם לא)

הקוד שלהלן בודק אם התיקייה 'Test' קיימת או לא.

תיבת הודעות משמשת להצגת הודעה למקרה שהתיקייה קיימת או כאשר היא לא קיימת.

Sub CheckDirectory () Dim PathName As String Dim CheckDir As String PathName = "C: Users sumit Desktop Desktop CheckDir = Dir (PathName, vbDirectory) אם CheckDir" "ואז MsgBox CheckDir &" קיים "אחר MsgBox" הספרייה אינו קיים "סוף אם סיום תת

אתה יכול לחדד את הקוד הזה עוד יותר כדי לבדוק אם התיקייה קיימת או לא, ואם לא, תוכל להשתמש ב- VBA ליצירת התיקיה הזו.

להלן הקוד שמשתמש ב- פונקציית MkDir ליצור תיקיה למקרה שהיא לא קיימת.

תת CreateDirectory () Dim PathName כמחרוזת Dim CheckDir As String PathName = "C: Users sumit Desktop Desktop CheckDir = Dir (PathName, vbDirectory) אם CheckDir" "אז MsgBox CheckDir &" תיקייה קיימת "אחר MkDir PathName MsgBox "נוצרה תיקיה בשם" & CheckDir End If End Sub

דוגמה 3 - קבל את שמות כל הקבצים והתיקיות בספרייה

אם ברצונך לקבל רשימה של כל שמות הקבצים והתיקיות בספרייה, תוכל להשתמש בפונקציית DIR.

הקוד שלהלן מפרט את כל הקבצים ושמות התיקיות בתיקיית הבדיקה (הנמצא בנתיב הבא - C: \ Users \ sumit \ Desktop \ Test \).

אני משתמש ב- Debug.Print כדי להציג את השמות בחלון המיידי. תוכל גם להשתמש בזה כדי לרשום את השמות בתיבת הודעות או בעמודה ב- Excel.

Sub GetAllFile & FolderNames () Dim FileName As String FileName = Dir ("C: \ Users \ sumit \ Desktop \ Test \", vbDirectory) Do While FileName "" Debug.Print FileName FileName = Dir () Sub Loop End

לולאת Do While בקוד הנ"ל ממשיכה עד שכל הקבצים והתיקיות בנתיב הנתון כוסו. כאשר אין עוד קבצים/תיקיות לכסות, שם קובץ הופך למחרוזת null והלולאה נעצרת.

דוגמה 4 - קבל את שמות כל הקבצים בתיקייה

אתה יכול להשתמש בקוד שלהלן כדי לקבל את שמות כל הקבצים בתיקיה/ספרייה (ולא את שמות תיקיות המשנה).

Sub GetAllFileNames () Dim FileName As String FileName = Dir ("C: \ Users \ sumit \ Desktop \ Test \") Do While FileName "" Debug.Print FileName FileName = Dir () Sub End loop

קוד זה הוא בדיוק כמו הקוד המשמש בדוגמה 3, עם הבדל קטן אחד.

בקוד זה לא ציינתי vbDirectory בפונקציית DIR. כאשר תציין vbDirectory, הוא יתן לך את שמות כל הקבצים וכן את התיקיות.

כאשר אינך מציין vbDirectory, פונקציית DIR תתן לך רק את שמות הקבצים.

הערה: אם ברצונך לקבל את שמות כל הקבצים בתיקייה הראשית ותיקיות המשנה, אינך יכול להשתמש בפונקציית DIR (מכיוון שהיא לא רקורסיבית). לשם כך, תוכל להשתמש ב- Power Query (אין צורך בקידוד) או להשתמש באובייקט מערכת הקבצים ב- VBA (עם רקורסיה).

דוגמה 5 - קבל את שמות כל תיקיות המשנה בתיקייה

הקוד שלהלן ייתן לך את שמות כל תיקיות המשנה בתיקייה שצוינה.

הוא משתמש ב- פונקציית GetAtr ב- VBA, המאפשר לנו לבדוק האם השם המוחזר על ידי פונקציית DIR הוא שם של קובץ או תיקיה/ספרייה.

תת GetSubFolderNames () Dim FileName כמחרוזת Dim PathName As String PathName = "C: Users sumit \ Desktop \ Test \" FileName = Dir (PathName, vbDirectory) בצעו תוך שם קובץ "" If GetAttr (PathName & FileName) = vbDirectory לאחר מכן Debug.Print סוף שם קובץ אם FileName = Dir () תת סוף לולאה

שוב, אני משתמש ב- Debug.Print כדי לקבל את השמות בחלון המיידי. אתה יכול לקבל אותם בתיבת הודעות או ב- Excel (על ידי שינוי הקוד בהתאם).

דוגמה 6 - קבל את קובץ ה- Excel הראשון מתיקייה

עם פונקציית DIR, באפשרותך לציין את סיומת הקובץ או כל סיומת/סיומת שאתה רוצה בשם הקובץ המוחזר.

הקוד שלהלן יציג את שם קובץ ה- Excel הראשון בתיקיית הבדיקה.

Sub GetFirstExcelFileName () Dim FileName As String Dim PathName As String PathName = "C: Users sumit \ Desktop \ Test \" FileName = Dir (PathName & "*.xls*") MsgBox שם קובץ סוף

שים לב שהשתמשתי ב- * .xls * (סימן כוכבית משני הצדדים). זה יבטיח שכל הגרסאות של קבצי Excel ייבדקו (.xls, xlsx, .xlsm, .xlsb).

דוגמה 7 - קבל שמות של כל קובץ Excel בתיקייה

השתמש בקוד שלהלן כדי לקבל את השמות של כל קבצי Excel בתיקיית הבדיקה.

Sub GetAllFileNames () Dim FolderName As String Dim FileName As String FolderName = "C: Users sumit \ Desktop \ Test \" FileName = Dir (FolderName & "*.xls*") Do While Name File "" Debug.PrintName File FileName = Dir () Loop End Sub

בעוד שפונקציית DIR מחזירה את שם קובץ האקסל הראשון בלבד, מכיוון שאנו קוראים לו שוב בלולאה, היא עוברת בין כל הקבצים ונותנת לנו את שמות כל קבצי האקסל.

מקווה שמצאת הדרכה זו והדוגמאות שימושיות.

ספר לי את דעתך בסעיף ההערות.

תוכל לעזור בפיתוח האתר, שיתוף הדף עם החברים שלך

wave wave wave wave wave