Форум программистов, компьютерный форум, киберфорум
Наши страницы
VBA
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.97/34: Рейтинг темы: голосов - 34, средняя оценка - 4.97
NoviiMir
6 / 6 / 2
Регистрация: 23.09.2012
Сообщений: 427
1

Доступ к данным другой книги Excel

05.01.2014, 18:17. Просмотров 6907. Ответов 33
Метки нет (Все метки)

Нужно, работая в одной книге, открыть другую книгу и работать с данными оттуда. Есть фрагмент кода:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Dim wb As Workbook 
    DirName = ThisWorkbook.Path 
    Filename = DirName & "\Книга1.xls" 
    Set wb = Workbooks.Open(Filename) 
    
    Dim ws As Worksheet
    Set ws = Worksheets("Персонал")
    lstEmloyees.RowSource = "'Персонал'!A2:G" + CStr(wd.ws.UsedRange.SpecialCells(xlCellTypeLastCell).Row) 
        
    wb.Save
    wb.Close
Но что нужно дописать в строку
Visual Basic
1
lstEmloyees.RowSource = "'Персонал'!A2:G" + CStr(wd.ws.UsedRange.SpecialCells(xlCellTypeLastCell).Row)
чтобы программа работала?
Подскажите, пожалуйста. Не понимаю этого.
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.01.2014, 18:17
Ответы с готовыми решениями:

Обращение к данным из другой книги
привет! у меня небольшой и кажется довольно простой вопрос (сильно упростил задачу, потому что...

Как получить доступ к данным в новом окне excel?
Добрый день, форумчане! Возникла следующая проблема. Имеется 1 запущенный файл с макросом. Далее...

Выполнение процедуры из другой книги Excel
Как выполнить процедуру (обратиться к переменным) из другой книги EXCEL?

Получение данных из другой книги Excel
Существует Excel документ, допустим c://doc.xls с таблицей 3 на 4. Нужно создать макрос в другом...

Excel VBA: Копирование листа из другой книги
Снова здравствуйте! Пытаюсь скопировать лист из одной книги в другую Private Sub Load_Click() ...

33
Hugo121
6480 / 2533 / 455
Регистрация: 19.10.2012
Сообщений: 7,610
05.01.2014, 20:21 2
Возможно оно так заработает, если
Visual Basic
1
Set ws = wb.Worksheets("Персонал")
и тогда
Visual Basic
1
lstEmloyees.RowSource = "'Персонал'!A2:G" + CStr(ws.UsedRange.SpecialCells(xlCellTypeLastCell).Row)
Используйте Option explicit, полезно!

P.S. Вообще лучше вместо + писать &
1
NoviiMir
6 / 6 / 2
Регистрация: 23.09.2012
Сообщений: 427
05.01.2014, 22:52  [ТС] 3
Спасибо Вам большое!

Добавлено через 8 минут
Но возникла другая проблема. Книга открывается, данные считываются на форму, но появляется другая ошибка: Недостаточно памяти для завершения операции (Microsoft Forms).

Что это? И как с этим бороться? Теперь невозможно ничего сделать с формой, куда загружены данные.
0
Hugo121
6480 / 2533 / 455
Регистрация: 19.10.2012
Сообщений: 7,610
06.01.2014, 01:31 4
Так и думал - xlCellTypeLastCell лучше не использовать.
Определяйте иначе нужный диапазон.
0
06.01.2014, 01:31
NoviiMir
6 / 6 / 2
Регистрация: 23.09.2012
Сообщений: 427
07.01.2014, 17:35  [ТС] 5
А как иначе его определять? Подскажите, пожалуйста.
0
Hugo121
6480 / 2533 / 455
Регистрация: 19.10.2012
Сообщений: 7,610
07.01.2014, 19:01 6
это зависит от данных.
Бывает что достаточно
Visual Basic
1
[a1].currentregion
0
NoviiMir
6 / 6 / 2
Регистрация: 23.09.2012
Сообщений: 427
07.01.2014, 19:26  [ТС] 7
А можете рассказать что это и куда что писать?

P.S. Простите за глупые вопросы, но в VBA я полный чайник, а проект сдать в скором времени надо.
0
Hugo121
6480 / 2533 / 455
Регистрация: 19.10.2012
Сообщений: 7,610
07.01.2014, 22:24 8
Я думал, что моя фраза "это зависит от данных" выведет Вас на мысль, что конкретное решение может написать тот, кто видит эти данные
Раз показывать не хотите - поищите по форуму примеры с примерно таким кодом:
Visual Basic
1
iLastRow = Cells(Rows.Count, 1).End(xlUp).Row
0
NoviiMir
6 / 6 / 2
Регистрация: 23.09.2012
Сообщений: 427
08.01.2014, 13:26  [ТС] 9
Данные такие: самая простая табличка в несколько строк. Типа: фио человека, дата рождения, номер телефона. Вот и мне нужно как-то узнать кол-во строк в этой таблице.
0
Hugo121
6480 / 2533 / 455
Регистрация: 19.10.2012
Сообщений: 7,610
08.01.2014, 16:17 10
Visual Basic
1
msgbox [a1].currentregion.rows.count
0
NoviiMir
6 / 6 / 2
Регистрация: 23.09.2012
Сообщений: 427
09.01.2014, 18:41  [ТС] 11
а если книга будет защищена? проблем не будет?
0
NoviiMir
6 / 6 / 2
Регистрация: 23.09.2012
Сообщений: 427
09.01.2014, 19:24  [ТС] 12
Написала так:

Visual Basic
1
lstClients.RowSource = "'Клиенты'!A2:F" & CStr(ws.UsedRange.Row + ws.UsedRange.Rows.Count - 1)
По Вашему мнению, это будет работать, если книга будет защищена?
0
Hugo121
6480 / 2533 / 455
Регистрация: 19.10.2012
Сообщений: 7,610
09.01.2014, 19:27 13
Проблема в том, что [a1].CurrentRegion берётся с активного листа.
1
NoviiMir
6 / 6 / 2
Регистрация: 23.09.2012
Сообщений: 427
09.01.2014, 19:34  [ТС] 14
Visual Basic
1
lstClients.RowSource = "'Клиенты'!A2:F" & CStr(ws.UsedRange.Row + ws.UsedRange.Rows.Count - 1)
По Вашему мнению, это будет работать, если книга будет защищена?

Добавлено через 3 минуты
Охо-хо... Это тоже не работает. Что же делать тогда?
0
NoviiMir
6 / 6 / 2
Регистрация: 23.09.2012
Сообщений: 427
09.01.2014, 19:56  [ТС] 15
Нашла уже кучу вариантов на просторах сети, но ни один не подходит. Каждый раз одно и то же. Должен же быть какой-то способ! Помогите, пожалуйста. Мне самой уже никак не разобраться.
0
Миниатюры
Доступ к данным другой книги Excel  
Hugo121
6480 / 2533 / 455
Регистрация: 19.10.2012
Сообщений: 7,610
09.01.2014, 22:19 16
Ну я же как бы намекнул что А1 не указано чьё, поэтому берётся с активного листа.
Попробуйте так:
Visual Basic
1
2
3
Set ws = wb.Worksheets("Персонал")
 
lstEmloyees.RowSource = "'Персонал'!A2:G" & ws.[a1].currentregion.rows.count
Извините, вслепую, но может попал?
1
NoviiMir
6 / 6 / 2
Регистрация: 23.09.2012
Сообщений: 427
09.01.2014, 22:31  [ТС] 17
Нет, всё так же. Та же самая ошибка
0
Hugo121
6480 / 2533 / 455
Регистрация: 19.10.2012
Сообщений: 7,610
10.01.2014, 00:35 18
Хватит уже биться головой, давайте файлы.
Если вот прямо сейчас - то посмотрю сейчас. Если позже - то только завтра. возможно только вечером.
1
NoviiMir
6 / 6 / 2
Регистрация: 23.09.2012
Сообщений: 427
10.01.2014, 09:04  [ТС] 19
А можно я Вам их на почту отправлю?
0
Hugo121
6480 / 2533 / 455
Регистрация: 19.10.2012
Сообщений: 7,610
10.01.2014, 11:06 20
Секретные/личные данные и на почту нельзя
Сократите объём, замените личные данные на нейтральные "апельсины", оставьте минимум данных с форматами и расположением как в оригинале.
И сюда на форум, с описанием что именно нужно сделать.
1
10.01.2014, 11:06
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.01.2014, 11:06

Перенос данных с одного листа одной книги на другой лист другой книги с константой
Добрый вечер, товарищи! Есть прайс-лист, который содержит в себе много колонок и строк. На...

Excel, как вызвать макрос из другой книги программно?
как вызвать макрос из другой книги программно?

Как в макросе перейти на другой лист книги Excel
Мне нужно взять данные с одного листа и скопировать их в ячейки другого листа и далее работать со...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.