Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.05.2012, 21:38   #21
4uvak111
Пользователь
 
Регистрация: 12.11.2010
Сообщений: 18
По умолчанию

С массивом строк разобрался, оказалось не так уж и трудно, заодно и функции интересные нашел lbound и ubound
Код:
Sub Макрос1()

Cells.Select
Selection.Clear
Range("A1").Select
Dim X, y, w, i
Dim strFileToOpen
Dim wrkBook As Workbook
Dim User()
ReDim User(1 To 3)

User(1) = "us1": User(2) = "us2": User(3) = "us3"

w = 1

For i = LBound(User) To UBound(User)
X = 1: y = 1
strfile = "C:\Сводная книга\" & User(i) & "\лист.xlsx"
Set wrkBook = Workbooks.Open(strfile)
Do While Cells(X, y).Value <> ""
' Переносим Значение из 1.xls в текущую книгу (с макросом)
ThisWorkbook.Worksheets("Лист1").Cells(w, y).Value = _
                wrkBook.Worksheets("Лист1").Cells(X, y).Value
y = y + 1
If y > 2 Then
X = X + 1: w = w + 1: y = 1:
End If
Loop
wrkBook.Close
Next i

Set wrkBook = Nothing

End Sub
4uvak111 вне форума Ответить с цитированием
Старый 04.05.2012, 21:56   #22
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

1. Зачем копируете ячейки по-одной? Сразу всем диапазоном будет быстрее - можно копировать (Copy), можно приравнивать значения, можно через массив.
2. Зачем 3 раза повторять код? Можно перебирать в цикле файлы или массив с именами нужных файлов.
3. bBookOpen определяет, не открыта ли книга у Вас. Используйте такой код:

Код:
Function IsOpen(sFileName As string) As Boolean
Dim FN%
FN = FreeFile
On Error Resume Next
Open sFileName For Random Access Read Write Lock Read Write As #FN
Close #FN
IsOpen = Err
End Function
P.S. Пока писал, п2 уже решился. Хорошо...
Но как-то сложно Вы usы перебираете...
Код:
Sub tt()
    Dim a
    For Each a In Split("us1 us2 us3")
        MsgBox a
    Next
End Sub
или
Код:
Sub ttt()
    Dim a
    For Each a In Array("us1", "us2", "us3")
        MsgBox a
    Next
End Sub
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 04.05.2012 в 22:03.
Hugo121 вне форума Ответить с цитированием
Старый 04.05.2012, 22:09   #23
4uvak111
Пользователь
 
Регистрация: 12.11.2010
Сообщений: 18
По умолчанию

Hugo121, просто первый рабочий код, на который наткнулся - работал именно так, копируя по одной ячейке. В принципе, можно копировать и по строке, и по диапазону - главное знать сколько строк и какой диапазон (количество строк будет постепенно добавляться).

С пунктом 2 разобрался, да, даже неожиданно быстро для себя.
Ну а Ваш код по пункту 3 буду внедрять завтра - сегодня уже засыпаю, спасибо большое за код.
Правильно понимаю, что проверка по данной функции должна выполнятся следующим образом?
Код:
If IsOpen("FileName")=false Then
<оператор, выполняется если файл закрыт и доступен для копирования данных>
End If
И главное - как он работает? Если файл открыт, то просто пропускает его и переходит к следующему файлу? Хотелось бы, чтоб была возможность копировать данные из открытого файла на другом компьютере (если такое возможно), либо из его последней сохраненной копии.

Последний раз редактировалось 4uvak111; 04.05.2012 в 22:11. Причина: Исправил условие
4uvak111 вне форума Ответить с цитированием
Старый 04.05.2012, 22:29   #24
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Он просто покажет, свободен ли файл. А дальше уже как сделаете - можно например вывестить msgbox и после его закрытия снова повторить попытку. Т.е. увидели сообщение - кричите чтоб закрыли файл и затем жмёте ОК. Или просто тупо повторять раз в секунду проверять файл.
Ну а просто взять данные думаю можно с помощью формул - т.е. забиваете кодом в ячейки формулы, потом меняете на значения.
Ну или можно попробовать открывать файл с помощью GetObject() - но я точно не знаю, как там с занятыми файлами...
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 07.05.2012, 21:27   #25
4uvak111
Пользователь
 
Регистрация: 12.11.2010
Сообщений: 18
По умолчанию

И все таки, как считывать информацию из открытых файлов?

И еще, как записать изменяющийся путь? Т.е. чтобы вместо "C:\book\list.xls" можно было написать %Текущая_папка%\list.xls ?

Последний раз редактировалось 4uvak111; 07.05.2012 в 22:08.
4uvak111 вне форума Ответить с цитированием
Старый 11.05.2012, 19:49   #26
4uvak111
Пользователь
 
Регистрация: 12.11.2010
Сообщений: 18
По умолчанию

А как складывать время - ч:мм:сс?
4uvak111 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сводная таблица на основе нескольких листов ElenaTro Microsoft Office Excel 3 25.07.2011 23:47
Сводная таблица с двух листов не выводит нужные данные kipish_lp Microsoft Office Excel 2 26.04.2010 12:46
Сводная таблица путем объединения нескольких диапазонов ЛесяЛ Microsoft Office Excel 1 10.01.2010 22:54
Сводная таблица mihakr Microsoft Office Excel 6 10.04.2009 14:00
Сводная таблица Галина Microsoft Office Excel 3 01.11.2007 20:01