Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
VBA скопировать из папок/подпапок нужные файлы по названию, поиск по маске с проверкой названия папок
 
Добрый день,

Прошу помочь с макросом для excel, который ищет и копирует файлы в новую папку.
Исходная папка содержит папку с названием, например, A1 (первого уровня), в которой находятся подпапки A11, A111, A1111 и т.д. В исходной папке много папок первого уровня с вложенными подпапками.

Макрос должен проверить, что название папки первого уровня начинается с латинской A-Z, если да, искать в такой папке и подпапках файлы XLSX, DOC или DOCX, у которых в имени есть "_RF" и нет "~". Найденные скопировать в новую подпапку "RF" с аналогичным названием A1, B1, C1 папки первого уровня с предварительной проверкой нет ли их, если нет, то создать.

Для наглядности дерево папок в целевой папке.

C:/TARGET FOLDER
|__A1_
|           |_RF   <<< сюда копировать найденное
|__B1_
|           |_RF
|__C1_
                             |_RF
Изменено: sylvio - 01.07.2023 08:47:24
переместить папки в папки по алфавиту
 
Огромное спасибо за помощь!

У меня получился такой макрос, который сортирует папки по алфавитным подпапкам
Код
Sub Move_to_ABC_Folders()
    Dim FSO As Object
    Dim FromPath As String
    Dim sbFolder As Object
  
    FromPath = "R:\test"
    Set FSO = CreateObject("scripting.filesystemobject")
    For Each sbFolder In FSO.getfolder(FromPath).subFolders
            If Len(sbFolder.Name) <> 1 Then
                If FSO.FolderExists(FromPath & "\" & Left(sbFolder.Name, 1) & "\") = False Then
                   FSO.CreateFolder (FromPath & "\" & Left(sbFolder.Name, 1) & "\")
                End If
                
                sbFolder.Move FromPath & "\" & Left(sbFolder.Name, 1) & "\"
            End If
        Next sbFolder
End Sub
Изменено: sylvio - 27.07.2017 13:26:48
переместить папки в папки по алфавиту
 
Добрый день,

Подскажите, что не так в коде?
Макрос должен переместить папки, которые начинаются на А, например, Арбуз, в папку "А".
По факту, он ищет на всю глубину папки Арбуз и перемещает в "А" подпапки.
Код
Sub Move_to_ABC_Folders()    
    Dim FSO As Object
    Dim FromPath As String
    Dim sbFolder As Object

    FromPath = "R:\test" 

    Set FSO = CreateObject("scripting.filesystemobject")

    For Each sbFolder In FSO.getfolder(FromPath).subFolders
        If sbFolder.Name Like "A*" Then
            sbFolder.Move "R:\test\A"        
        End If
    Next sbFolder
    

End Sub
массово изменить часть гиперссылки по данным в таблице
 
Добрый день

Пытаюсь отладить макрос для изменения части гиперссылки из-за изменившихся названий папок, но что-то не так.

Вот сам макрос:
Код
Sub ProcessFiles()
    Dim Filename, Pathname As String
    Dim wb As Workbook
    Pathname = "F:\! PROJECT\"
    Filename = Dir(Pathname & "*.xlsx")
    
    Do While Filename <> ""
        Set wb = Workbooks.Open(Pathname & Filename)
        DoWork
        wb.Close SaveChanges:=True
        Filename = Dir()
    Loop

End Sub

Sub DoWork()
    'Workbook("Renamer").
    Dim xHyperlink As Hyperlink
        For Each xHyperlink In Worksheets("Combine Sheet").Hyperlinks
            For i = 2 To 280
                xHyperlink.Address = Replace(xHyperlink.Address, Worksheets("old_new").Cells(i, 1) & "\", Worksheets("old_new").Cells(i, 2) & "\")
            Next
        Next
End Sub

Таблица "старое имя-новое имя папок" (old_new) находится в файле "Renamer", из которого запускаю макрос, а файлы со ссылками в папке F:\! PROJECT\.
Гиперссылки находятся на листах "Combine Sheet".

При запуске открывается первый файл и программа выдает ошибку 9.
Где может быть ошибка?
Вывод списка файлов подпапок на отдельные листы
 
Добрый день.
Помогите, пожалуйста, доработать макрос, чтобы на отдельные листы выводились списки файлов подпапок.
Код
Sub FileList()
    Dim V As String
    Dim BrowseFolder As String
     
    'открываем диалоговое окно выбора папки
    With Application.FileDialog(msoFileDialogFolderPicker)
        .Title = "Выберите папку или диск"
        .Show
        On Error Resume Next
        Err.Clear
        V = .SelectedItems(1)
        If Err.Number <> 0 Then
            MsgBox "Вы ничего не выбрали!"
            Exit Sub
        End If
    End With
    BrowseFolder = CStr(V)
     
    'добавляем лист и выводим на него шапку таблицы
    ActiveWorkbook.Sheets.Add
    With Range("A1:E1")
        .Font.Bold = True
        .Font.Size = 12
    End With
    Range("A1").Value = "Имя файла"
    Range("B1").Value = "Путь"
    Range("C1").Value = "Размер"
    Range("D1").Value = "Дата создания"
    Range("E1").Value = "Дата изменения"
     
    'вызываем процедуру вывода списка файлов
    'измените True на False, если не нужно выводить файлы из вложенных папок
    ListFilesInFolder BrowseFolder, True
End Sub
 
 
Private Sub ListFilesInFolder(ByVal SourceFolderName As String, ByVal IncludeSubfolders As Boolean)
    Dim FSO As Object
    Dim SourceFolder As Object
    Dim SubFolder As Object
    Dim FileItem As Object
    Dim r As Long
 
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set SourceFolder = FSO.getfolder(SourceFolderName)
 
    r = Range("A65536").End(xlUp).Row + 1   'находим первую пустую строку
    'выводим данные по файлу
    For Each FileItem In SourceFolder.Files
        Cells(r, 1).Formula = FileItem.Name
        Cells(r, 2).Formula = FileItem.Path
        Cells(r, 3).Formula = FileItem.Size
        Cells(r, 4).Formula = FileItem.DateCreated
        Cells(r, 5).Formula = FileItem.DateLastModified
        r = r + 1
        X = SourceFolder.Path
    Next FileItem
     
    'вызываем процедуру повторно для каждой вложенной папки
    If IncludeSubfolders Then
        For Each SubFolder In SourceFolder.SubFolders
            ListFilesInFolder SubFolder.Path, True
        Next SubFolder
    End If
 
    Columns("A:E").AutoFit
 
    Set FileItem = Nothing
    Set SourceFolder = Nothing
    Set FSO = Nothing
End Sub
Вставка формулы при изменении значения выпадающего списка
 
Спасибо, работает, как надо.
Смысл в использовании гиперссылок для подтягивания через формулы нужной информации, которая будет отображаться во всплывающем окошке.
Не подскажите, как сохранить начальное форматирование текста (bold) без отключения в глобальных настройках? При обновлении форматирование меняется на гиперссылку.
Вставка формулы при изменении значения выпадающего списка
 
Помогите подправить макрос.
Есть ячейка, в ней выпадающий список. Хочу, чтобы при изменении значения из списка в этой же ячейке прописывалась формула =HYPERLINK со значением из списка.
Макрос в таком виде вешает Эксель
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column <> 3 Then
    Exit Sub
    Else
    ActiveCell.Formula = "=HYPERLINK("""",""" & ActiveCell.Text & """)"
    End If
End Sub
макрос слияния текстовых файлов в книгу - не работает
 
Добрый день!
Прошу подправить макрос, не работает в Excel 2010.
По описанию должен вставлять в колонку А название cvs файлов, а в колонку В - их содержание, но выдает run time error '9'.
Debug подсвечивает строку
Код
Dim wsMstr  As Worksheet: Set wsMstr = ThisWorkbook.Sheets("MasterCSV")

Менял название листа на MasterCSV, но не помагает.

Код
Sub ImportCSVsWithReference()
'Author:    Jerry Beaucaire
'Date:      10/16/2010
'Summary:   Import all CSV files from a folder into a single sheet
'           adding a field in column A listing the CSV filenames

Dim wbCSV   As Workbook
Dim wsMstr  As Worksheet:   Set wsMstr = ThisWorkbook.Sheets("MasterCSV")
Dim fPath   As String:      fPath = "C:\2010\Import\"    'path to CSV files, include the final \
Dim fCSV    As String

If MsgBox("Clear the existing MasterCSV sheet before importing?", vbYesNo, "Clear?") _
    = vbYes Then wsMstr.UsedRange.Clear

Application.ScreenUpdating = False  'speed up macro

fCSV = Dir(fPath & "*.csv")         'start the CSV file listing

    Do While Len(fCSV) > 0
      'open a CSV file
        Set wbCSV = Workbooks.Open(fPath & fCSV)
      'insert col A and add CSV name
        Columns(1).Insert xlShiftToRight
        Columns(1).SpecialCells(xlBlanks).Value = ActiveSheet.Name
      'copy date into master sheet and close source file
        ActiveSheet.UsedRange.Copy wsMstr.Range("A" & Rows.Count).End(xlUp).Offset(1)
        wbCSV.Close False
      'ready next CSV
        fCSV = Dir
    Loop
 
Application.ScreenUpdating = True
End Sub
вставка гиперссылки после выбора файла в окне
 
Игорь,
большое спасибо, все работает.
вставка гиперссылки после выбора файла в окне
 
Помогите, пожалуйста, с макросом.
Хочу вставить адрес в функцию ГИПЕРССЫЛКА выбором файла в окне, при этом уже существующий текст ячейки использовать в качестве имени гиперрсылки. Не могу прописать перевод адреса файла в функцию. Макрос так и вставляет в ячейку =HYPERLINK(txtFileName;ActiveCell.text)
Код
Private Sub hyperlink()
    Dim fd As Office.FileDialog
    Dim s As String
    Set fd = Application.FileDialog(msoFileDialogFilePicker)
  With fd
      .AllowMultiSelect = False
      .InitialFileName = "D:\Docs"
      .Title = "Please select the file."
      .Filters.Clear
      .Filters.Add "PDF", "*.pdf"
      If .Show = True Then
        txtFileName = .SelectedItems(1)
      End If
   End With
   
   ActiveCell.Formula = "=HYPERLINK(txtFileName,ActiveCell.text)"
    
End Sub
ссылка на файл при совпадении названия
 
Большое спасибо, буду разбираться.
ссылка на файл при совпадении названия
 
Уважаемые форумчане,
подскажите, пожалуйста, макрос для вставки в ячейку ссылки на файл при совпадении текста в ячейке с частью названия файла.
Например, AAAA1112 в ячейке ссылается на файл AAAA1112_2016_Amlodip.pdf
Ячеек по листу много и файлов тоже (>1000) и они, возможно, расположены во вложенных папках.
Можно сократить название до точного совпадения и переместить в одну папку, если это критично.
вывод значений в виде строки с разделителем
 
Добрый день уважаемые форумчане.
Подскажите, как изменить код, чтобы функция делала вывод не в массив, а в виде строки с разделителем ";".
Хочу ее использовать в качестве источника для выпадающего списка.
Код
' ZVI:2009-10-17 http://www.planetaexcel.ru/forum.php?thread_id=10602
' Функция возвращает одномерный массив уникальных отсортированных значений диапазона Rng
Function NoDups(rng As Range)
  Dim arr(), i&, s$, x
  ' Считать данные в массив, для удобства ограничиться последней строкой данных листа
 arr = Intersect(rng.Parent.UsedRange, rng).Value
  ' Создать список
  On Error Resume Next
  With New Collection
    For Each x In arr()
      s = Trim(x)
      If Len(s) > 0 Then
        If IsEmpty(.Item(s)) Then
          For i = 1 To .Count
            If s < .Item(i) Then Exit For
          Next
          If i > .Count Then .Add s, s Else .Add s, s, Before:=i
        End If
      End If
    Next
    ' Скопировать из коллекции в массив
    ReDim arr(1 To .Count)
    For i = 1 To .Count
      arr(i) = .Item(i)
    Next
  End With
  ' Вернуть массив
 NoDups = arr()
End Function
Функция для отбора уникальных значений с сортировкой
 
Спасибо, попробовал вставить функцию NoDups от ZVI как источник данных для списка. Не работает, похоже, требует модификации.
Функция для отбора уникальных значений с сортировкой
 
Добрый день!
Подскажите, можно ли преобразовать этот макрос в функцию отбора уникальных значений с сортировкой, которую можно использовать в качестве источника для выпадающего списка (Data-Data validation-List-Source:)?

Вот макрос
Код
Sub Unique_Sorted()

Application.ScreenUpdating = False
' удаляем из колонки В старые значения
    Range("B1:B1000").Delete
' выбираем из колонки А уникальные и вставляем в колонку В начиная с ячейки В2
    ActiveSheet.Columns("A:A").AdvancedFilter Action:=xlFilterCopy, _
            CopyToRange:=ActiveSheet.Range("B2"), _
            Unique:=True
' сортируем отобранные значения по алфавиту
    ActiveSheet.Range("B2:B1000").Sort Key1:=ActiveSheet.Range("B2:B1000"), _
               Order1:=xlAscending, Header:=xlNo, OrderCustom:=1, _
               MatchCase:=False, Orientation:=xlTopToBottom
' удаляем заголовок, если он дублирует первое значение уникального списка
    If Range("B2") = Range("B3") Then
    Range("B2").Delete Shift:=xlUp
    End If

Application.ScreenUpdating = True
End Sub
Изменено: sylvio - 26.12.2016 11:51:50
Страницы: 1
Наверх