powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Как обычно: перетаскивнаие ячеек
69 сообщений из 69, показаны все 3 страниц
Как обычно: перетаскивнаие ячеек
    #34763004
Хелпя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем доброе время суток!

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

Есть один файл (далее База) в который необходимо подтягивать данные с разных ячеек разбросанных по листу и + с разными форматами данных, и все это с разных файлов (далее Файлы). Эти данные надо складывать в Базу в виде простой таблицы. Такс это первое.
Второе то, что эти все Файлы лежат на сети в постоянных определенных каталогах, но в разных.

Так как я понимаю алгоритм должен быть следующим - загрузив Базу, нажимаем на кнопку "Подтянуть". Под этой кнопкой прописаны следующая процедура: База поочередно обращается в каждый указаный на сетевом ресурсе каталог и видя екселевский файл проверяет его на состояние был ли он ранее затянут в Базу или нет. Если нет, то файл затягивается, по указаному скрипту. Если же да, то скрипт первого уровня файла База переходит с проверкой на следующий файл, который находится в каталоге, а если в каталоге больше нет Файлов, то в следующий каталог.
И еще одна ситуация, если скрипт увидел, что Файл не был ранее затянут в файл База, но данные повторяются (т.е. есть и обратная проверка на лету, на повторяемость данных), то необходимо выдать об этом уведомление и продолжить затягивание в файл База. После того как скрипт закончится выделить красным цветом потвторяющиеся данные. Конечно, на сколько хватает моих познаний, это лучше сделать под другой кнопкой, напр., "Проверить". Которая и будет производить проверку Базы на повторяемость.

Итак, если кто-то понял че я написал и может чем-то помочь, то буду очень признателен. Посколкьу я даже не пойму с какого боку подойти - нету творческого настроя после отпуска :(

Всем заранее ПАСИБА!!!!!
...
Рейтинг: 0 / 0
Как обычно: перетаскивнаие ячеек
    #34763137
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ХелпяВсем доброе время суток!
Перед освещением проблему хочу сказать, что перерыл форум и не нашел того что мне надо, хотя был уверен на 100 %, что этот вопрос уже поднимался. Приступим.


А ты думал слово в слово найти то что тебе нужно?
Не обижайся, но твы прав всё это уже обсуждалось, только придётся искать по отдельности, например:
- пербор файлов Эксель в каталоге
- проверка повторов

Вопросы наврное тоже разбить на части, например:
- как запоминать, что файл уже был добавлен в базу?
...
Рейтинг: 0 / 0
Как обычно: перетаскивнаие ячеек
    #34763561
Хелпя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Deggasad
Не обижайся, но твы прав всё это уже обсуждалось, только придётся искать по отдельности,
Вопросы наврное тоже разбить на части, например:
- как запоминать, что файл уже был добавлен в базу?

я не обижаюсь...и кстати Deggasad большое Человеческое спс тебе за всю ранее предоставленную мне помощь!!!!

Самое сложное скорее всего будет это как прописать проверку загонялся ли файл в Базу и пербор файлов Эксель в каталоге.
...
Рейтинг: 0 / 0
Как обычно: перетаскивнаие ячеек
    #34763833
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хелпя Deggasad
Не обижайся, но твы прав всё это уже обсуждалось, только придётся искать по отдельности,
Вопросы наврное тоже разбить на части, например:
- как запоминать, что файл уже был добавлен в базу?

я не обижаюсь...и кстати Deggasad большое Человеческое спс тебе за всю ранее предоставленную мне помощь!!!!

Самое сложное скорее всего будет это как прописать проверку загонялся ли файл в Базу и пербор файлов Эксель в каталоге.

Ну беребор файлов в каталоге так (это для файлов с рашширением XLS)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Sub Выбрать()

Dim MyPath As String, iFileName As String 
 
MyPath = "Здесь путь твой\"
 
iFileName = Dir(MyPath)

 Do While iFileName <> ""
      If UCase(Right(iFileName,  3 )) = "XLS" Then
         msgbox iFileName
      End If
  iFileName = Dir
 Loop


End Sub

А проверку думаю как раз наоборот несложно, варианты
1) добавлять имена файлов, которые добавлены где нибуть в сводную и потом проверять имя на присутствие в этом списке
2) добавлять в исходные книги, где-нибуть в одном и том же месте какое-либо слово, например "Добавлена" и потом каждую книгу проверять на этот признак
...
Рейтинг: 0 / 0
Как обычно: перетаскивнаие ячеек
    #34763882
Pavel55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я думаю тут сразу можно указать расширение файла в

Код: plaintext
iFileName = Dir(MyPath & ".xls")

чтобы не делать потом

Код: plaintext
If UCase(Right(iFileName,  3 )) = "XLS" Then
...
Рейтинг: 0 / 0
Как обычно: перетаскивнаие ячеек
    #34764166
Хелпя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
мда… нашел много разных тем по поводу копирования ячеек с одного файла в другой, но че-то ни как не въеду, как и кто за что отвечает….можете привести пример с коротким описанием что кто делает в скрипте. Именно копирование 5 ячеек с одного файл в другой, с указанного пути….
...
Рейтинг: 0 / 0
Как обычно: перетаскивнаие ячеек
    #34765804
Хелпя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
люди!!!! наверное покажите скрипт, который копирует определенные ячейки с файла, который выделишь и все это надо делать по нажатию кнопки.............а то я все просмотрел и у мня что-то не получается...пасибо.....
...
Рейтинг: 0 / 0
Как обычно: перетаскивнаие ячеек
    #34765824
Фотография Rampage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хелпялюди!!!! наверное покажите скрипт, который копирует определенные ячейки с файла, который выделишь и все это надо делать по нажатию кнопки.............а то я все просмотрел и у мня что-то не получается...пасибо.....
чет нифига не понял в этой фразе... наверно покажи файлы, и что куда копировать ..
...
Рейтинг: 0 / 0
Как обычно: перетаскивнаие ячеек
    #34765866
Хелпя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
та файл тут не причем, если честно он просто еще не готов....мне нужно что бы с файла 1.xls, 2.xls и 3.xls (то есть который я укажу) с ячеек А2, В5 и К6 копирывались по порядку данные в файл 4.xls. И все это должно быть по нажатию кнопки.
Так вот понятней?
...
Рейтинг: 0 / 0
Как обычно: перетаскивнаие ячеек
    #34766003
Хелпя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот фал с которого надо копирывать данные. А именно с ячеек которые обведены линиями. И таких файлов может быть несколько.....а все копирывать надо в один какой то совсем другйо файл
...
Рейтинг: 0 / 0
Как обычно: перетаскивнаие ячеек
    #34766116
Хелпя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
не перечитал все сцылки и что-то у мня не выходит копирование
...
Рейтинг: 0 / 0
Как обычно: перетаскивнаие ячеек
    #34772816
Хелпя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Deggasad мож у вас есть аська или мыло, что подастовать и там же.... что-то у меня не получается со всем.....
...
Рейтинг: 0 / 0
Как обычно: перетаскивнаие ячеек
    #34772931
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хелпя2 Deggasad мож у вас есть аська или мыло, что подастовать и там же.... что-то у меня не получается со всем.....

Я свой e-mail не скрывал, он в профиле...
...
Рейтинг: 0 / 0
Как обычно: перетаскивнаие ячеек
    #34772988
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хелпявот фал с которого надо копирывать данные. А именно с ячеек которые обведены линиями. И таких файлов может быть несколько.....а все копирывать надо в один какой то совсем другйо файл

Посмотрел я твой файл и что?
Основной то вопрос в том, как будет выглядеть сводная информация, какова будет её структура?
Ну и ещё важно как будут выбираться ячейки из исходных листов: либо будут выбиратся все обведённые как сейчас по-очереди(по формату т.е.); либо будут указаны все ячейки жёстко (что более правильно, если шаблон жёсткий)
...
Рейтинг: 0 / 0
Как обычно: перетаскивнаие ячеек
    #34774098
Хелпя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ситуация следующая.
Есть несколько файлов одинаковой структуры, данный файл был мною выложен (algorutm.xls). Надо что бы с этих файлов копирывались данные в файл База.xls. Ячейки будут указаны жестоко, т.е. один раз прописать их в скрипте и не менять. Все файлы, которые будут заливаться в Базу будут иметь одинаковую структуру. А потом уже начинается, что бы копирывание проходило из всех екселевских файлов (даже возможно что все они будут иметь какие-то одинаквые символы в начале имени) со всех указаных в скрипте каталогов. Возможно ж такое?? У меня что-то не cовсем получается совместить все прочтенные мною форумы в один скрипт.

Т.е. на сколько я понимаю должен быть вот такой алгоритм:

1. После нажатия на кнопку скрипт побежал по адресу в каталоги
2. В каталогах он смотрит есть ли екселевские файлы
3. Если файлы есть, то происходит копирывание указаных ячеек в Базу.
4. Если же файлов в каталоге нет, то скрипт бежит дальше по каталогам и ищет екселивские файлы.
5. Если нигде нет файлов то выдается типа, сообщения типа "файлов нет".

Вот такая ерундень....
...
Рейтинг: 0 / 0
Как обычно: перетаскивнаие ячеек
    #34776254
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты определись тебе в каталогах или в каталогах с подкаталогами
...
Рейтинг: 0 / 0
Как обычно: перетаскивнаие ячеек
    #34776379
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шматри, набрасал

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
'Выбрать файлы XLS в каталоге и подкаталогах
Sub Запуск()
Dim fso As New FileSystemObject

' Запускаешь процедуру перебора книг в каталоге и подкаталогах с указанием пути
' в примере для 3-х каталогов, можно добавить строк скольеко нужно и изменить путь
 ВыбратьКаталогПодкаталогиFSO fso.GetFolder("Y:\!")
 ВыбратьКаталогПодкаталогиFSO fso.GetFolder("\\Ukdc\Common\СФД\Общая\!sad")
 ВыбратьКаталогПодкаталогиFSO fso.GetFolder("Y:\sad")
End Sub

'FileSystemObject - БИБЛИОТЕКА  Microsoft Scripting Runtime
Sub ВыбратьКаталогПодкаталогиFSO(Папка As Folder)
Dim fso As New FileSystemObject, fold As Folder, iFile As File

 For Each fold In Папка.SubFolders
   ВыбратьКаталогПодкаталогиFSO fold        'лезем в рекурсию
 Next
  
 For Each iFile In Папка.Files
   If UCase(Right(iFile,  3 )) = "XLS" Then
      ОбработчикФайла (iFile.Path)
   End If
 Next
End Sub

Sub ОбработчикФайла(pathFile As String)
Dim openWb  As Workbook
 Workbooks.Open pathFile, False
 Set openWb = ActiveWorkbook
 'Вместо строки MsgBox вставить любую обработку открытой книги openWb
 'Можно не открывать книгу а скопировать данные из закрытой книги, но об этом в следующий раз
  MsgBox "Имя открытой книги - " & openWb.Name
 
 openWb.Close False
End Sub
...
Рейтинг: 0 / 0
Как обычно: перетаскивнаие ячеек
    #34776697
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шматри ящё

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
Dim svod As Workbook
Dim fso As New FileSystemObject

Sub Запуск()
' назначаем сводную книгу
Set svod = Workbooks("База.xls")
'очищаем сводный лист от старья
svod.Sheets("Лист1").Range("A10:BF65536").ClearContents
' Запускаешь процедуру перебора книг в каталоге и подкаталогах с указанием пути
' в примере для 3-х каталогов, можно добавить строк скольеко нужно и изменить путь
 ВыбратьКаталогПодкаталогиFSO fso.GetFolder("Y:\!")
 ВыбратьКаталогПодкаталогиFSO fso.GetFolder("\\Ukdc\Common\СФД\Общая\!sad")
 ВыбратьКаталогПодкаталогиFSO fso.GetFolder("Y:\sad")
End Sub

'Выбрать файлы XLS в каталоге и подкаталогах
'FileSystemObject - БИБЛИОТЕКА  Microsoft Scripting Runtime
Sub ВыбратьКаталогПодкаталогиFSO(Папка As Folder)
Dim fold As Folder, iFile As file

 For Each fold In Папка.SubFolders
   ВыбратьКаталогПодкаталогиFSO fold        'лезем в рекурсию
 Next
  
 For Each iFile In Папка.Files
   If UCase(Right(iFile,  3 )) = "XLS" Then
      ОбработчикФайла (iFile.path)
   End If
 Next
End Sub


Sub ОбработчикФайла(foolpathFile As String)

 Dim fname As String, fpath As String, sh As String
 Dim lastRow As Long
    ' имя исходного файла
    fname = Split(foolpathFile, "\")(UBound(Split(foolpathFile, "\")))
    ' путь к исходному файлу
    fpath = Left(foolpathFile, Len(foolpathFile) - Len(fname))
    ' Лист в исходных файлах
    sh = "Лист1"

    With svod.Sheets("Лист1")
     ' следующая после последней строка на сводном листе
     lastRow = .Cells.Find("*", , , , xlByRows, xlPrevious).Offset( 1 ).Row
     ' заполнение этой строки значениями из очередной книги
     ' слева указываешь столбцы из сводного листа
     ' справа указываешь адресс ячейки которую нужно перенести в данный столбец
        .Range("B" & lastRow).Value = GetCel(fpath, fname, sh, "A1")
        .Range("C" & lastRow).Value = GetCel(fpath, fname, sh, "A2")
        .Range("D" & lastRow).Value = GetCel(fpath, fname, sh, "A3")
        ' /// и т.д.
        
    End With
        
End Sub
' Функция получающая одну ячейку из закрытой книги
' Если возвращает #ССЫЛКА!, то скорее всего указанного листа в данной книге не существует
Private Function GetCel(fpath, fname, sh, rngStr)
  Dim formulaStr As String
    formulaStr = "'" & fpath & "[" & fname & "]" & sh & "'!" & Range(rngStr).Address(, , xlR1C1)
    Debug.Print formulaStr
    GetCel = ExecuteExcel4Macro(formulaStr)
End Function
...
Рейтинг: 0 / 0
Как обычно: перетаскивнаие ячеек
    #34776710
Хелпя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Выдает вот такую ошибку User-defined type not defined на сколько я понимаю надо подлкючить какой-то модуль, а вот какой?

И еще по поводу копирывания. Я так понял что прописываются все необходимые ячейки вместо вот этого "MsgBox "Имя открытой книги - " & openWb.Name".
...
Рейтинг: 0 / 0
Как обычно: перетаскивнаие ячеек
    #34776712
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
строку
Код: plaintext
    Debug.Print formulaStr
из функции можно удалить
...
Рейтинг: 0 / 0
Как обычно: перетаскивнаие ячеек
    #34776724
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ХелпяВыдает вот такую ошибку User-defined type not defined на сколько я понимаю надо подлкючить какой-то модуль, а вот какой?

И еще по поводу копирывания. Я так понял что прописываются все необходимые ячейки вместо вот этого "MsgBox "Имя открытой книги - " & openWb.Name".

1) Меню Tools - References - поставить галку на Microsoft Scripting Runtime

2) Да правильно понял, только я уже выложил пример без открытия книги.
...
Рейтинг: 0 / 0
Как обычно: перетаскивнаие ячеек
    #34776757
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ах да кстате совсем забыл
идея с методом ExecuteExcel4Macro принадлежит vkodor (могу ошибаться, но по крайней мере я у него подсмотрел)
...
Рейтинг: 0 / 0
Как обычно: перетаскивнаие ячеек
    #34777669
Хелпя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сразу Огромное СПАСИБО Deggasad за личную помощь!!!!!!! А также СПАСИБО vkodor!!!!!

DeggasadАх да кстате совсем забыл
идея с методом ExecuteExcel4Macro принадлежит vkodor (могу ошибаться, но по крайней мере я у него подсмотрел)

2 Deggasad Все работает, все отлично!!! Может я как-то смогу отблагодорить?????

Ну, и как всегда при работе возникают новые мысли в усовершенствовани скрипта.

1.Я так понял, что строка If UCase(Right(iFile, 3)) = "XLS" Then смотрит именно на то что файл екселевский. А для упрощения я решил пусть поиск будет производится по всем екселевским файлам у тех у кого имя начинается на alg. И пытаюсь пропистаь, оно чео то не хочет молчит и все. Скоорее всего я не правильно прописываю:If UCase(Right(iFile, 3)) = "alg*.xls"

2. А также я хочу сразу сделать что бы файл шол фтп, я эт вычитал на http://www.rondebruin.nl/copy7.htm. Прописываю адрес \\Prosmotr po\Individualnie и не работатет. Пишет что нет такого пути, или этого из-за того что у меня вход на фтп в подкаталоги только под паролем, пофамильно?
...
Рейтинг: 0 / 0
Как обычно: перетаскивнаие ячеек
    #34777706
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все благодарности автору книги: Джону Уокенбаху "Проффесиональное програмирование на VBA Excel2002".
...
Рейтинг: 0 / 0
Как обычно: перетаскивнаие ячеек
    #34777750
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хелпя

1.Я так понял, что строка If UCase(Right(iFile, 3)) = "XLS" Then смотрит именно на то что файл екселевский. А для упрощения я решил пусть поиск будет производится по всем екселевским файлам у тех у кого имя начинается на alg. И пытаюсь пропистаь, оно чео то не хочет молчит и все. Скоорее всего я не правильно прописываю:If UCase(Right(iFile, 3)) = "alg*.xls"

2. А также я хочу сразу сделать что бы файл шол фтп, я эт вычитал на http://www.rondebruin.nl/copy7.htm. Прописываю адрес \\Prosmotr po\Individualnie и не работатет. Пишет что нет такого пути, или этого из-за того что у меня вход на фтп в подкаталоги только под паролем, пофамильно?
1)
Код: plaintext
1.
2.
 For Each iFile In Папка.Files
   If UCase(iFile.Name) Like "ALG*.XLS" Then ОбработчикФайла (iFile.path)
 Next
2) Так на вскидку не скажу как с паролями папки открывать
...
Рейтинг: 0 / 0
Как обычно: перетаскивнаие ячеек
    #34777768
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстате UCase() функция приводящая текст к верхнему регистру, поэтому сравниваться должно именно с верхним регистром "ALG*.XLS", это чтобы избежать ошибки с регистрами ниписания имён и расширений
...
Рейтинг: 0 / 0
Как обычно: перетаскивнаие ячеек
    #34777786
Хелпя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkodorВсе благодарности автору книги: Джону Уокенбаху "Проффесиональное програмирование на VBA Excel2002".

эта книжка на русском языке?? она весит 150 метров?? эта она
...
Рейтинг: 0 / 0
Как обычно: перетаскивнаие ячеек
    #34778015
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хелпя
эта книжка на русском языке?? она весит 150 метров?? эта она
Да книга на русском. Только в эл. виде у меня её нет. Где ты её надыбал?
...
Рейтинг: 0 / 0
Как обычно: перетаскивнаие ячеек
    #34778030
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если есть у кого в элекстронном виде, дайте сцылочку (т.е. выложите куда нить)
...
Рейтинг: 0 / 0
Как обычно: перетаскивнаие ячеек
    #34778091
Хелпя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
http://zipsites.ru/books/uokenbakh_prof_progre_na_vba_v_excel_2002/ думаю сегодня попробывать тянуть ее
...
Рейтинг: 0 / 0
Как обычно: перетаскивнаие ячеек
    #34778140
Хелпя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А еще одно.....что добавить, что бы те файлы которые уже втянуты в Базу больше туда не втягивались. Скорее всего что бы сравнивалось по соержимому, а непо названию файла:

1. в екселе оставлять запись об этом на листе 2 и потом сравнивать, но мне кажется что это не самое лучшее.
2. втянутые файлы удалять с каталога
3. втянутые файлы премещать в определенную папку, которая будет находится в каждем подкаталоге (она будет одинаковая)
...
Рейтинг: 0 / 0
Как обычно: перетаскивнаие ячеек
    #34778282
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ХелпяА еще одно.....что добавить, что бы те файлы которые уже втянуты в Базу больше туда не втягивались. Скорее всего что бы сравнивалось по соержимому, а непо названию файла:

1. в екселе оставлять запись об этом на листе 2 и потом сравнивать, но мне кажется что это не самое лучшее.
2. втянутые файлы удалять с каталога
3. втянутые файлы премещать в определенную папку, которая будет находится в каждем подкаталоге (она будет одинаковая)

Тут уж решать вам. Если нужно удалять, так удаляйте, только есть большая вероятность данные потерять, особенно если удалять сразу в макросе.

Незнаю почему вам не нравится, но мне кажется наиболее симпатичным 1-й варинат (только на листе 1), но только чтобы запись оставить, уже нужно либо файл открывать, либо ADO использовать (вообщем отдельную процедурку нужно будет писать)

А нельзя их все оставлять и каждый раз по новой подтягивать?
...
Рейтинг: 0 / 0
Как обычно: перетаскивнаие ячеек
    #34778365
Хелпя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Deggasad
А нельзя их все оставлять и каждый раз по новой подтягивать?

не понял, это как предлагаете?

Конечно же лучше что бы не удалялось, а сравнивалось.

А почему на фтп нельзя выйти просто через \\ ???
...
Рейтинг: 0 / 0
Как обычно: перетаскивнаие ячеек
    #34778371
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может вариант, подумайте, вдруг пришло в голову
для всех обработанных файлов добавлять впереди имени какие-нибуть символы, например "!"

Код: plaintext
1.
2.
3.
   If UCase(iFile.Name) Like "ALG*.XLS" Then
     ОбработчикФайла (iFile.path)
     iFile.Name = "!" & iFile.Name
   End If

обломно только если после выполнения макроса обнаружатся какие-либо неточности и необходимо будет повторно выбрать, то придётся идти и по новой этот файл назад переименовыва, но это минус любого из вариантов.
...
Рейтинг: 0 / 0
Как обычно: перетаскивнаие ячеек
    #34778383
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хелпя
А почему на фтп нельзя выйти просто через \\ ???

Корневую папку почему-то не просматривает :(
...
Рейтинг: 0 / 0
Как обычно: перетаскивнаие ячеек
    #34778388
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хелпя Deggasad
А нельзя их все оставлять и каждый раз по новой подтягивать?
не понял, это как предлагаете?


Это предлагаю как в моём примере, каждый раз очищать сводный лист и по-новой все файлы собирать и старые и новые, так нельзя?
...
Рейтинг: 0 / 0
Как обычно: перетаскивнаие ячеек
    #34778449
Хелпя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DeggasadМожет вариант, подумайте, вдруг пришло в голову
для всех обработанных файлов добавлять впереди имени какие-нибуть символы, например "!"

Код: plaintext
1.
2.
3.
   If UCase(iFile.Name) Like "ALG*.XLS" Then
     ОбработчикФайла (iFile.path)
     iFile.Name = "!" & iFile.Name
   End If

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

это кстати вариант, но эт так. И "!" это именно то что ставить спереди названия?? А если туда вставлять дату. которая указана в найденном файле??

Deggasad Хелпя Deggasad
А нельзя их все оставлять и каждый раз по новой подтягивать?
не понял, это как предлагаете?


Это предлагаю как в моём примере, каждый раз очищать сводный лист и по-новой все файлы собирать и старые и новые, так нельзя?

когда база разрастется, то это не очень удобно, да и вообще фтп может полететь.

Не все-таки варинат был бы лучше если бы файл переносился в указанную папку
...
Рейтинг: 0 / 0
Как обычно: перетаскивнаие ячеек
    #34778654
Хелпя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот здесь "lastRow = .Cells.Find("*", , , , xlByRows, xlPrevious).Offset(1).Row" как-то можно указать что бы + ко всему еще заполнялось с столбца С??
...
Рейтинг: 0 / 0
Как обычно: перетаскивнаие ячеек
    #34778665
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хелпяhttp://zipsites.ru/books/uokenbakh_prof_progre_na_vba_v_excel_2002/ думаю сегодня попробывать тянуть ее
Да эта та книга (спасибо за ссылку)
...
Рейтинг: 0 / 0
Как обычно: перетаскивнаие ячеек
    #34778667
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хелпя

А если туда вставлять дату. которая указана в найденном файле??

Так вставляем значение из ячейки "A1", используя уже написанную функцию GetCel

Код: plaintext
1.
2.
3.
   If UCase(iFile.Name) Like "ALG*.XLS" Then
     ОбработчикФайла (iFile.path)
     iFile.Name = Format(GetCel(iFile.ParentFolder & "\", iFile.Name, "Лист1", "A1"), "yyyy.mm.dd") & iFile.Name
   End If

Хелпя
Не все-таки варинат был бы лучше если бы файл переносился в указанную папку

Так переносим файл в папку "Y:\!База\"

Код: plaintext
1.
2.
3.
   If UCase(iFile.Name) Like "ALG*.XLS" Then
     ОбработчикФайла (iFile.path)
     iFile.Move "Y:\!База\"
   End If

Так что решай сам.
...
Рейтинг: 0 / 0
Как обычно: перетаскивнаие ячеек
    #34778732
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хелпявот здесь "lastRow = .Cells.Find("*", , , , xlByRows, xlPrevious).Offset(1).Row" как-то можно указать что бы + ко всему еще заполнялось с столбца С??
какие столбцы заполнять ты ведь сам указываешь

.Range( "B" & lastRow).Value = GetCel(fpath, fname, sh, "A1")
.Range( "C" & lastRow).Value = GetCel(fpath, fname, sh, "A2")
...

Если ты хочешь считать последнюю строку в диапазоне от столбца "C" и до конца вправо, не считая принимая во внимание первые 2 столбца, то так должно быть
Код: plaintext
lastRow = .Columns( 3 ).Resize(, .Columns.Count -  2 ).Find("*", , , , xlByRows, xlPrevious).Offset( 1 ).Row
...
Рейтинг: 0 / 0
Как обычно: перетаскивнаие ячеек
    #34778928
Хелпя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkodor Хелпяhttp://zipsites.ru/books/uokenbakh_prof_progre_na_vba_v_excel_2002/ думаю сегодня попробывать тянуть ее
Да эта та книга (спасибо за ссылку)

да не за что...эт Вам пасибо!
...
Рейтинг: 0 / 0
Как обычно: перетаскивнаие ячеек
    #34778944
Хелпя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а может стоит заходить на фтп не по адресу папки, а по айпи?? я пока такого нигде не нашел...еще ищу
...
Рейтинг: 0 / 0
Как обычно: перетаскивнаие ячеек
    #34778994
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хелпяа может стоит заходить на фтп не по адресу папки, а по айпи?? я пока такого нигде не нашел...еще ищу
У тебя вообще не заходит?
Ведь начиная с папки второго уровня нормально ищет?
...
Рейтинг: 0 / 0
Как обычно: перетаскивнаие ячеек
    #34779061
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Deggasad Хелпяа может стоит заходить на фтп не по адресу папки, а по айпи?? я пока такого нигде не нашел...еще ищу
У тебя вообще не заходит?
Ведь начиная с папки второго уровня нормально ищет?

Извиняюсь я наверное совсем не про то, я же темный в этих делах, работаю только на одном компе. И всякие там протоколы соединения не знаю. Это я к тому, что я наверное не понимаю что такое фтп и ничем не могу в этом помочь.
...
Рейтинг: 0 / 0
Как обычно: перетаскивнаие ячеек
    #34779090
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хелпяhttp://zipsites.ru/books/uokenbakh_prof_progre_na_vba_v_excel_2002/ думаю сегодня попробывать тянуть ее

У кого нибуть получилось книжку скачать. У меня архив повреждён оказался...
бл........................................................................
ё..........................................................................
...
Рейтинг: 0 / 0
Как обычно: перетаскивнаие ячеек
    #34779204
Хелпя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Deggasad Хелпяhttp://zipsites.ru/books/uokenbakh_prof_progre_na_vba_v_excel_2002/ думаю сегодня попробывать тянуть ее

У кого нибуть получилось книжку скачать. У меня архив повреждён оказался...
бл........................................................................
ё..........................................................................

брр...в этом уверены??? значит не тянуть ее?

а на фтп вроде надо заходить так: фтп://логин:пароль@ip//далее сами папки
...
Рейтинг: 0 / 0
Как обычно: перетаскивнаие ячеек
    #34779242
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хелпя Deggasad Хелпяhttp://zipsites.ru/books/uokenbakh_prof_progre_na_vba_v_excel_2002/ думаю сегодня попробывать тянуть ее

У кого нибуть получилось книжку скачать. У меня архив повреждён оказался...
бл........................................................................
ё..........................................................................

брр...в этом уверены??? значит не тянуть ее?

НИХЕРА не получилось, а жаль
Если кто попробует и у него получится, напишите.
...
Рейтинг: 0 / 0
Как обычно: перетаскивнаие ячеек
    #34779316
Хелпя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
хотел уточнить во что, за что отdечает вот этот кусок

Private Function GetCel(fpath, fname, sh, rngStr)
Dim formulaStr As String
formulaStr = "'" & fpath & "[" & fname & "]" & sh & "'!" & Range(rngStr).Address(, , xlR1C1)
GetCel = ExecuteExcel4Macro(formulaStr)
End Function


я сейчас сижу и кручу как бы можно было совместить вот с этим

Sub GetRange(FilePath As String, FileName As String, SheetName As String, _
SourceRange As String, DestRange As Range)

Dim Start

'Go to the destination range
Application.Goto DestRange

'Resize the DestRange to the same size as the SourceRange
Set DestRange = DestRange.Resize(Range(SourceRange).Rows.Count, _
Range(SourceRange).Columns.Count)

'Add formula links to the closed file
With DestRange
.FormulaArray = "='" & FilePath & "/[" & FileName & "]" & SheetName _
& "'!" & SourceRange

'Wait
Start = Timer
Do While Timer < Start + 2
DoEvents
Loop

'Make values from the formulas
.Copy
.PasteSpecial xlPasteValues
.Cells(1).Select
Application.CutCopyMode = False
End With
End Sub
Private Sub CommandButton1_Click()
Application.ScreenUpdating = True
On Error Resume Next

'Call the macro GetRange
GetRange "ftp://Individualnie/", "algorutm.xls", "Карта", "H21", _
Sheets("Лист1").Range("A1")

On Error GoTo 0
Application.ScreenUpdating = False
End Sub

Отдельно попробывал полседний скрипт работает, т.е. заходит на фтп и шарит, н овыдает СЦылка
...
Рейтинг: 0 / 0
Как обычно: перетаскивнаие ячеек
    #34779351
Хелпя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
и еще одно, указано так

Код: plaintext
1.
2.
3.
4.
For Each iFile In Ïàïêà.Files
 If UCase(iFile.Name) Like "ALG*.XLS" Then
         
          iFile.Move "D:\Base\" 
  End If

При одинаковых названиях в файлах при копирывание выдает ошибку что файл такой уже существует. Может можно как то добавить 1 в конце этого фалй, а если это уже вторая будет копия то 2??

Реально это...?
...
Рейтинг: 0 / 0
Как обычно: перетаскивнаие ячеек
    #34779578
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добавил модуль для переимнования и перемещения файлов, смотри RenameReplaceFile(replaceFile As file)
По поводу GetRange - нужно могу переделать. только зачем?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
Dim svod As Workbook
Dim fso As New FileSystemObject

Sub Запуск()
' назначаем сводную книгу
Set svod = Workbooks("База.xls")
'очищаем сводный лист от старья
svod.Sheets("Лист1").Range("C10:BF65536").ClearContents
' Запускаешь процедуру перебора книг в каталоге и подкаталогах с указанием пути
' в примере для 3-х каталогов, можно добавить строк скольеко нужно и изменить путь
 ВыбратьКаталогПодкаталогиFSO fso.GetFolder("C:\test\test1")
 ВыбратьКаталогПодкаталогиFSO fso.GetFolder("C:\test\test2")
 ''''''' и т.д.
End Sub

'Выбрать файлы XLS в каталоге и подкаталогах
'FileSystemObject - БИБЛИОТЕКА  Microsoft Scripting Runtime
Sub ВыбратьКаталогПодкаталогиFSO(Папка As Folder)
Dim fold As Folder, iFile As file

 For Each fold In Папка.SubFolders
   ВыбратьКаталогПодкаталогиFSO fold        'лезем в рекурсию
 Next
  
 For Each iFile In Папка.Files
   If UCase(iFile.Name) Like "ALG*.XLS" Then
     Call ОбработчикФайла(iFile.Path)
     Call RenameReplaceFile(iFile)
   End If
 Next
End Sub


Sub ОбработчикФайла(foolpathFile As String)

 Dim fname As String, fpath As String, sh As String
 Dim lastRow As Long
    ' имя исходного файла
    fname = Split(foolpathFile, "\")(UBound(Split(foolpathFile, "\")))
    ' путь к исходному файлу
    fpath = Left(foolpathFile, Len(foolpathFile) - Len(fname))
    ' Лист в исходных файлах
    sh = "Лист1"

    With svod.Sheets("Лист1")
     ' следующая после последней строка на сводном листе
     lastRow = .Cells.Find("*", , , , xlByRows, xlPrevious).Offset( 1 ).Row
     ' заполнение этой строки значениями из очередной книги
     ' слева указываешь столбцы из сводного листа
     ' справа указываешь адресс ячейки которую нужно перенести в данный столбец
        .Range("C" & lastRow).Value = GetCel(fpath, fname, sh, "A1")
        .Range("D" & lastRow).Value = GetCel(fpath, fname, sh, "A2")
        .Range("E" & lastRow).Value = GetCel(fpath, fname, sh, "A3")
        ' /// и т.д.
        
    End With
        
End Sub

Sub RenameReplaceFile(replaceFile As file)
 Dim n
 Dim pathForReplace As String
 Dim tipeFile As String, nameMinusTipe As String
  
  ' путь для перемещения файлов
  pathForReplace = "C:\test\Base\"
  ' расширение файла
  tipeFile = Split(replaceFile.Name, ".")(UBound(Split(replaceFile.Name, ".")))
  ' имя файла без расширения
  nameMinusTipe = Left(replaceFile.Name, Len(replaceFile.Name) - Len(tipeFile) -  1 )
   
  ' подпоб коэффициента для имени файла
  n = ""
  Do While Dir(pathForReplace & nameMinusTipe & n & "." & tipeFile) <> ""
   n = Val(n) +  1 
  Loop
    
  'переименование файла
  If Val(n) Then replaceFile.Name = nameMinusTipe & n & "." & tipeFile
  ' перемещение файла
  replaceFile.Move pathForReplace
        
End Sub
' Функция получающая одну ячейку из закрытой книги
' Если возвращает #ССЫЛКА!, то скорее всего указанного листа в данной книге не существует
Private Function GetCel(fpath, fname, sh, rngStr)
  Dim formulaStr As String
    formulaStr = "'" & fpath & "[" & fname & "]" & sh & "'!" & Range(rngStr).Address(, , xlR1C1)
    Debug.Print formulaStr
    GetCel = ExecuteExcel4Macro(formulaStr)
End Function
...
Рейтинг: 0 / 0
Как обычно: перетаскивнаие ячеек
    #34779991
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вариант с GetRange

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
Dim svod As Workbook
Dim fso As New FileSystemObject

Sub Запуск()
' назначаем сводную книгу
Set svod = Workbooks("База.xls")
'очищаем сводный лист от старья
svod.Sheets("Лист1").Range("C10:BF65536").ClearContents
' Запускаешь процедуру перебора книг в каталоге и подкаталогах с указанием пути
' в примере для 3-х каталогов, можно добавить строк скольеко нужно и изменить путь
 ВыбратьКаталогПодкаталогиFSO fso.GetFolder("Y:\test\test1")
 ВыбратьКаталогПодкаталогиFSO fso.GetFolder("Y:\test\test2")
 ''''''' и т.д.
End Sub

'Выбрать файлы XLS в каталоге и подкаталогах
'FileSystemObject - БИБЛИОТЕКА  Microsoft Scripting Runtime
Sub ВыбратьКаталогПодкаталогиFSO(Папка As Folder)
Dim fold As Folder, iFile As file

 For Each fold In Папка.SubFolders
   ВыбратьКаталогПодкаталогиFSO fold        'лезем в рекурсию
 Next
  
 For Each iFile In Папка.Files
   If UCase(iFile.Name) Like "ALG*.XLS" Then
     Call ОбработчикФайла(iFile.Path)
     Call RenameReplaceFile(iFile)
   End If
 Next
End Sub


Sub ОбработчикФайла(foolpathFile As String)

 Dim fname As String, fpath As String, sh As String
 Dim lastRow As Long
    ' имя исходного файла
    fname = Split(foolpathFile, "\")(UBound(Split(foolpathFile, "\")))
    ' путь к исходному файлу
    fpath = Left(foolpathFile, Len(foolpathFile) - Len(fname))
    ' Лист в исходных файлах
    sh = "Лист1"

    With svod.Sheets("Лист1")
        ' следующая после последней строка на сводном листе
        lastRow = .Cells.Find("*", , , , xlByRows, xlPrevious).Offset( 1 ).Row
        ' заполнение этой строки значениями из очередной книги
        Call GetRange(fpath, fname, sh, "A1", .Range("C" & lastRow))
        Call GetRange(fpath, fname, sh, "A2", .Range("D" & lastRow))
        Call GetRange(fpath, fname, sh, "A3", .Range("E" & lastRow))
        ' /// и т.д.
    End With
        
End Sub

' Процедура, получающая диапазон из закрытой книги, можно сразу диапазоны доставать,
'  но при этом из исходного диаапазона будет скопирован диапазон такого же размра (по высоте и ширене)
' Если возвращает #ССЫЛКА!, то скорее всего указанного листа в данной книге не существует
Sub GetRange(FilePath As String, FileName As String, SheetName As String, _
SourceRange As String, DestRange As Range)
'Resize the DestRange to the same size as the SourceRange
Set DestRange = DestRange.Resize(Range(SourceRange).Rows.Count, _
                                 Range(SourceRange).Columns.Count)
'Add formula links to the closed file
With DestRange
  .FormulaArray = "='" & FilePath & "[" & FileName & "]" & SheetName & "'!" & SourceRange
  'Make values from the formulas
  .Value = .Value
End With
End Sub

Sub RenameReplaceFile(replaceFile As file)
 Dim n
 Dim pathForReplace As String
 Dim tipeFile As String, nameMinusTipe As String
  
  ' путь для перемещения файлов
  pathForReplace = "Y:\test\Base\"
  ' расширение файла
  tipeFile = Split(replaceFile.Name, ".")(UBound(Split(replaceFile.Name, ".")))
  ' имя файла без расширения
  nameMinusTipe = Left(replaceFile.Name, Len(replaceFile.Name) - Len(tipeFile) -  1 )
   
  ' подпоб коэффициента для имени файла
  n = ""
  Do While Dir(pathForReplace & nameMinusTipe & n & "." & tipeFile) <> ""
   n = Val(n) +  1 
  Loop
    
  'переименование файла
  If Val(n) Then replaceFile.Name = nameMinusTipe & n & "." & tipeFile
  ' перемещение файла
  replaceFile.Move pathForReplace
        
End Sub
...
Рейтинг: 0 / 0
Как обычно: перетаскивнаие ячеек
    #34780001
Хелпя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DeggasadПо поводу GetRange - нужно могу переделать. только зачем?

поскольку упращает работу, хотя и будет дольше втягиваться в Базу....я вчера попытался, но все-таки он у меня выдает ССЫЛКА..... буду дальше еще пробывать...как-раз сейчас смотрю на перемещение+переименование....попробую въехать
...
Рейтинг: 0 / 0
Как обычно: перетаскивнаие ячеек
    #34780042
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поправил Перемещение + Переименование
Вариант с GetCel

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
Dim svod As Workbook
Dim fso As New FileSystemObject

Dim svod As Workbook
Dim fso As New FileSystemObject

Sub Запуск()
' назначаем сводную книгу
Set svod = Workbooks("База.xls")
'очищаем сводный лист от старья
svod.Sheets("Лист1").Range("C10:BF65536").ClearContents
' Запускаешь процедуру перебора книг в каталоге и подкаталогах с указанием пути
' в примере для 3-х каталогов, можно добавить строк скольеко нужно и изменить путь
 ВыбратьКаталогПодкаталогиFSO fso.GetFolder("Y:\test\test1")
 ВыбратьКаталогПодкаталогиFSO fso.GetFolder("Y:\test\test2")
 ''''''' и т.д.
End Sub

'Выбрать файлы XLS в каталоге и подкаталогах
'FileSystemObject - БИБЛИОТЕКА  Microsoft Scripting Runtime
Sub ВыбратьКаталогПодкаталогиFSO(Папка As Folder)
Dim fold As Folder, iFile As file

 For Each fold In Папка.SubFolders
   ВыбратьКаталогПодкаталогиFSO fold        'лезем в рекурсию
 Next
  
 For Each iFile In Папка.Files
   If UCase(iFile.Name) Like "ALG*.XLS" Then
     Call ОбработчикФайла(iFile.Path)
     Call RenameReplaceFile(iFile, "Y:\test\Base\")
   End If
 Next
End Sub


Sub ОбработчикФайла(foolpathFile As String)

 Dim fname As String, fpath As String, sh As String
 Dim lastRow As Long
    ' имя исходного файла
    fname = Split(foolpathFile, "\")(UBound(Split(foolpathFile, "\")))
    ' путь к исходному файлу
    fpath = Left(foolpathFile, Len(foolpathFile) - Len(fname))
    ' Лист в исходных файлах
    sh = "Лист1"

    With svod.Sheets("Лист1")
     ' следующая после последней строка на сводном листе
     lastRow = .Cells.Find("*", , , , xlByRows, xlPrevious).Offset( 1 ).Row
     ' заполнение этой строки значениями из очередной книги
     ' слева указываешь столбцы из сводного листа
     ' справа указываешь адресс ячейки которую нужно перенести в данный столбец
        .Range("C" & lastRow).Value = GetCel(fpath, fname, sh, "A1")
        .Range("D" & lastRow).Value = GetCel(fpath, fname, sh, "A2")
        .Range("E" & lastRow).Value = GetCel(fpath, fname, sh, "A3")
        ' /// и т.д.
    End With
    
End Sub

' Функция получающая одну ячейку из закрытой книги
' Если возвращает #ССЫЛКА!, то скорее всего указанного листа в данной книге не существует
Private Function GetCel(fpath, fname, sh, rngStr)
  Dim formulaStr As String
    formulaStr = "'" & fpath & "[" & fname & "]" & sh & "'!" & Range(rngStr).Address(, , xlR1C1)
    GetCel = ExecuteExcel4Macro(formulaStr)
End Function

Sub RenameReplaceFile(replaceFile As file, pathForReplace As String)
 Dim n, tipeFile As String, nameMinusTipe As String
  
  ' расширение файла
  tipeFile = Split(replaceFile.Name, ".")(UBound(Split(replaceFile.Name, ".")))
  ' имя файла без расширения
  nameMinusTipe = Left(replaceFile.Name, Len(replaceFile.Name) - Len(tipeFile) -  1 )
   
  ' подпоб коэффициента для имени файла
  n = ""
  Do While Dir(pathForReplace & nameMinusTipe & n & "." & tipeFile) <> ""
   n = Val(n) +  1 
  Loop
    
  'переименование файла
  If Val(n) Then replaceFile.Name = nameMinusTipe & n & "." & tipeFile
  ' перемещение файла
  replaceFile.Move pathForReplace
        
End Sub

Вариант с GetRange

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
Dim svod As Workbook
Dim fso As New FileSystemObject

Sub Запуск()
' назначаем сводную книгу
Set svod = Workbooks("База.xls")
'очищаем сводный лист от старья
svod.Sheets("Лист1").Range("C10:BF65536").ClearContents
' Запускаешь процедуру перебора книг в каталоге и подкаталогах с указанием пути
' в примере для 3-х каталогов, можно добавить строк скольеко нужно и изменить путь
 ВыбратьКаталогПодкаталогиFSO fso.GetFolder("Y:\test\test1")
 ВыбратьКаталогПодкаталогиFSO fso.GetFolder("Y:\test\test2")
 ''''''' и т.д.
End Sub

'Выбрать файлы XLS в каталоге и подкаталогах
'FileSystemObject - БИБЛИОТЕКА  Microsoft Scripting Runtime
Sub ВыбратьКаталогПодкаталогиFSO(Папка As Folder)
Dim fold As Folder, iFile As file

 For Each fold In Папка.SubFolders
   ВыбратьКаталогПодкаталогиFSO fold        'лезем в рекурсию
 Next
  
 For Each iFile In Папка.Files
   If UCase(iFile.Name) Like "ALG*.XLS" Then
     Call ОбработчикФайла(iFile.Path)
     Call RenameReplaceFile(iFile, "Y:\test\Base\")
   End If
 Next
End Sub


Sub ОбработчикФайла(foolpathFile As String)

 Dim fname As String, fpath As String, sh As String
 Dim lastRow As Long
    ' имя исходного файла
    fname = Split(foolpathFile, "\")(UBound(Split(foolpathFile, "\")))
    ' путь к исходному файлу
    fpath = Left(foolpathFile, Len(foolpathFile) - Len(fname))
    ' Лист в исходных файлах
    sh = "Лист1"

    With svod.Sheets("Лист1")
        ' следующая после последней строка на сводном листе
        lastRow = .Cells.Find("*", , , , xlByRows, xlPrevious).Offset( 1 ).Row
        ' заполнение этой строки значениями из очередной книги
        Call GetRange(fpath, fname, sh, "A1", .Range("C" & lastRow))
        Call GetRange(fpath, fname, sh, "A2", .Range("D" & lastRow))
        Call GetRange(fpath, fname, sh, "A3", .Range("E" & lastRow))
        ' /// и т.д.
    End With
        
End Sub

' Процедура, получающая диапазон из закрытой книги, можно сразу диапазоны доставать,
'  но при этом из исходного диаапазона будет скопирован диапазон такого же размра (по высоте и ширене)
' Если возвращает #ССЫЛКА!, то скорее всего указанного листа в данной книге не существует
Sub GetRange(FilePath As String, FileName As String, SheetName As String, _
SourceRange As String, DestRange As Range)
'Resize the DestRange to the same size as the SourceRange
Set DestRange = DestRange.Resize(Range(SourceRange).Rows.Count, _
                                 Range(SourceRange).Columns.Count)
'Add formula links to the closed file
With DestRange
  .FormulaArray = "='" & FilePath & "[" & FileName & "]" & SheetName & "'!" & SourceRange
  'Make values from the formulas
  .Value = .Value
End With
End Sub

Sub RenameReplaceFile(replaceFile As file, pathForReplace As String)
 Dim n, tipeFile As String, nameMinusTipe As String
  
  ' расширение файла
  tipeFile = Split(replaceFile.Name, ".")(UBound(Split(replaceFile.Name, ".")))
  ' имя файла без расширения
  nameMinusTipe = Left(replaceFile.Name, Len(replaceFile.Name) - Len(tipeFile) -  1 )
   
  ' подпоб коэффициента для имени файла
  n = ""
  Do While Dir(pathForReplace & nameMinusTipe & n & "." & tipeFile) <> ""
   n = Val(n) +  1 
  Loop
    
  'переименование файла
  If Val(n) Then replaceFile.Name = nameMinusTipe & n & "." & tipeFile
  ' перемещение файла
  replaceFile.Move pathForReplace
        
End Sub
...
Рейтинг: 0 / 0
Как обычно: перетаскивнаие ячеек
    #34781809
Хелпя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
чет он не хочет заходить на фтп. Может в скрипте с GetRange надо где-то указать же сам доступ до фтп? Я его указываю в этих строках и мне выдает что путь не верен.... пытался менять ВыбратьКаталогПодкаталогиFSO fso.GetFolder на что-то похожее от GetRange но не получается.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Sub Запуск()
' назначаем сводную книгу
Set svod = Workbooks("База.xls")
'очищаем сводный лист от старья
svod.Sheets("Лист1").Range("C10:BF65536").ClearContents
' Запускаешь процедуру перебора книг в каталоге и подкаталогах с указанием пути
' в примере для 3-х каталогов, можно добавить строк скольеко нужно и изменить путь
 ВыбратьКаталогПодкаталогиFSO fso.GetFolder("фтп://логин:пароль@айпи/пакпи/папки")

 ''''''' и т.д.
End Sub

А вот когда тупо вставлю этот скрипт в пустой лист, то спокойно идет на фтп и все работает

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
Sub GetRange(FilePath As String, FileName As String, SheetName As String, _
SourceRange As String, DestRange As Range)

Dim Start

'Go to the destination range
Application.Goto DestRange

'Resize the DestRange to the same size as the SourceRange
Set DestRange = DestRange.Resize(Range(SourceRange).Rows.Count, _
Range(SourceRange).Columns.Count)

'Add formula links to the closed file
With DestRange
.FormulaArray = "='" & FilePath & "/[" & FileName & "]" & SheetName _
& "'!" & SourceRange

'Wait
Start = Timer
Do While Timer < Start +  2 
DoEvents
Loop

'Make values from the formulas
.Copy
.PasteSpecial xlPasteValues
.Cells( 1 ).Select
Application.CutCopyMode = False
End With
End Sub
Private Sub CommandButton1_Click()
Application.ScreenUpdating = True
On Error Resume Next

'Call the macro GetRange
GetRange "ftp://Individualnie/", "algorutm.xls", "Карта", "H21", _
Sheets("Лист1").Range("A1")

On Error GoTo  0 
Application.ScreenUpdating = False
End Sub
...
Рейтинг: 0 / 0
Как обычно: перетаскивнаие ячеек
    #34782391
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А так???

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
Dim svod As Workbook
Dim fso As New FileSystemObject

Sub Запуск()
' назначаем сводную книгу
Set svod = Workbooks("База.xls")
'очищаем сводный лист от старья
svod.Sheets("Лист1").Range("C10:BF65536").ClearContents
' Запускаешь процедуру перебора книг в каталоге и подкаталогах с указанием пути
' в примере для 3-х каталогов, можно добавить строк скольеко нужно и изменить путь
 ВыбратьКаталогПодкаталогиFSO fso.GetFolder("Y:\test\test1")
 ВыбратьКаталогПодкаталогиFSO fso.GetFolder("Y:\test\test2")
 ''''''' и т.д.
End Sub

'Выбрать файлы XLS в каталоге и подкаталогах
'FileSystemObject - БИБЛИОТЕКА  Microsoft Scripting Runtime
Sub ВыбратьКаталогПодкаталогиFSO(Папка As Folder)
Dim fold As Folder, iFile As file

 For Each fold In Папка.SubFolders
   ВыбратьКаталогПодкаталогиFSO fold        'лезем в рекурсию
 Next
  
 For Each iFile In Папка.Files
   If UCase(iFile.Name) Like "ALG*.XLS" Then
     Call ОбработчикФайла(iFile)
     Call RenameReplaceFile(iFile, "Y:\test\Base\")
   End If
 Next
End Sub


Sub ОбработчикФайла(curFile As file)
 Dim fname As String, fpath As String, sh As String
 Dim lastRow As Long
    ' имя исходного файла
    fname = curFile.Name
    ' путь к исходному файлу
    fpath = Left(curFile.Path, Len(curFile.Path) - Len(fname))
    ' Лист в исходных файлах
    sh = "Лист1"

    With svod.Sheets("Лист1")
        ' следующая после последней строка на сводном листе
        lastRow = .Cells.Find("*", , , , xlByRows, xlPrevious).Offset( 1 ).Row
        ' заполнение этой строки значениями из очередной книги
        Call GetRange(fpath, fname, sh, "A1", .Range("C" & lastRow))
        Call GetRange(fpath, fname, sh, "A2", .Range("D" & lastRow))
        Call GetRange(fpath, fname, sh, "A3", .Range("E" & lastRow))
        ' /// и т.д.
    End With
        
End Sub

' Процедура, получающая диапазон из закрытой книги, можно сразу диапазоны доставать,
'  но при этом из исходного диаапазона будет скопирован диапазон такого же размра (по высоте и ширене)
' Если возвращает #ССЫЛКА!, то скорее всего указанного листа в данной книге не существует
Sub GetRange(FilePath As String, FileName As String, SheetName As String, _
SourceRange As String, DestRange As Range)
'Resize the DestRange to the same size as the SourceRange
Set DestRange = DestRange.Resize(Range(SourceRange).Rows.Count, _
                                 Range(SourceRange).Columns.Count)
'Add formula links to the closed file
With DestRange
  .FormulaArray = "='" & FilePath & "[" & FileName & "]" & SheetName & "'!" & SourceRange
  'Make values from the formulas
  .Value = .Value
End With
End Sub

Sub RenameReplaceFile(replaceFile As file, pathForReplace As String)
 Dim n, tipeFile As String, nameMinusTipe As String
  
  ' расширение файла
  tipeFile = Split(replaceFile.Name, ".")(UBound(Split(replaceFile.Name, ".")))
  ' имя файла без расширения
  nameMinusTipe = Left(replaceFile.Name, Len(replaceFile.Name) - Len(tipeFile) -  1 )
   
  ' подпоб коэффициента для имени файла
  n = ""
  Do While Dir(pathForReplace & nameMinusTipe & n & "." & tipeFile) <> ""
   n = Val(n) +  1 
  Loop
    
  'переименование файла
  If Val(n) Then replaceFile.Name = nameMinusTipe & n & "." & tipeFile
  ' перемещение файла
  replaceFile.Move pathForReplace
        
End Sub
...
Рейтинг: 0 / 0
Как обычно: перетаскивнаие ячеек
    #34782663
Хелпя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
  
 For Each iFile In Папка.Files
   If UCase(iFile.Name) Like "ALG*.XLS" Then
     Call ОбработчикФайла(iFile)
     Call RenameReplaceFile(iFile, "Y:\test\Base\")
   End If
 Next
End Sub
 
Sub ОбработчикФайла(curFile As file)
 Dim fname As String, fpath As String, sh As String
 Dim lastRow As Long
    ' имя исходного файла
    fname = curFile.Name
    ' путь к исходному файлу
    fpath = Left(curFile.Path, Len(curFile.Path) - Len(fname))

как я увидел ты поменял скрипт именно в этих строках, так? И все равно файл пишет ошибку 76 нет пути
...
Рейтинг: 0 / 0
Как обычно: перетаскивнаие ячеек
    #34782739
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если GetRange вот на это (см ниже) заменить, это плюс к предыдущим изменениям
я просто хрен знаю этот фтп, хрен его знает что ему нужно.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Sub GetRange(FilePath As String, FileName As String, SheetName As String, _
SourceRange As String, DestRange As Range)
'Resize the DestRange to the same size as the SourceRange
Set DestRange = DestRange.Resize(Range(SourceRange).Rows.Count, _
                                 Range(SourceRange).Columns.Count)
'Add formula links to the closed file
With DestRange
  .FormulaArray = "='" & FilePath & _
                  IIf(Right(FilePath,  1 ) = "/", "/", "") & _
                  "[" & FileName & "]" & SheetName & "'!" & SourceRange
  'Make values from the formulas
  .Value = .Value
End With
End Sub
...
Рейтинг: 0 / 0
Как обычно: перетаскивнаие ячеек
    #34785204
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чё могчишь получилось чи не?
...
Рейтинг: 0 / 0
Как обычно: перетаскивнаие ячеек
    #34785245
Хелпя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DeggasadЧё могчишь получилось чи не?

сорри запарочка на работе.....та не выходит кричит что нету такого пути когда в процедуре
Код: plaintext
Sub Запуск()
я указываю
Код: plaintext
 ВыбратьКаталогПодкаталогиFSO fso.GetFolder("фтп.....")
...не знюю...щас вроде докачиваю книгу Джон Уокенбах, мож там что-то будет....а пока не хочет заходить на фтп...кстати а почем у вас пивко ;)?
...
Рейтинг: 0 / 0
Как обычно: перетаскивнаие ячеек
    #34785361
Хелпя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
да..Да...я скачал книгу и она открывается....вот сцылка http://ihtik.2x4.ru/complit_22janv2007/complit_22janv2007_4783.rar....тянуть надо Download Master ...удачи люди
...
Рейтинг: 0 / 0
Как обычно: перетаскивнаие ячеек
    #34785459
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хелпяда..Да...я скачал книгу и она открывается....вот сцылка http://ihtik.2x4.ru/complit_22janv2007/complit_22janv2007_4783.rar....тянуть надо Download Master ...удачи люди

Уже есть.
...
Рейтинг: 0 / 0
Как обычно: перетаскивнаие ячеек
    #34785708
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотрел я сегодня что есть Ваш фтп.
Ну мы с вами и понаворотили.
Ладно я глупый - никогда не сталкивался, но вы то...
Весь написанный выше код не будет работать с фтп и не пытайтесь его туды сувать .
Исключение составляет только процедура GetRange, т.к. эксель может при непосредственном введении пути в ячейки вытащить из фтп из файла данные по сцылочке, но насколько я понимаю он просто копирует файл во временную папку и оттуда уже смотрит. И вот тут уже возможны азличные глюки, которые мне лично не очень нравятся, например если файл на фтп обновить. то не факт что ссылка на него обновится. так как эксель посмотрит уже скачанный файл. Возможно этого можно избежать, я просто по любительски рассуждаю о первом впечатлении. А впечатление такое, что фтп для передачи данных может ещё и нужен если кому нравится, но чтобы работать там с ними - наверное не стоит. Скопировал к себе и тама делай что хочешь.
Но если всё же хочется на форуме есть примеры реализации некоторых функций, можно попробовать разобраться, но придётся немного больше попотеть чем над нашим макросом...
...
Рейтинг: 0 / 0
Как обычно: перетаскивнаие ячеек
    #34785783
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DeggasadПосмотрел я сегодня что есть Ваш фтп.
Ну мы с вами и понаворотили.А чего вы тут наворотили? Вы такой славный междусобойчик тут организовали, что я и не заглядывал в этот топик. А тут сморю уже третья страница пошла... кофе кончилось, рабочий день еще тянется...


DeggasadИсключение составляет только процедура GetRange, т.к. эксель может при непосредственном введении пути в ячейки вытащить из фтп из файла данные по сцылочке, но насколько я понимаю он просто копирует файл во временную папку и оттуда уже смотрит.Правильно понимаешь, именно во временную папку, а если еще точнее, то в Temporary Internet Files оно файлы и вытягивает.
DeggasadИ вот тут уже возможны азличные глюки, которые мне лично не очень нравятся, например если файл на фтп обновить. то не факт что ссылка на него обновится. так как эксель посмотрит уже скачанный файл.Там немножко другие механизмы. Но в теории, при правильно настроеном .... всем, при обновлении файла IE (а Эксель пользуется для работы с интеренетом кусками из IE) должен увидеть что файл обновился и выкачать его повторно. А если не обновился - возьмет из кеша.

DeggasadА впечатление такое, что фтп для передачи данных может ещё и нужен если кому нравится, но чтобы работать там с ними - наверное не стоит. Скопировал к себе и тама делай что хочешь.Неее.. с одни кофе это не расшифровать.
...
Рейтинг: 0 / 0
Как обычно: перетаскивнаие ячеек
    #34785861
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlА чего вы тут наворотили?

Да так особо и ничего. Просто сделали код для работы с папками и файлами в этих папках (с этим все нормально). Но потом я не зная что такое фтп по глупости своей пытался угадать чего это он (код) с ним не хочет работать. При этом всё что я знал про фтп - только то,что пути по разному пишутся. Ну вообщем поспешно, потом посмотрел вроде не получится как с обычными папками с фтп работать (тут опять могу быть не прав, потому как незнаю вопроса). Не буду дальше рассуждать, а то опять поспешно окажется.
...
Рейтинг: 0 / 0
Как обычно: перетаскивнаие ячеек
    #34787551
Хелпя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Deggasad, кстати ты не ответил на один вопросик ;) вот дата 7 сен 07, 17:17 ....просомтрите ....

и по поводу фтп я тоже посидел на выходных и полистал....да все правильно там в Темп падает инфа, а поскоку Темп у нас не всегда надежен будет лучше если использовать то что было прописано ранее, т.е. локальные диски. Тогда получается что еще бы лучше сделать кнопочку для сохранение на фтп этот вопросик я поднимал на уже на форуме, но ответа врзумительного так и не получил ...http://sql.ru/forum/actualthread.aspx?tid=470912 и с темами пытлася ознакомится, но что-то толкового через посик по форуму не нашел...
...
Рейтинг: 0 / 0
Как обычно: перетаскивнаие ячеек
    #34788249
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хелпя2 Deggasad, кстати ты не ответил на один вопросик ;) вот дата 7 сен 07, 17:17 ....просомтрите ....

и по поводу фтп я тоже посидел на выходных и полистал....да все правильно там в Темп падает инфа, а поскоку Темп у нас не всегда надежен будет лучше если использовать то что было прописано ранее, т.е. локальные диски. Тогда получается что еще бы лучше сделать кнопочку для сохранение на фтп этот вопросик я поднимал на уже на форуме, но ответа врзумительного так и не получил ...http://sql.ru/forum/actualthread.aspx?tid=470912 и с темами пытлася ознакомится, но что-то толкового через посик по форуму не нашел...

1) Пиво у нас
Carlsberg и Tuborg Green:
- в супермаркете 27 - 28 р /0,5 л
- в ночном магазине 31 - 32 р /0,5 л
- в кабаке 50 - 80 р /0,5 л
разливное "живое":
- в супермаркете 40 - 200 р /1 л

2) Ссылку, я считаю, вам хорошую дали, вкратце посмотрел, там вроде можно дельное найти. Мне самому сейчас разбираться с фтп особо некогда (да и не особо - некогда). Если вдруг появится время обещаю посмотрю, но может кто другой кнопку решится сделать.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Как обычно: перетаскивнаие ячеек
    #36953254
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Случайно наткнулся на эту тему.
А пивка-то я так и не попил :(
Я особо и не расчитывал, но автор так настаивал меня им одарить
З.ы.: просто к слову пришлось какие разные люди бывают...
...
Рейтинг: 0 / 0
Как обычно: перетаскивнаие ячеек
    #37020342
Djon Player
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Deggasad,

Что-ж, бывают и такие люди, сначала золотые горы предлагают, а потом...
Лучше бы ничего не предлагали.
...
Рейтинг: 0 / 0
69 сообщений из 69, показаны все 3 страниц
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Как обычно: перетаскивнаие ячеек
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]