Страницы: 1
RSS
Получить имя папки, из которой запущена книга
 
Есть макрос:

Код
Sub test()

    Dim folder As Variant
    folder = Split(ThisWorkbook.FullName, "\")
    MsgBox folder(UBound(folder) - 1)

End Sub


Подскажите, пожалуйста, каким образом он работает? Почему переменная Variant, а со String ошибка??
Как записать его в одну строку без переменных?
 
Цитата
tchack написал:
Как записать его в одну строку без переменных?
Так можно
Код
Sub test_(): MsgBox Split(ThisWorkbook.FullName, "\")(UBound(Split(ThisWorkbook.FullName, "\")) - 1): End Sub
Скажи мне, кудесник, любимец ба’гов...
 
Цитата
_Boroda_ написал:
Так можно

Спасибо.

А как это вообще работает??
Изменено: tchack - 19.09.2022 10:58:11
 
Почитайте справку по split
https://learn.microsoft.com/ru-ru/office/vba/language/reference/user-interface-help/split-function
Что-то там не совсем понятно написано. Короче - Сплит создает массив. Делит путь к файлу по разделителю "/". Нам нужен предпоследний кусок
Изменено: _Boroda_ - 19.09.2022 11:28:27
Скажи мне, кудесник, любимец ба’гов...
 
Цитата
tchack: Подскажите, пожалуйста, каким образом он работает? Почему переменная Variant, а со String ошибка?
разбивает строку по заданному разделителю в  СТРОКОВЫЙ массив с нижней границей 0 (всегда). В качестве переменной лучше использовать вариативную (Dim arr) (быстрее), но можно и динамический СТРИНГОВЫЙ (Dim arr() As String) массив (медленнее). Если разделитель в строке не найден то будет массив с одним элементом (arr(0)=StringIn) - исходной строкой.

Цитата
tchack: Как записать его в одну строку без переменных?
лучше не сплитовать 2 раза (у вас как раз 1 раз сплитуется):
Можно после folder  через двоеточие писать - чтобы в одну строку, но это совсем некрасиво
Изменено: Jack Famous - 19.09.2022 11:58:54
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Код
MsgBox Split(ThisWorkbook.Path, "\")(UBound(Split(ThisWorkbook.Path, "\")))
или
msgbox right(thisworkbook.Path, len(thisworkbook.Path)-instrrev(thisworkbook.Path,"\"))
Изменено: Ігор Гончаренко - 19.09.2022 12:59:11
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
А можно из пушки стрельнуть
Код
msgbox CreateObject("Scripting.FileSystemObject").GetFolder(thisworkbook.path).name
По вопросам из тем форума, личку не читаю.
 
tchack, метод Split признает переменную только типа Variant
 
Цитата
RAN: метод Split признает переменную только типа Variant
откуда такая уверенность?
Код
Option Explicit
Sub t()
Dim a() As String
    a = Split("1 2 3")
    MsgBox a(1)
End Sub
Переменная для Split'а | Variable for Split
Изменено: Jack Famous - 19.09.2022 14:56:47
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Jack Famous написал:
откуда
Давно это было... Может тогда и ошибся . Но с тех пор пишу Dim spl, и не парюсь.
 
Цитата
БМВ написал:
А можно из пушки стрельнуть

Супер!

Всем спасибо за потраченное время!
 
Jack Famous, 19.09.2022 мне лениво было спорить...
Сегодня понадобилось
Код
spl = Split(Mid$(s, 2), "~")

Если   Dim s$, spl - все работает
Если    Dim s$, spl() - Type mismatch
Так что позвольте вам не позволить......
Копнул глыбже....
В # 9
Код
Dim a() As String - все работает
Dim a() - Type mismatch
Dim a - все работае
т
 
RAN, сложно читать некоторые ваши посты ,т.к. либо вообще предложения не связаны, либо общий смысл поста неясен…
Вот и сейчас - что вы хотели сказать?
Изменено: Jack Famous - 09.10.2022 18:15:15
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Я хотел сказать, что для использования в функции Split, переменная не может быть объявлена как массив Variant. (Dim a() as Variant)
 
Цитата
RAN: для использования в функции Split, переменная не может быть объявлена как массив Variant. (Dim a() as Variant)
Цитата
Jack Famous: В качестве переменной лучше использовать вариативную (Dim arr) (быстрее), но можно и динамический СТРИНГОВЫЙ (Dim arr() As String) массив (медленнее).
Цитата
Jack Famous по ссылке из #9: Интересная штука: в качестве переменной для результата Split'а- "жирная" (по весу) вариативная почти в 2 раза быстрее узко заточенного динамического строкового (другие не подходят) массива
так, вроде, ничего нового…
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
По вопросам из тем форума, личку не читаю.
 
БМВ, Картинка со звуком :D
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
БМВ, Расцветки почти совпадают.
 
Если возражений нет, то я почищу от мусора тему, а то отошли совершенно.
По вопросам из тем форума, личку не читаю.
 
RAN, я с уважением, без наезда  :)
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Страницы: 1
Наверх