Что нового

Ошибка с функцией Cells.Find

MRGYV

Новичок
Сообщения
29
Репутация
0
Добрый день!

Хотел написать код, который будет сортировать файлы по папкам в зависимости от содержания файла.
Помогите, пожалуйста, уже пару дней бьюсь не могу понять в чем ошибка:
Код:
#include<Excel.au3>
#include<FileOperations.au3>
#include <File.au3>
#include <Array.au3>


$sPath = @ScriptDir &"\1. тест\"
$FileList_up=_FileListToArray(@ScriptDir &"\","*",2)
If @error=4 Then
   MsgBox (0,"","Файлы/папки не найдены.")
    Exit
EndIf




$aFileList = _FO_FileSearch($sPath, '*.xlsx', True, 125, 0)
If @error Then Exit MsgBox(0, 'Сообщение', 'Ничего не найдено')
    For $i = 1 To $aFileList[0]
      $aPath = _FO_PathSplit($aFileList[$i]) ; делим путь на начало пути, имя и расширения
      $oExcel = _ExcelBookOpen($sPath & $aFileList[$i],0,True)
      
      For $j = 1 To $FileList_up[0]
         $Text = $FileList_up[$j]
         if   $Text <> "0. архив" and $Text <> "1. тест"  and then
            $rezult = $oExcel.Cells.Find($Text,Default, $xlValues, $xlPart, $xlByRows, $xlNext,False)
            If IsObj($rezult)=0 Then
               $n=1
               Else
               FileCopy($sPath & $aFileList[$i], $sPath & $aPath[0] & $Text &"\"& $aPath[1] & $aPath[2], 9)
            EndIf
         EndIf
      Next
      _ExcelBookClose($oExcel, 0, 0)  
      
   Next



MsgBox(0,"","Выполнено")
Exit


Причем раньше скрипт работал. Обновил autoit и не могу понят, что поменялось... Скрипт для Excel, перенес из старой версии.
 
Последнее редактирование:
Автор
M

MRGYV

Новичок
Сообщения
29
Репутация
0
Спасибо. Я скопировал из старой версии. Но, почему-то не работает. Сейчас попробую Вашу.
Сообщение автоматически объединено:

Стер новую версию Autoit, поставил старую. Пытался переделать, почему-то эта функция не работала. В старой версии работает.
 
Последнее редактирование:

xXx

╚{■_■}╗
Меценат
Сообщения
248
Репутация
95
... В старой версии работает.
Да не может она работать хотя бы по причине синтаксической ошибки:
Код:
; ...
if   $Text <> "0. архив" and $Text <> "1. тест"  and then
; ...

... Стер новую версию Autoit...
Здесь дело не в версии, а в подключаемых библиотеках. Закиньте в папку "Include" ниже следующие файлы, а в скрипте пропишите так:
Код:
; #include <Excel.au3>
#include <Excel_2003.au3>
#include <FileOperations.au3>
#include <File.au3>
#include <Array.au3>
; ...
 

Вложения

  • Excel_2003.au3
    64.7 КБ · Просмотры: 1
  • FileOperations.au3
    55.4 КБ · Просмотры: 1

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
По-быстрому переписал с учётом изменений :
Код:
#include<Excel.au3>
#include<FileOperations.au3>
#include <File.au3>
#include <Array.au3>

Global Const $xlByRows = 1
Global Const $xlNext = 1

$sPath = @ScriptDir &"\1. тест\"
$FileList_up=_FileListToArray(@ScriptDir &"\","*",2)
If @error=4 Then
   MsgBox (0,"","Файлы/папки не найдены.")
    Exit
EndIf

$aFileList = _FO_FileSearch($sPath, '*.xlsx', True, 125, 0)
If @error Then Exit MsgBox(0, 'Сообщение', 'Ничего не найдено')
    For $i = 1 To $aFileList[0]
      $aPath = _FO_PathSplit($aFileList[$i]) ; делим путь на начало пути, имя и расширения
      $oExcel=_Excel_Open(False)
      $oExcelBook = _Excel_BookOpen($oExcel,$sPath & $aFileList[$i])
      For $j = 1 To $FileList_up[0]
         $Text = $FileList_up[$j]
         if   $Text <> "0. архив" and $Text <> "1. тест"  then
            $rezult = $oExcelBook.ActiveSheet.Usedrange.Find($Text,Default, $xlValues, $xlPart, $xlByRows, $xlNext,False)
            If IsObj($rezult)=0 Then
               $n=1
            Else
               FileCopy($sPath & $aFileList[$i], $sPath & $aPath[0] & $Text &"\"& $aPath[1] & $aPath[2], 9)
            EndIf
         EndIf
      Next
      _Excel_Close($oExcel)

   Next

MsgBox(0,"","Выполнено")
Exit
 
Автор
M

MRGYV

Новичок
Сообщения
29
Репутация
0
Спасибо огромное, сейчас попробую!
Сообщение автоматически объединено:

Я смотрю, вместо "cells" теперь используется ".Usedrange." А где аналогичные команды посмотреть можно. Я обычно макрокодером в VBA код записывал, а потом его переделывал.
 
Автор
M

MRGYV

Новичок
Сообщения
29
Репутация
0
Можно в документации Microsoft по объектам Excel, можно так же заглянуть внутрь UDF , например Excel.au3 и посмотреть , как там реализовано.
В Excel Usedrange нет. Я к тому, что раньше функции в excel и модуле совпадали, а сейчас визуально отличаются, как я понял. Получается только Excel.au3 изучать?
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Worksheet.UsedRange property
Сообщение автоматически объединено:

Получается только Excel.au3 изучать?
Там изучать то особо и нечего, зачастую есть необходимость выполнить то , чего нет в стандартной библиотеке, тогда и обращаюсь к документации microsoft , иногда можно заглянуть внутрь UDF "Excel.au3" что-бы подсмотреть , как там реализованы функции.
 
Последнее редактирование:
Верх