Как использовать MkDir с переменным путем для разных пользователей

#excel #vba

#преуспеть #vba #excel

Вопрос:

У меня есть код, в котором вы вводите информацию в список Excel. Я хочу иметь возможность создавать папки — я использую приведенный ниже код. Проблема в том, что я хочу, чтобы это работало для всех моих коллег (не только для меня). Может кто-нибудь, пожалуйста, помочь найти, где я получаю ошибку? Обратите внимание, что это неполный код, ошибка возникает в строке MkDir. Заранее спасибо за вашу помощь!

 Dim Startupfolder As String
Startupfolder = Startup_Name.Value

MkDir Environ$("Userprofile") amp; "nc Dropboxinvestment oportunities amp; "Startupfolder"
  

Комментарии:

1. Строка MKDir содержит синтаксическую ошибку. Вторая проблема будет заключаться в том, что вам нужно убедиться, что полный путь перед Startupfolder существует. И вы действительно хотите поместить новый путь чуть ниже пользовательского профиля ? Документы IMO, возможно, были бы лучшим местом.

Ответ №1:

Проблема в том, куда вы помещаете свои кавычки. Попробуйте это:

 MkDir Environ$("Userprofile") amp; "nc Dropboxinvestment oportunities" amp; Startupfolder
  

Startupfolder является переменной, поэтому вы не хотите заключать ее в кавычки

Подробная информация
Если ваша папка помещена в еще не существующую папку, произойдет сбой. Также произойдет сбой, если он уже существует.

Попробуйте это вместо:

 Sub MakeDir()
    CreateFolder Environ$("Userprofile") amp; "nc Dropbox"
    CreateFolder Environ$("Userprofile") amp; "nc Dropboxinvestment oportunities"
    CreateFolder Environ$("Userprofile") amp; "nc Dropboxinvestment oportunities" amp; Startupfolder
End Sub

Sub CreateFolder(Folder)
    If Len(Dir(Folder, vbDirectory)) = 0 Then
        MkDir Folder
    End If
End Sub
  

Комментарии:

1. к сожалению, это все еще не работает, строка с MKdir выделена желтым

2. @rajpabs вы пропустили важный момент, упомянутый Storax под вашим вопросом. 😉

3. @SiddharthRout C:UsersXXXXnc Dropbox инвестиционные возможности действительно существуют — XXXX — мое полное имя

4. @rajpabs — теперь добавлено немного больше информации

5. @rajpabs: Тогда код от Sam будет работать. Какую ошибку вы получаете. Также эти папки могут отсутствовать у других пользователей, поэтому вам нужен дополнительный код, чтобы проверить, существуют они или нет, и создать его..

Ответ №2:

Я бы использовал подобный вызов API

 Declare Function MakeSureDirectoryPathExists Lib "imagehlp.dll" ( _
  ByVal lpPath As String) As Long
  

и тогда вы могли бы назвать это так

     MakeSureDirectoryPathExists Environ$("Userprofile") amp; _
         "nc Dropboxinvestment oportunities" amp; Startupfolder amp; ""
  

Документацию смотрите здесь соответственно здесь. Важно, как указано в комментариях

Если конечным компонентом пути является каталог, а не имя файла, строка должна заканчиваться символом обратной косой черты.

Комментарии:

1. Эта ссылка лучше. Это мое любимое универсальное место для получения информации об API 😉

2. Спасибо, обычно я захожу сюда , но это, очевидно, не подходит для SO, поэтому я поместил ссылку на документацию MS.

Ответ №3:

 Public Function MakeFolder(FolderPath As String)

' if 123 is a folder then the path shall have a backslash at the end"
' e.g. strFolderName = "d:abcdefh123\"

Dim OFL As Integer
Dim OFR As Integer
Dim trimmedFolderPath As String

         OFL = InStr(1, FolderPath, "")
         OFR = Len(FolderPath) - InStr(1, StrReverse(FolderPath), "")   1
        
        
         trimmedFolderPath = Left([FolderPath], OFL)
         
        Do While OFL <= OFR
         
           
                If Dir(trimmedFolderPath, vbDirectory) = "" Then
                    
                        MkDir trimmedFolderPath
                    
                Else
                        OFL = InStr(OFL   1, FolderPath, "")
                        
                        If OFL > 0 Then
                             
                             trimmedFolderPath = Left([FolderPath], OFL - 1)
                            
                        Else
                             Exit Function
                        End If
                End If
        Loop
End Function
  

Комментарии:

1. Ваш ответ можно улучшить, добавив больше информации о том, что делает код и как это помогает операционной системе.