Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/проверка названия и расширения файла при его открытие - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » проверка названия и расширения файла при его открытие (Макросы/Sub)
проверка названия и расширения файла при его открытие
leskris Дата: Среда, 09.09.2015, 06:29 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 90
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016 (Office 365)
http://www.excelworld.ru/forum/10-18978-1#155439 в продолжении этой темы...
Добрый день!
Подскажите пожалуйста как сделать, чтобы программа при открытие файла проверяла его название? например, чтобы открывало файлы которые начинаются с символом sm????.xlsm


Сообщение отредактировал leskris - Среда, 09.09.2015, 07:24
 
Ответить
Сообщениеhttp://www.excelworld.ru/forum/10-18978-1#155439 в продолжении этой темы...
Добрый день!
Подскажите пожалуйста как сделать, чтобы программа при открытие файла проверяла его название? например, чтобы открывало файлы которые начинаются с символом sm????.xlsm

Автор - leskris
Дата добавления - 09.09.2015 в 06:29
anvg Дата: Среда, 09.09.2015, 08:02 | Сообщение № 2
Группа: Друзья
Ранг: Ветеран
Сообщений: 581
Репутация: 271 ±
Замечаний: 0% ±

2016, 365
Доброе время суток
Как то, видимо, так[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
[/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
[/vba]
Успехов

Автор - anvg
Дата добавления - 09.09.2015 в 08:02
leskris Дата: Среда, 09.09.2015, 08:18 | Сообщение № 3
Группа: Пользователи
Ранг: Участник
Сообщений: 90
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016 (Office 365)
спасибо, сейчас попробую )
 
Ответить
Сообщениеспасибо, сейчас попробую )

Автор - leskris
Дата добавления - 09.09.2015 в 08:18
_Boroda_ Дата: Среда, 09.09.2015, 09:29 | Сообщение № 4
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Можно в макросе из прошлой темы строку с MyPath перед ДИРом переписать так
[vba]
Код
MyPath = "C:\Мои\Работа\Прочее\ЕЛС\Для_PDF\*бух*.xls*"
[/vba]
Путь и маску файла перепишите свою.
Знак вопроса заменяет один любой символ, звездочка - любое количество любых символов.


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеМожно в макросе из прошлой темы строку с MyPath перед ДИРом переписать так
[vba]
Код
MyPath = "C:\Мои\Работа\Прочее\ЕЛС\Для_PDF\*бух*.xls*"
[/vba]
Путь и маску файла перепишите свою.
Знак вопроса заменяет один любой символ, звездочка - любое количество любых символов.

Автор - _Boroda_
Дата добавления - 09.09.2015 в 09:29
leskris Дата: Среда, 09.09.2015, 14:40 | Сообщение № 5
Группа: Пользователи
Ранг: Участник
Сообщений: 90
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016 (Office 365)
[vba]
Код
Sub List_files()
      Application.ScreenUpdating = 0
      With ThisWorkbook
         
        ' MyPath = Range("c1").Value
         MyPath = "C:\Users\Alex\Desktop\111\*.xls*"
          myName = Dir(MyPath, vbDirectory)
          i = 6
          Do While myName <> ""
              If myName <> "." And myName <> ".." And myName <> ThisWorkbook.Name Then
                  .Sheets("stat").Cells(i, 1) = myName
[/vba]
                 Set wb = Workbooks.Open(Filename:=MyPath & myName)
                  
              [vba]
Код
  .Sheets("stat").Cells(i, 2) = wb.Sheets("app").Range("b4")
[/vba] выдает ошибку на жирной строчке и почему-то не хочет открывать файлы во вложеных папках


Сообщение отредактировал leskris - Среда, 09.09.2015, 14:41
 
Ответить
Сообщение[vba]
Код
Sub List_files()
      Application.ScreenUpdating = 0
      With ThisWorkbook
         
        ' MyPath = Range("c1").Value
         MyPath = "C:\Users\Alex\Desktop\111\*.xls*"
          myName = Dir(MyPath, vbDirectory)
          i = 6
          Do While myName <> ""
              If myName <> "." And myName <> ".." And myName <> ThisWorkbook.Name Then
                  .Sheets("stat").Cells(i, 1) = myName
[/vba]
                 Set wb = Workbooks.Open(Filename:=MyPath & myName)
                  
              [vba]
Код
  .Sheets("stat").Cells(i, 2) = wb.Sheets("app").Range("b4")
[/vba] выдает ошибку на жирной строчке и почему-то не хочет открывать файлы во вложеных папках

Автор - leskris
Дата добавления - 09.09.2015 в 14:40
leskris Дата: Среда, 09.09.2015, 14:46 | Сообщение № 6
Группа: Пользователи
Ранг: Участник
Сообщений: 90
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016 (Office 365)
мне кажется что ошибка
Можно в макросе из прошлой темы строку с MyPath перед ДИРом переписать так

MyPath = "C:\Мои\Работа\Прочее\ЕЛС\Для_PDF\*бух*.xls*"

получается что мы пытаемся открыть файл с непонятным C:\Мои\Работа\Прочее\ЕЛС\Для_PDF\*бух*.xls* + еще название файла
[vba]
Код
  Set wb = Workbooks.Open(Filename:=MyPath & myName)
[/vba]
а если я убираю & myName оно все-равно не работает, я просто не доконца понимаю эти процессы поэтому не могу врубить как написать эту проверку..


Сообщение отредактировал leskris - Среда, 09.09.2015, 14:48
 
Ответить
Сообщениемне кажется что ошибка
Можно в макросе из прошлой темы строку с MyPath перед ДИРом переписать так

MyPath = "C:\Мои\Работа\Прочее\ЕЛС\Для_PDF\*бух*.xls*"

получается что мы пытаемся открыть файл с непонятным C:\Мои\Работа\Прочее\ЕЛС\Для_PDF\*бух*.xls* + еще название файла
[vba]
Код
  Set wb = Workbooks.Open(Filename:=MyPath & myName)
[/vba]
а если я убираю & myName оно все-равно не работает, я просто не доконца понимаю эти процессы поэтому не могу врубить как написать эту проверку..

Автор - leskris
Дата добавления - 09.09.2015 в 14:46
_Boroda_ Дата: Среда, 09.09.2015, 14:48 | Сообщение № 7
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Ну да, конечно. Вот так должно быть
[vba]
Код
Sub List_files()
     Application.ScreenUpdating = 0
     With ThisWorkbook
         .Sheets(1).Range("A2:B" & Cells(Cells.Rows.Count, 1).Row).ClearContents
         MyPath = "C:\Мои\Стереть\"
         Mask = "*_1.xls*"
         myName = Dir(MyPath & Mask, vbDirectory)
         i = 1
         Do While myName <> ""
             If myName <> "." And myName <> ".." And myName <> ThisWorkbook.Name Then
                 .Sheets(1).Cells(i, 1) = myName
                 Set wb = Workbooks.Open(Filename:=MyPath & myName)
[/vba]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеНу да, конечно. Вот так должно быть
[vba]
Код
Sub List_files()
     Application.ScreenUpdating = 0
     With ThisWorkbook
         .Sheets(1).Range("A2:B" & Cells(Cells.Rows.Count, 1).Row).ClearContents
         MyPath = "C:\Мои\Стереть\"
         Mask = "*_1.xls*"
         myName = Dir(MyPath & Mask, vbDirectory)
         i = 1
         Do While myName <> ""
             If myName <> "." And myName <> ".." And myName <> ThisWorkbook.Name Then
                 .Sheets(1).Cells(i, 1) = myName
                 Set wb = Workbooks.Open(Filename:=MyPath & myName)
[/vba]

Автор - _Boroda_
Дата добавления - 09.09.2015 в 14:48
leskris Дата: Среда, 09.09.2015, 15:01 | Сообщение № 8
Группа: Пользователи
Ранг: Участник
Сообщений: 90
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016 (Office 365)
да теперь все работает, спасибо большое! а как сделать чтобы все папки открывало внутри заданого пути?
C:\Users\Alex\Desktop\111\*\ если так пишу не хочет
 
Ответить
Сообщениеда теперь все работает, спасибо большое! а как сделать чтобы все папки открывало внутри заданого пути?
C:\Users\Alex\Desktop\111\*\ если так пишу не хочет

Автор - leskris
Дата добавления - 09.09.2015 в 15:01
leskris Дата: Пятница, 11.09.2015, 06:07 | Сообщение № 9
Группа: Пользователи
Ранг: Участник
Сообщений: 90
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016 (Office 365)
ВОобщем почитал литературу, и выяснил что есть понятие глубины поиска, но команда 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
Дата добавления - 11.09.2015 в 06:07
Pelena Дата: Пятница, 11.09.2015, 06:56 | Сообщение № 10
Группа: Админы
Ранг: Местный житель
Сообщений: 19197
Репутация: 4423 ±
Замечаний: ±

Excel 365 & Mac Excel
Посмотрите здесь


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеПосмотрите здесь

Автор - Pelena
Дата добавления - 11.09.2015 в 06:56
anvg Дата: Пятница, 11.09.2015, 07:40 | Сообщение № 11
Группа: Друзья
Ранг: Ветеран
Сообщений: 581
Репутация: 271 ±
Замечаний: 0% ±

2016, 365
Доброе время суток
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]


Сообщение отредактировал anvg - Пятница, 11.09.2015, 09:08
 
Ответить
СообщениеДоброе время суток
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]

Автор - anvg
Дата добавления - 11.09.2015 в 07:40
leskris Дата: Пятница, 11.09.2015, 08:24 | Сообщение № 12
Группа: Пользователи
Ранг: Участник
Сообщений: 90
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016 (Office 365)
спасибо вам обоим, попробую разобраться, но на первый взгляд похоже на дремучий лес, особенно первый вариант)))))


Сообщение отредактировал leskris - Пятница, 11.09.2015, 08:24
 
Ответить
Сообщениеспасибо вам обоим, попробую разобраться, но на первый взгляд похоже на дремучий лес, особенно первый вариант)))))

Автор - leskris
Дата добавления - 11.09.2015 в 08:24
Мир MS Excel » Вопросы и решения » Вопросы по VBA » проверка названия и расширения файла при его открытие (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!