VBA - تحديد مجلد والإشارة إليه كمسار لرمز منفصل

StackOverflow https://stackoverflow.com//questions/25087412

  •  02-01-2020
  •  | 
  •  

سؤال

أنا قادر على استخدام هذا الرمز لتحديد مجلد:

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.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top