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

Страницы: 1 2 3 4 5 6 7 8 След.
Искусственный интеллект (ИИ) на службе Excel, Искусственный интеллект напишет код макроса, формулы, функции и тд.
 

Открыл для себя возможности искусственного интеллекта (ИИ) для написания/правки макросов, формул и функций Excel. Ускорило решение моих задач, сняло нагрузку с форума.
Тема не новая, просто делюсь открытием для себя). Собрал код в 9000 знаков за пару дней.

Ответы рабочие, с комментариями в коде, если есть ошибки, то их указываешь и ИИ дает исправленный вариант.

Рекомендую.

1.      Нейросеть от Яндекса alice.yandex.ru/chat/

Бесплатную версию не тестил, оплатил платную максимальную 100р/мес и не заморачивался.

-Обычный режим диалога ограничен ответом в 4500 знаков вроде (бывает и меньше), запрос не ограничен вроде. Длинный код в ответе более 4000 знаков урезается, не выводится, приходиться делать дополнительный запрос типа «Далее код с этого места If processedCount = 0 Then» и выводится остальное, бывало несколько запросов пока весь код соберешь

-В режиме «Рассуждать» запрос ограничен 6000 знаков, ответ не ограничен вроде

P.S. В моем случае макрос 9000 знаков запрос в обычном режиме, далее переключался на «Рассуждать» и получал полный код для вставки.

Вывод: Из всех ИИ самая быстрая по ответам, с ней и работаю

2.      ИИ от Сбера giga.chat бесплатно, но ответ пишет очень медленно.

3.      Остальные все (chat.deepseek / chatgpt.org / ask.chadgpt.ru / gemini-free.com и тп) платные, или с ограничением по тексту, или без Рус.языка и прочие неудобства. Надо тестить.

P.S. Мой выбор Нейросеть от Яндекса мне подошла, на ней и остановился

Пользуйтесь!

Run-time error '91 Object variable or With block variable not set, ошибка возникает только при повторном запуске макроса
 
Цитата
написал:
Тогда нормально все с путями и доступом
Что с путями как раз.
В ИИ пересоздал макрос, вот его версия, тут работают все пути которые укажу
Все таки что то с с этим блоком в первом моем случае  strFile = Dir(strPath & "\*.xls*")
Код
Public aaa()

    Dim fso As Object
    Dim fld As Object
    Dim strSearch As String
    Dim strPath As String
    Dim strFile As String
    Dim wOut As Worksheet
    Dim wbk As Workbook
    Dim wks As Worksheet
    Dim lRow As Long
    Dim rFound As Range
    Dim firstAddress As String
    Dim arrFiles() As Variant
    Dim fileCount As Integer
    Dim processedCount As Integer
    Dim startTime As Double
    Dim i As Long
    
    On Error GoTo ErrHandler
    
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    
    ' Запрашиваем путь к папке и текст для поиска
    strPath = InputBox("Введите путь к папке:", "Форма поиска", "C:\Users\Den\Downloads")
    If strPath = "" Then Exit Sub
    
    strSearch = InputBox("Введите текст для поиска:", "Форма поиска", "")
    If strSearch = "" Then Exit Sub
    
    ' Проверяем существование папки
    Set fso = CreateObject("Scripting.FileSystemObject")
    If Not fso.FolderExists(strPath) Then
        MsgBox "Ошибка: Папка '" & strPath & "' не существует.", vbCritical
        Exit Sub
    End If
    
    Set fld = fso.GetFolder(strPath)
    
    ' Проверяем корректность объекта папки
    If fld Is Nothing Then
        MsgBox "Ошибка: Объект папки не создан.", vbCritical
        Exit Sub
    End If
    
    ' Альтернатива через Dir для надежности
    strFile = Dir(strPath & "\*.xls*")
    If strFile = "" Then
        MsgBox "Ошибка: В папке нет файлов Excel.", vbCritical
        Exit Sub
    End If
    
    ' Создаем новый лист для отчета
    Set wOut = Worksheets.Add
    lRow = 1
    
    With wOut
        .Cells(lRow, 1) = "Книга"
        .Cells(lRow, 2) = "Лист"
        .Cells(lRow, 3) = "Ячейка"
        .Cells(lRow, 4) = "Результат"
    End With
    
    ' Формируем массив файлов
    ReDim arrFiles(fld.Files.Count)
    i = 0
    While strFile <> ""
        arrFiles(i) = strPath & "\" & strFile
        i = i + 1
        strFile = Dir
    Wend
    
    ReDim Preserve arrFiles(i - 1)
    
    ' Начинаем обработку файлов
    startTime = Timer
    
    For processedCount = 0 To UBound(arrFiles)
        Set wbk = Workbooks.Open(FileName:=arrFiles(processedCount), UpdateLinks:=0, ReadOnly:=True, AddToMRU:=False)
        
        For Each wks In wbk.Worksheets
            Set rFound = wks.UsedRange.Find(strSearch)
            
            If Not rFound Is Nothing Then
                firstAddress = rFound.Address
                Do
                    lRow = lRow + 1
                    wOut.Cells(lRow, 1) = wbk.Name
                    wOut.Cells(lRow, 2) = wks.Name
                    wOut.Cells(lRow, 3) = rFound.Address
                    wOut.Cells(lRow, 4) = rFound.Value
                    Set rFound = wks.UsedRange.FindNext(rFound)
                Loop While Not rFound Is Nothing And rFound.Address <> firstAddress
            End If
        Next
        
        wbk.Close SaveChanges:=False
    Next
    
    wOut.Columns("A:D").EntireColumn.AutoFit
    
    MsgBox "Поиск завершен. Время выполнения: " & Format(Timer - startTime, "#0.0 сек.")
    
ExitHandler:
    Set wOut = Nothing
    Set wks = Nothing
    Set wbk = Nothing
    Set fld = Nothing
    Set fso = Nothing
    Application.ScreenUpdating = True
    Application.EnableEvents = True
    Exit Sub
    
ErrHandler:
    MsgBox Err.Description, vbExclamation
    Resume ExitHandler
    
End Sub
Run-time error '91 Object variable or With block variable not set, ошибка возникает только при повторном запуске макроса
 
Цитата
написал:
Напишите в А1 свой путь и запустите
с флеш на конце все есть \
без флеша НЕТ, даже там где сейчас работает норм по пути C:\Users\Den\Downloads
Run-time error '91 Object variable or With block variable not set, ошибка возникает только при повторном запуске макроса
 
Цитата
написал:
что даст Dir(путь)
Простите, не понимаю как использовать Dir(путь)
по настройкам не пойму, в папках ничего не менялось, да и по сути нигде не менялось. Может какой макрос запустил корявый, он что то поменял.
Сейчас макрос работает исправно только по двум путям, по остальным все выдаю ошибку.
Run-time error '91 Object variable or With block variable not set, ошибка возникает только при повторном запуске макроса
 
Цитата
написал:
А на какой путь меняете?
strPath = "C:\Users\Den\Downloads" и он рабочий

strPath = "C:\Users\Den\ПОИСК"  - ошибка
strPath = "C:\ПОИСК"  - ошибка
и тд

strPath = "D:\YandexDisk\...\Прайс"  и он рабочий
strPath = "D:\YandexDisk\...\Прайс2"  - ошибка
и  тд


Почему то работает только по паре путей старых, где то они прописались что ли. Новые пути никак не хочет принимать
Изменено: RUSBelorus - 15.07.2025 13:33:56
Run-time error '91 Object variable or With block variable not set, ошибка возникает только при повторном запуске макроса
 
ну я тогда незнаю, тупик.
Беру код со старого файла, все работает. Меняю путь и ошибка. При сем ранее менял пути и небыло проблем, сейчас хз....
Run-time error '91 Object variable or With block variable not set, ошибка возникает только при повторном запуске макроса
 
Цитата
написал:
Может буква диска 'C' кирилицей написана?
Нет, все проверял. Только меняю путь и ошибка. Причем и на диске D папка работала со старым путем, новый путь не хочет принимать
Run-time error '91 Object variable or With block variable not set, ошибка возникает только при повторном запуске макроса
 
Последний вариант то же с ошибкой.
Нашел проблему ошибки, это путь папки.

В старых версиях он был strPath = "C:\Users\Den\Downloads" и он рабочий
Начинаю меня папку назначения и ошибка «Object variable or With block variable not set»
Почему макрос не хочет принимать новые папки
Изменено: RUSBelorus - 15.07.2025 12:53:32
Run-time error '91 Object variable or With block variable not set, ошибка возникает только при повторном запуске макроса
 
День добрый, что то наковырял в настройках, сейчас у меня тупик
Выскакивает ошибка «Object variable or With block variable not set»

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

Суть макроса: Поиск информации в во всех файлах, которые лежат в папке C:\ПОИСК и вывод найденной информации на отдельный лист. Полезная штука для меня.

Код
'Attribute VB_Name = "search_in_files"

Public Sub Поиск_во_всех_файлах()

Dim fso As Object
Dim fld As Object
Dim strSearch As String
Dim strPath As String
Dim strFile As String
Dim wOut As Worksheet
Dim wbk As Workbook
Dim wks As Worksheet
Dim lRow As Long
Dim rFound As Range
Dim strFirstAddress As String

On Error GoTo ErrHandler

Application.ScreenUpdating = False

strPath = "C:\ПОИСК" 'поменять на ваш путь
strSearch = InputBox("Поиск в папке C ПОИСК:", "Форма поиска", "")

If strSearch = "" Then
Exit Sub
End If

Set wOut = Worksheets.Add
lRow = 1

With wOut
.Cells(lRow, 1) = "Книга"
.Cells(lRow, 2) = "Лист"
.Cells(lRow, 3) = "Ячейка"
.Cells(lRow, 4) = "Результат"

Set fso = CreateObject("Scripting.FileSystemObject")
Set fld = fso.GetFolder(strPath)
strFile = Dir(strPath & "\*.xls*")
Do While strFile <> ""
Set wbk = Workbooks.Open(fileName:=strPath & "\" & strFile, UpdateLinks:=0, ReadOnly:=True, AddToMRU:=False)
For Each wks In wbk.Worksheets
Set rFound = wks.UsedRange.Find(strSearch)
If Not rFound Is Nothing Then
strFirstAddress = rFound.Address
End If

Do
If rFound Is Nothing Then
Exit Do

Else
lRow = lRow + 1
.Cells(lRow, 1) = wbk.Name
.Cells(lRow, 2) = wks.Name
.Cells(lRow, 3) = rFound.Address
.Cells(lRow, 4) = rFound.Value
End If

Set rFound = wks.Cells.FindNext(After:=rFound)
Loop While strFirstAddress <> rFound.Address
Next
'wbk.Close (False)
strFile = Dir
Loop
.Columns("A:D").EntireColumn.AutoFit
End With

MsgBox "Все"
ExitHandler:
Set wOut = Nothing
Set wks = Nothing
Set wbk = Nothing
Set fld = Nothing
Set fso = Nothing
Application.ScreenUpdating = True
Exit Sub

ErrHandler:
MsgBox Err.Description, vbExclamation
Resume ExitHandler

End Sub
Изменено: RUSBelorus - 15.07.2025 12:15:52
Сохранить и скопировать файл в другую папку, Открытые и закрытые книги
 
Наверно конец, далее каждый сам). Пользуйтесь giga.chat, очень удобно.
Книги: исключительно только открытые
Макрос: Сохраняет все открытые книги в отдельную папку с последними изменениями. Сами файлы можно закрыть без сохранения.

PS Добавлена проверка на папку сохранения, если нет то создает ее. Если файл из списка не найден, то удаляет старый файл из целевой папки (если ранее он там был со старыми данными).

Код
Sub СохранитьИзмененияВоткрытыхКнигах()
    Dim booksToCheck() As Variant   ' Используем тип Variant для массива
    Dim activeWb As Workbook
    Dim targetPath As String
    Dim newFullPath As String
    Dim i As Integer
    
    Application.DisplayAlerts = False ' Убрать оповещение Microsoft Office, которое появляется при попытке удаления персональных данных или проверке конфиденциальной информации
    
   
    ' Список имен книг для проверки и сохранения
    booksToCheck = Array("Книга1.xls", "Книга2.xlsx", "Книга3.xlsx")
     
    ' Целевая папка для сохранения копий
    targetPath = "C:\Users\ВашПользователь\Documents\NovayaPapka"
    
    ' Проходим по списку книг
    For i = LBound(booksToCheck) To UBound(booksToCheck)
        Set activeWb = Nothing  ' Предварительно очищаем объект
        On Error Resume Next
        Set activeWb = Workbooks(CStr(booksToCheck(i)))
        On Error GoTo 0
        
        If Not activeWb Is Nothing Then
            ' Книга найдена, продолжаем работу
            activeWb.Activate
            
            ' Формируем полный путь для сохранения
            newFullPath = targetPath & "\" & activeWb.Name
            
            ' Проверяем существование папки
            If Len(Dir(targetPath, vbDirectory)) = 0 Then
                ' Папка не существует, пытаемся создать её
                On Error Resume Next
                MkDir targetPath
                
                If Err.Number <> 0 Then
                    MsgBox "Не удалось создать папку '" & targetPath & "'. Проверьте права доступа.", vbCritical
                    Err.Clear
                    On Error GoTo 0
                End If
                On Error GoTo 0
            End If
            
            ' Сохраняем книгу с изменениями в новую папку
            activeWb.SaveCopyAs fileName:=newFullPath
            
            'MsgBox "Изменённая книга '" & activeWb.Name & "' успешно сохранена в '" & newFullPath & "'!"
        Else
            ' Если книга не найдена, проверяем наличие старого файла и удаляем его
            newFullPath = targetPath & "\" & booksToCheck(i)
            
            If Len(Dir(newFullPath)) > 0 Then
                Kill newFullPath
                MsgBox "Файл '" & booksToCheck(i) & "' удалён, так как книга не была найдена.", vbInformation
            Else
                MsgBox "Книга с именем '" & booksToCheck(i) & "' не найдена, файл для удаления также отсутствует.", vbInformation
            End If
        End If
    Next i
End Sub
Изменено: RUSBelorus - 14.07.2025 23:11:58
Сохранить и скопировать файл в другую папку, Открытые и закрытые книги
 
Макрос создан по запросу к giga.chat
рабочий. Сохраняет изменения в открытых книгах по списку, копирует эти файлы в нужную папку. При этом исходный файл с изменениями открыт, его можно закрыть без сохранения.
Код
Sub CheckAndSaveMultipleBooks()
    Dim booksToCheck() As Variant   ' Используем тип Variant для массива
    Dim activeWb As Workbook
    Dim targetPath As String
    Dim newFullPath As String
    Dim i As Integer
    
    ' Список имен книг для проверки и сохранения
    booksToCheck = Array("Книга1.xls", "Книга2.xlsx", "Книга3.xlsx")
    
    ' Целевая папка для сохранения копий
    targetPath = "C:\Users\ВашПользователь\Documents\NovayaPapka"
    
    ' Проходим по списку книг
    For i = LBound(booksToCheck) To UBound(booksToCheck)
        On Error Resume Next
        Set activeWb = Workbooks(CStr(booksToCheck(i)))  ' Преобразование строки в нужный формат
        On Error GoTo 0
        
        If Not activeWb Is Nothing Then
            ' Перейти на найденную книгу
            activeWb.Activate
            
            ' Формируем полный путь для сохранения
            newFullPath = targetPath & "\" & activeWb.Name
            
            ' Проверяем существование папки
            If Dir(targetPath, vbDirectory) = "" Then
                MkDir targetPath
            End If
            
            ' Сохраняем книгу с изменениями в новую папку
            activeWb.SaveCopyAs Filename:=newFullPath
            
            'MsgBox "Изменённая книга '" & activeWb.Name & "' успешно сохранена в '" & newFullPath & "'!"
        Else
            MsgBox "Книга с именем '" & CStr(booksToCheck(i)) & "' не найдена.", vbInformation
        End If
    Next i
End Sub
Сохранить и скопировать файл в другую папку, Открытые и закрытые книги
 
Цитата
написал:
Sanja  написал: если сохранить его под другим именем/путем, то продолжать работу Вы уже будете в этом пересохраненном файле
Я понял сейчас. Проблемка...надо работать далее в изначальном файле.  
Сохранить и скопировать файл в другую папку, Открытые и закрытые книги
 
Цитата
написал:
Копировать открытый файл нельзя
Так не КОПИРОВАТЬ его, а СОХРАНИТЬ КАК в новую папку получится, будет там лежать с текущими изменениями и перезаписываться.
Сохранить и скопировать файл в другую папку, Открытые и закрытые книги
 
Цитата
написал:
Но!!! после сохранения в другом месте Вы уже будете работать с копией изначального файла, сохраненного по новому пути
Погодите, но меня устраивает что новый файл с изменениями будет сохранен в отдельную папку, мне его открытия и не нужно, там с ним будет работать другой макрос. А изначальный оригинальный файл должен быть открыт, тк информация в нем снова может быть обновлена в течении дня, его я не закрываю для удобства
Изменено: RUSBelorus - 14.07.2025 10:23:27
Сохранить и скопировать файл в другую папку, Открытые и закрытые книги
 
Цитата
написал:
Получится, но я в этом не участвую) бррр...
Закрывать книги нельзя, в них ведется работа. Открывать их заново после сохранения крайне неудобно.
Сохранить и скопировать файл в другую папку, Открытые и закрытые книги
 
А просто копировть блок под каждый файл не получится, по примеру

   'Dim sFileName As String, sNewFileName As String
       sFileName = "C:\Users\***\Downloads\Книга1.xls"    'имя файла для копирования
   sNewFileName = "C:\Users\***\Downloads\!ПОИСК\Книга1.xls"    'имя копируемого файла.
   If Dir(sFileName, 16) = "" Then MsgBox "Нет такого файла", vbCritical, "Ошибка": Exit Sub
   FileCopy sFileName, sNewFileName 'копируем файл

   'Dim sFileName As String, sNewFileName As String
       sFileName = "C:\Users\***\Downloads\Книга2.xls"    'имя файла для копирования
   sNewFileName = "C:\Users\***\Downloads\!ПОИСК\Книга2.xls"    'имя копируемого файла.
   If Dir(sFileName, 16) = "" Then MsgBox "Нет такого файла", vbCritical, "Ошибка": Exit Sub
   FileCopy sFileName, sNewFileName 'копируем файл

   'Dim sFileName As String, sNewFileName As String
       sFileName = "C:\Users\***\Downloads\Книга3.xls"    'имя файла для копирования
   sNewFileName = "C:\Users\***\Downloads\!ПОИСК\Книга3.xls"    'имя копируемого файла.
   If Dir(sFileName, 16) = "" Then MsgBox "Нет такого файла", vbCritical, "Ошибка": Exit Sub
   FileCopy sFileName, sNewFileName 'копируем файл
Сохранить и скопировать файл в другую папку, Открытые и закрытые книги
 
Цитата
написал:
ОДНУ 'Книга1.xlsx'?
Проверить все книги на изменения, сохранить все эти книги по новому пути (в данном примере один файл, по факту много и у каждого свой путь где есть и куда надо сохранить)
Изменено: RUSBelorus - 14.07.2025 09:41:26
Сохранить и скопировать файл в другую папку, Открытые и закрытые книги
 
Цитата
написал:
пересохранять нужно только одну?
Макрос взял с интернета, оба, соединять пытаюсь. Книг открытых много
Сохранить и скопировать файл в другую папку, Открытые и закрытые книги
 
Цитата
написал:
СОХРАНИТЬ КАК
Можно подсказать итоговый вариант макроса, я не силен в этом
Сохранить и скопировать файл в другую папку, Открытые и закрытые книги
 
Цитата
написал:
открытый в данный момент файл?
Так в этом и суть, да именно так. Для этого типа применен макрос "Сохранить измененный файл", он сохраняется с текущими изменениями и по сути должен копироваться, но не копируется(
Сохранить и скопировать файл в другую папку, Открытые и закрытые книги
 
Цитата
написал:
В Вашем реальном файле, в макросе так пути со звездочками и прописаны?
Нет конечно.
Открываю этот файл, ставлю тестово в любую ячейку напрмер 1 (получается файл изменен), запускаю макрос и ошибка на строке FileCopy sFileName, sNewFileName 'копируем файл
Сохранить и скопировать файл в другую папку, Открытые и закрытые книги
 
Вечер добрый, не работает код, ошибка.
Задача: В открытой книге проходят изменения (обновляется информация например из некоторых источников), эту книгу с последними изменениями нужно сохранить в отдельную папку.
Ошибка тут:     FileCopy sFileName, sNewFileName 'копируем файл
Код
Sub Copy_File22()
Dim Книга As Workbook 'Сохранить измененные файлы
Dim sFileName As String, sNewFileName As String 'Копировать файлы


'СохранениеВсехИзмененныхКниг2() 'Корректней сохраняет
    'Dim Книга As Workbook
    ' Проходим через каждую рабочую книгу в коллекции Workbooks
    For Each Книга In Workbooks
        ' Проверяем, имеет ли книга путь сохранения
        If Книга.Path <> "" Then
            ' Проверяем, была ли книга изменена
            ' с момента последнего сохранения
            If Not Книга.Saved Then
                ' Если книга была изменена, сохраняем ее
                Книга.Save
            End If
        End If
    Next Книга

    'Dim sFileName As String, sNewFileName As String
        sFileName = "C:\Users\***\Downloads\Книга1.xls"    'имя файла для копирования
    sNewFileName = "C:\Users\***\Downloads\!ПОИСК\Книга1.xls"    'имя копируемого файла.
    If Dir(sFileName, 16) = "" Then MsgBox "Нет такого файла", vbCritical, "Ошибка": Exit Sub
    FileCopy sFileName, sNewFileName 'копируем файл
End Sub
Изменено: RUSBelorus - 14.07.2025 21:10:58
Поиск во всех файлах, Указать папку поиска
 
Не осилить, сори. Останусь с вариантов одного пути.
Поиск во всех файлах, Указать папку поиска
 
Цитата
написал:
какая.
все уже смешалось и не понятно куда и что ставить, много советов.
Можно готовый вариант просто выложить ?
Изменено: RUSBelorus - 09.07.2025 12:12:33
Поиск во всех файлах, Указать папку поиска
 
Цитата
написал:
у неё доллар
ошибка.  
Поиск во всех файлах, Указать папку поиска
 
Цитата
написал:
Для второй версии - вместо обращения к одному адресу ставим цикл по массиву адресов.
если буквально вместо ставим в 27 строку то ошибка, скрин
Поиск во всех файлах, Указать папку поиска
 
Цитата
написал:
RUSBelorus , перед строкой 27 начать цикл типа
Простите, не понимаю конечный вид макроса, тем более их выше две версии
Изменено: RUSBelorus - 09.07.2025 11:01:56
Поиск во всех файлах, Указать папку поиска
 
Цитата
написал:
где укажите путь
Прошу прощения, может быть не так выразился.
В макросе сразу указать два пути, без диалогов

PS Можно конечно сделать два макроса с двумя путями папками, но речь идет про один макрос с отработкой по двум путям и сводному одному листу. Мудрено, но может быть для знающих это не сложно.

В целом задача минимум уже решена, спасибо.
Изменено: RUSBelorus - 08.07.2025 22:54:40
Поиск во всех файлах, Указать папку поиска
 
Цитата
написал:
Так попробуйте:
Спасибо, все норм вроде.
Можно ли указать вторую папку для поиска, это уже бонус второй).
Поиск во всех файлах, Указать папку поиска
 
День добрый, есть макрос поиска в инете от автора, в нем есть неудобство, а именно запрос выбора любого файла из папки поиска.
Можно ли чуть поправить и минуя выбор задать сразу путь папки в которой и будет поиск по имеющимся там файлам
Спасибо заранее.
Код
Sub Поиск_во_всех_файлах()
Dim iShtName$, iPath$, iFileName$, firstAddress$
Dim iSheet As Worksheet, iFoundSht As Worksheet
Dim iTempWB As Workbook, iBazaWB As Workbook
Dim TextToFind As Variant, iFoundRng As Range
Dim FD As FileDialog, iLastRow&
Dim FoundAny As Boolean

    TextToFind = Application.InputBox("Введите текст для поиска:", "Поиск")
    If TextToFind = "" Or TextToFind = False Then Exit Sub
    TextToFind = Trim(TextToFind)
    Set FD = Application.FileDialog(msoFileDialogFilePicker)
    With FD
        .AllowMultiSelect = False
        .Title = "Укажите любой файл в папке"
        .ButtonName = "Выбрать папку"
        If .Show = False Then Exit Sub Else iPath = Mid(.SelectedItems(1), 1, InStrRev(.SelectedItems(1), "\"))
    End With
    Set FD = Nothing
    Workbooks.Add
    Sheets.Add.Name = "Поиск"
    Set iFoundSht = ActiveSheet
    iFoundSht.Cells(1, 1) = "Ищем: " & TextToFind
    iFoundSht.Cells(1, 1).Font.Bold = True
    With Application
        .ScreenUpdating = False
        .Calculation = xlManual
        .StatusBar = "Идёт поиск..."
        .ShowWindowsInTaskbar = False
        iFileName = Dir(iPath & "*.xls")
        Do While iFileName$ <> ""
            Set iTempWB = Workbooks.Open(fileName:=iPath & iFileName, UpdateLinks:=False, ReadOnly:=True)
            For Each iSheet In iTempWB.Sheets
                If iSheet.FilterMode = True Then iSheet.ShowAllData
                Set iFoundRng = iSheet.Cells.Find(What:=TextToFind, LookIn:=xlFormulas, LookAt:=xlPart)
                If Not iFoundRng Is Nothing Then
                    FoundAny = True
                    firstAddress = iFoundRng.Address
                    Do
                        With iFoundSht
                            iLastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
                            If iLastRow = 1 Then iLastRow = 2
                            If iShtName <> iSheet.Name Then    'если новый файл
                                With .Cells(iLastRow + 2, 1)
                                    .Value = "Файл: " & iTempWB.Name & ", Лист: " & iSheet.Name
                                    .Font.Bold = True
                                End With
                            End If
                            iFoundRng.EntireRow.Copy Destination:=.Cells(.Cells(.Rows.Count, 1).End(xlUp).Row + 1, 1)    'копируем всю строку
                            iShtName = iSheet.Name
                        End With
                        Set iFoundRng = iSheet.Cells.FindNext(iFoundRng)
                    Loop While iFoundRng.Address <> firstAddress
                Else
                End If
            Next
            iTempWB.Close SaveChanges:=False
            iFileName = Dir
        Loop
        .StatusBar = False
        .ShowWindowsInTaskbar = True
        .EnableEvents = True
        .Calculation = xlCalculationAutomatic
        .ScreenUpdating = True
    End With
    If FoundAny = False Then
        MsgBox "Текст '" & TextToFind & "' ни в одном из файлов в папке:" & Chr(10) & iPath & Chr(10) & " не был найден!", 48, "Отчёт"
        iFoundSht.Parent.Close SaveChanges:=False
        Exit Sub
    End If
    MsgBox "Поиск " & TextToFind & " завершён!", 64, "Поиск"
End Sub
Изменено: RUSBelorus - 08.07.2025 21:29:32
Страницы: 1 2 3 4 5 6 7 8 След.
Наверх