#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. Ваш ответ можно улучшить, добавив больше информации о том, что делает код и как это помогает операционной системе.