http://www.excelworld.ru/forum/10-18978-1#155439 в продолжении этой темы... Добрый день! Подскажите пожалуйста как сделать, чтобы программа при открытие файла проверяла его название? например, чтобы открывало файлы которые начинаются с символом sm????.xlsm
http://www.excelworld.ru/forum/10-18978-1#155439 в продолжении этой темы... Добрый день! Подскажите пожалуйста как сделать, чтобы программа при открытие файла проверяла его название? например, чтобы открывало файлы которые начинаются с символом sm????.xlsmleskris
Сообщение отредактировал leskris - Среда, 09.09.2015, 07:24
Public Sub Что_то_делать() Dim FileName As String, pos As Long FileName = Получить_Путь_И_Имя_Файла pos = InStrRev(FileName, "\") If LCase$(Mid$(FileName, pos + 1)) Like "sm???.xlsm" Then MsgBox "Если так, то открываем" Else MsgBox "Если так, то сообщаем о неподходящем имени файла" End If End Sub
[/vba] Успехов
Доброе время суток Как то, видимо, так[vba]
Код
Public Sub Что_то_делать() Dim FileName As String, pos As Long FileName = Получить_Путь_И_Имя_Файла pos = InStrRev(FileName, "\") If LCase$(Mid$(FileName, pos + 1)) Like "sm???.xlsm" Then MsgBox "Если так, то открываем" Else MsgBox "Если так, то сообщаем о неподходящем имени файла" End If End Sub
получается что мы пытаемся открыть файл с непонятным C:\Мои\Работа\Прочее\ЕЛС\Для_PDF\*бух*.xls* + еще название файла [vba]
Код
Set wb = Workbooks.Open(Filename:=MyPath & myName)
[/vba] а если я убираю & myName оно все-равно не работает, я просто не доконца понимаю эти процессы поэтому не могу врубить как написать эту проверку..
получается что мы пытаемся открыть файл с непонятным C:\Мои\Работа\Прочее\ЕЛС\Для_PDF\*бух*.xls* + еще название файла [vba]
Код
Set wb = Workbooks.Open(Filename:=MyPath & myName)
[/vba] а если я убираю & myName оно все-равно не работает, я просто не доконца понимаю эти процессы поэтому не могу врубить как написать эту проверку..leskris
Сообщение отредактировал leskris - Среда, 09.09.2015, 14:48
да теперь все работает, спасибо большое! а как сделать чтобы все папки открывало внутри заданого пути? C:\Users\Alex\Desktop\111\*\ если так пишу не хочет
да теперь все работает, спасибо большое! а как сделать чтобы все папки открывало внутри заданого пути? C:\Users\Alex\Desktop\111\*\ если так пишу не хочетleskris
ВОобщем почитал литературу, и выяснил что есть понятие глубины поиска, но команда DIR не поддерживает это, есть функция FilenamesCollection но эксель почемуто пишет, что это неизвестная функция, хочу поменять в коде 1 строку на вторую
1 [vba]
Код
myname = dir(MyPath & Mask, vbDirectory)
[/vba]
2 [vba]
Код
Set myname = FilenamesCollection(MyPath , Mask, 999)
[/vba]
Что я не так делаю? какая функция позволяет открывать файлы во встроеных папках по заданному пути?
ВОобщем почитал литературу, и выяснил что есть понятие глубины поиска, но команда DIR не поддерживает это, есть функция FilenamesCollection но эксель почемуто пишет, что это неизвестная функция, хочу поменять в коде 1 строку на вторую
1 [vba]
Код
myname = dir(MyPath & Mask, vbDirectory)
[/vba]
2 [vba]
Код
Set myname = FilenamesCollection(MyPath , Mask, 999)
[/vba]
Что я не так делаю? какая функция позволяет открывать файлы во встроеных папках по заданному пути?leskris
Доброе время суток Pelena, какое-то странное смешение кода для рекурсивного вызова и VBA Dir и Scripting.FileSystemObject. Можно же было и с использованием Dir организовать проход по вложенным папкам. Наверное уж лучше так, если переходить к "современному" использованию COM-библиотек [vba]
Код
Public Sub test() Dim pShell As Object, pFolder As Object 'Получить объект оболочки ОС Set pShell = CreateObject("Shell.Application") 'получить объект начальной папки сканирования Set pFolder = pShell.Namespace("c:\test") 'запуск вывода путей и имён файлов по маске PrintAllFiles pFolder, "*.xlsx;*.xls" End Sub
Private Sub PrintAllFiles(ByVal inFolder As Object, ByVal FileMask As String) Dim pItem As Object, pItems As Object 'получить все объекты папки Set pItems = inFolder.Items 'выбрать только файлы по заданной маске pItems.Filter &H40, FileMask 'вывести полный путь и имя файла For Each pItem In pItems Debug.Print pItem.Path Next 'получить все объекты папки Set pItems = inFolder.Items 'получить только подпапки pItems.Filter &H20, "*.*" 'для каждой подпапки вызвать PrintAllFiles For Each pItem In pItems PrintAllFiles pItem.GetFolder, FileMask Next End Sub
[/vba]
Доброе время суток Pelena, какое-то странное смешение кода для рекурсивного вызова и VBA Dir и Scripting.FileSystemObject. Можно же было и с использованием Dir организовать проход по вложенным папкам. Наверное уж лучше так, если переходить к "современному" использованию COM-библиотек [vba]
Код
Public Sub test() Dim pShell As Object, pFolder As Object 'Получить объект оболочки ОС Set pShell = CreateObject("Shell.Application") 'получить объект начальной папки сканирования Set pFolder = pShell.Namespace("c:\test") 'запуск вывода путей и имён файлов по маске PrintAllFiles pFolder, "*.xlsx;*.xls" End Sub
Private Sub PrintAllFiles(ByVal inFolder As Object, ByVal FileMask As String) Dim pItem As Object, pItems As Object 'получить все объекты папки Set pItems = inFolder.Items 'выбрать только файлы по заданной маске pItems.Filter &H40, FileMask 'вывести полный путь и имя файла For Each pItem In pItems Debug.Print pItem.Path Next 'получить все объекты папки Set pItems = inFolder.Items 'получить только подпапки pItems.Filter &H20, "*.*" 'для каждой подпапки вызвать PrintAllFiles For Each pItem In pItems PrintAllFiles pItem.GetFolder, FileMask Next End Sub