Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Копировать лист из закрытой книги Еxcel / 16 сообщений из 16, страница 1 из 1
24.06.2006, 11:43:14
    #33812835
betepon
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копировать лист из закрытой книги Еxcel
Существуют 2 книги "Книга1.xls" и "Книга2.xls"
В них есть 2 одинаковых листа "Данные1" и "Данные2"
"Книга2.xls" открыта в Excel

Задача - скопировать листы "Данные1" и "Данные2" из "Книга1.xls" в "Книга2.xls" на листы с темиже именами.

Проблему решил следующим образом.

Код: 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.
Dim iRow As Integer
Dim Book As Workbook

Application.DisplayAlerts = False
Application.Visible = False
For Each Book In Workbooks
    If Book.Path = "" Then Book.Close
Next Book

    SelfName = ActiveWorkbook.Name
      
 Workbooks(Name_PR).Activate
 iRow = Sheets("Данные1").UsedRange.Row + Sheets("Данные1").UsedRange.Rows.Count -  1 
 For i =  1  To iRow
    Workbooks(Name_PR).Activate
    Worksheets("Данные1").Rows(i).Copy
    Workbooks(SelfName).Activate
    Worksheets("Данные1").Select
    Worksheets("Данные1").Rows(i).Select
    Worksheets("Данные1").Paste
 Next i

 Workbooks(Name_PR).Activate
 iRow = Sheets("Данные2").UsedRange.Row + Sheets("Данные2").UsedRange.Rows.Count -  1 
 For i =  1  To iRow
    Workbooks(Name_PR).Activate
    Worksheets("Данные2").Rows(i).Copy
    Workbooks(SelfName).Activate
    Worksheets("Данные2").Select
    Worksheets("Данные2").Rows(i).Select
    Worksheets("Данные2").Paste
 Next i

  Cancel = MsgBox("Закрываем " + Name_PR + " ?", vbOKCancel)
  If Cancel = vbOK Then Workbooks(Name_PR).Close

For Each Book In Workbooks
    If Book.Path = "" Then Book.Close
Next Book
Application.Visible = True
Application.DisplayAlerts = True

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

Код: plaintext
1.
2.
arg = "'" + Path + "[" + File + "]" + Sheet + "'!" + Range(Ref).Range("A1").Address(, , xlR1C1)
GetValue = ExecuteExcel4Macro(arg)
Я так представляю, что можно и диапазон так считать. А вот как лист считать, и не открывать его при этом (чтение из закрытого листа).

Подскажите пожалуйста.
------------------------
С уважением Betepon
...
Рейтинг: 0 / 0
24.06.2006, 12:27:54
    #33812862
k-nike2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копировать лист из закрытой книги Еxcel
beteponА вот как лист считать, и не открывать его при этом (чтение из закрытого листа).
Можно через ADO. Поиск рулит.
...
Рейтинг: 0 / 0
24.06.2006, 13:52:21
    #33812899
betepon
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копировать лист из закрытой книги Еxcel
Я понимаю, что сделать это можно как в этом прмере
(пример не мой - взят из этого же форума)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
    Dim cnn As ADODB.Connection
    Dim rst As ADODB.Recordset
    
    Set cnn = New ADODB.Connection
    Set rst = New ADODB.Recordset
    
    cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
      "Data Source=D:\1\1.xls;" & _
      "Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"""
    
    rst.Open "SELECT * FROM [Лист1$A1:B6]", cnn
    
    Range("A1").CopyFromRecordset rst
    
    rst.Close
    cnn.Close
    
    Set rst = Nothing
    Set cnn = Nothing

Но я никогда не знаю количество данных (а конкретнее строк - стобцы фиксированы) которое мне придется читать.

В результате при чтении я не знаю границ для Range
Если бы можно было определить этот параметр, не открывая книгу - тогда проблемма я думаю была - бы решена.

С уважением BETEPON
---------------------------
Ну вот собственно и ВСЕ.
Подпись:Смерть
...
Рейтинг: 0 / 0
26.06.2006, 09:01:59
    #33813696
vkodor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копировать лист из закрытой книги Еxcel
Excel и SQL
можно подключаться к листу
Код: plaintext
rst.Open "SELECT * FROM [Лист1$]", cnn
...
Рейтинг: 0 / 0
26.06.2006, 12:01:14
    #33814189
betepon
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копировать лист из закрытой книги Еxcel
Огромное спасибо Всем откликнувшимся. Буду пробовать.

С уважением BETEPON
---------------------------
Ну вот собственно и ВСЕ.
Подпись:Смерть
...
Рейтинг: 0 / 0
26.06.2006, 14:55:09
    #33814642
100g
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копировать лист из закрытой книги Еxcel
betepon
Но я никогда не знаю количество данных (а конкретнее строк - стобцы фиксированы) которое мне придется читать.

В результате при чтении я не знаю границ для Range
Если бы можно было определить этот параметр, не открывая книгу - тогда проблемма я думаю была - бы решена.


Создай динамически именованый диапазон и обращайся по имени Range("МойДиапазон").
Создание динамического имени делается в меню "Вставка-Имя-Присвоить..."
В Имя пишешь Имя диапазона, в формулу пишешь функцию смещение.

ЗЫ: В примере в столбце A:A не должно быть пропусков. Range("МойДиапазон") вернёт данные A2:D4.
...
Рейтинг: 0 / 0
26.06.2006, 16:55:44
    #33814965
100g
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копировать лист из закрытой книги Еxcel
... Ну, и соответственно, когда в пятой строке появятся данные, то Range("МойДиапазон") вернет диапазон A2:D5.
...
Рейтинг: 0 / 0
26.06.2006, 18:24:06
    #33815249
betepon
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копировать лист из закрытой книги Еxcel
автординамически именованый диапазон
Именованый я понимаю, а вот что такое динамический именованый - не знаю. Сори. Объясните пожалуйста подробнее.

Кроме того в той книге, которую я читаю, в момент, когда я ее читаю, могут работать (а могут и не работать) другие VBA, которые изменяют ее содержимое.
При чем эти макросы могут принадлежать, а могут и не принадлежать этой книге.

Такой закос под базу данных.


С уважением BETEPON
---------------------------
Ну вот собственно и ВСЕ.
Подпись:Смерть
...
Рейтинг: 0 / 0
26.06.2006, 20:45:54
    #33815495
100g
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копировать лист из закрытой книги Еxcel
betepon автординамически именованый диапазон
Именованый я понимаю, а вот что такое динамический именованый - не знаю. Сори. Объясните пожалуйста подробнее.
Простой именованый диапазон это, например A1:B2 и баста!
А динамически именованный означает, что имя может быть присвоено не стабильному диапазону, а меняющемуся. Применяется в случаях, когда размер диапазона заранее не известен, но может быть описан. Для создания адреса диапазона, я использую функцию СМЕЩ(). Собственно она возвращает адрес диапазона. У этой функции есть пять параметров. Первый параметр, это адрес базовой ячейки от которой будет производиться расчёт левого верхнего угла диапазона, например А1. Второй и третий параметр это смещение относительно А1 по строкам и столбцам. Например, если эти параметры будут равны 1 и 2, соответственно, то правый верхний угол диапазона будет ячейкой С2 (на 1 вниз, на 2 направо). Четвертый и пятый параметр, это высота и ширина диапазона. Т.е. функция СМЕЩ(А1,1,1,2,2) вернёт адрес B2:C3, а функция СУММ(СМЕЩ(А1,1,1,2,2)) выдаст сумму данных в диапазоне B2:C3.
Замечательная особенность функции СМЕЩ() является возможность использования выражений в качестве параметров. Например, в качестве четвертого параметра можно использовать функцию СЧЁТЗ(А:А). Так высота массива будет соответствовать количеству заполненных ячеек в столбце А:А. Другими словами нам заранее не известно что просуммирует функция СУММ(СМЕЩ(А1,0,1,СЧЁТЗ(А:А),2)), но мы можем сказать, что будут просуммированы данные из столбцов В и С, начиная со строки 2 и до строки в которой есть данные в ячейке А.
Далее смотри мой пример по сабжу :)
...
Рейтинг: 0 / 0
27.06.2006, 02:18:40
    #33815681
100g
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копировать лист из закрытой книги Еxcel
Если говорить коротко, то динамически именованный диапазон это имя которое ссылается на диапазон в котором ты никогда не знаешь количество данных (строк и/или столбцов) которые тебе придется читать.
М:)
...
Рейтинг: 0 / 0
27.06.2006, 02:23:29
    #33815683
100g
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копировать лист из закрытой книги Еxcel
betepon
Кроме того в той книге, которую я читаю, в момент, когда я ее читаю, могут работать (а могут и не работать) другие VBA, которые изменяют ее содержимое.
Тут, конечно, есть существенное (точнее - основное) отличие от базы данных. Пока изменяемый файл не будет сохранен, другие пользователи не увидят изменений. Но тут уж что уж тут.
...
Рейтинг: 0 / 0
27.06.2006, 02:29:17
    #33815684
100g
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копировать лист из закрытой книги Еxcel
100g...функция СУММ(СМЕЩ(А1,0,1,СЧЁТЗ(А:А),2)), но мы ...
Сори. Читай: ...функция СУММ(СМЕЩ(А1,1,1,СЧЁТЗ(А:А),2)), но мы...
...
Рейтинг: 0 / 0
27.06.2006, 09:54:52
    #33815936
betepon
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копировать лист из закрытой книги Еxcel
Огромное спасибо. Буду пробовать.
Хотя я предпочел бы не создавать формул на листах, а использовать только VBA.


С уважением BETEPON
---------------------------
Ну вот собственно и ВСЕ.
Подпись:Смерть
...
Рейтинг: 0 / 0
27.06.2006, 10:39:58
    #33816044
100g
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копировать лист из закрытой книги Еxcel
beteponОгромное спасибо. Буду пробовать.
Хотя я предпочел бы не создавать формул на листах, а использовать только VBA.


)))))) Так формул на листе и нет. Она в объявлении имени, а на листе только данные.

(Внимание! оффтопик) Коль уж понесло меня тут про динамически именованные диапазоны, то приведу еще один любопытный пример их использования. Это построение графиков с самообновляющимися исходными данными. Попробуй добавить данные на Лист1 и посмотри на диаграмму ;)
...
Рейтинг: 0 / 0
08.07.2006, 10:00:18
    #33839922
betepon
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копировать лист из закрытой книги Еxcel
Спасибо огромное - разбираюсь с примерами.
По пути получается много забавных глюков.

С уважением BETEPON
---------------------------
Ну вот собственно и ВСЕ.
Подпись:Смерть
...
Рейтинг: 0 / 0
08.07.2006, 10:25:20
    #33839929
100g
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копировать лист из закрытой книги Еxcel
beteponСпасибо огромное - разбираюсь с примерами.
По пути получается много забавных глюков.

)))
Удачи! Я еще часок буду на связи. Если есть вопросы стучись в Асю :)
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Копировать лист из закрытой книги Еxcel / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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