VBA - تحديد مجلد والإشارة إليه كمسار لرمز منفصل
سؤال
أنا قادر على استخدام هذا الرمز لتحديد مجلد:
Sub ChooseFolder()
Dim fldr As FileDialog
Dim sItem As String
Set fldr = Application.FileDialog(msoFileDialogFolderPicker)
With fldr
.Title = "Select a Folder"
.AllowMultiSelect = False
.InitialFileName = strPath
If .Show <> -1 Then GoTo NextCode
sItem = .SelectedItems(1)
End With
NextCode:
GetFolder = sItem
Set fldr = Nothing
End Sub
لدي أيضًا هذا الرمز الذي يعمل عندما يكون مسار المجلد مشفرًا.في الأساس، يعطيني قائمة بأسماء الملفات ومسارات الملفات التي سأستخدمها لاحقًا في قسم منفصل.لقد قمت حاليًا بالتعليق على مسار المجلد المشفر وأحاول استخدام الكود أعلاه لتحديد المجلد في كل مرة حتى يكون أكثر سهولة في الاستخدام.
Private Sub btn_LeaveReport()
Dim objFSO As Object
Dim objFolder As Object
Dim objFile As Object
Dim i As Integer
'Create an instance of the FileSystemObject
Set objFSO = CreateObject("Scripting.FileSystemObject")
'Get the folder object
'Set objFolder = objFSO.GetFolder("D:\Administration\Time Sheets")
Set objFolder = objFSO.GetFolder(ChooseFolder)
i = 3
'loops through each file in the directory and prints their names and path
For Each objFile In objFolder.Files
'print file name
Cells(i + 1, 2) = objFile.Name
'print file path
Cells(i + 1, 3) = objFile.Path
i = i + 1
Next objFile
End Sub
ومع ذلك، لست متأكدًا من كيفية جعل مجموعتي التعليمات البرمجية المختلفتين تعملان معًا.أعتقد أن الجزء الوحيد الذي أحتاج إلى تغييره هو هذا:
Set objFolder = objFSO.GetFolder(ChooseFolder)
لقد حصلت عليه باسم ChooseFolder وهو القسم الفرعي أعلاه في الوقت الحالي ولكن من الواضح أن هذا ليس هو الطريق للقيام بذلك.لقد جربته أيضًا مع sItem ولكن يبدو أن هذا لا يعمل.
المحلول
فقط للبناء على تعليقي مع شرح أفضل، لقد حددت ChooseFolder
كفرعي.الغواصات لا ترجع القيم.ومع ذلك، فأنت تستخدمها كوظيفة عند القيام بذلك:
Set objFolder = objFSO.GetFolder(ChooseFolder)
لأنك تمر نتيجة التشغيل ChooseFolder
إلى FSO GetFolder
وظيفة.
ما عليك القيام به هو أن تعلن ChooseFolder
كوظيفة.
في الأساس، استبدال الخاص بك ChooseFolder
الفرعية مع هذا:
Function ChooseFolder() As String
Dim fldr As FileDialog
Dim sItem As String
Set fldr = Application.FileDialog(msoFileDialogFolderPicker)
With fldr
.Title = "Select a Folder"
.AllowMultiSelect = False
.InitialFileName = strPath
If .Show <> -1 Then GoTo NextCode
sItem = .SelectedItems(1)
End With
NextCode:
ChooseFolder = sItem
Set fldr = Nothing
End Function
وينبغي بعد ذلك أن تفعل ما تتوقعه.بقية التعليمات البرمجية الخاصة بك على ما يرام.
نصائح أخرى
جعل selffolder () في وظيفة ثم الرجوع إليها:
giveacodicetagpre.