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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.05.2010, 12:53   #1
Aqil_f
Форумчанин
 
Регистрация: 12.05.2009
Сообщений: 273
По умолчанию взять данные из закрытого книга

Используется такой код:

Код:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Selection.Count > 1 Then Exit Sub
If Target.Column = 13 And Target <> "" Then
UserForm1.TextBox1.Value = Target.Value
UserForm1.Show
End If
Sheets(2).Cells(3, 2).Value = Sheets(1).Cells(Target.Row, 6).Value
Sheets(2).Cells(5, 2).Value = Sheets(1).Cells(Target.Row, 7).Value & " " & Sheets(1).Cells(Target.Row, 8).Value & " " & Sheets(1).Cells(Target.Row, 9).Value
Sheets(2).Cells(7, 2).Value = Sheets(1).Cells(Target.Row, 2).Value
End Sub
C помощи этого кода информация из одного листа "отправляется" в другой. С помощи этого кода можно ли взять информация из закрытого книга? (Связывающие "поле" показан с красными шрифтами.)

T.e., если на 1-й книге курсор находится допустим 4-м строке (F4=622633), с другого книге (K2.XLS) допустим из листа "AA" надо взять 11-ые строку (B11=622633), из листа "TT" надо взять 6-ое строку (B6=622633)
Вложения
Тип файла: rar k12.rar (53.2 Кб, 16 просмотров)
Aqil_f вне форума Ответить с цитированием
Старый 13.05.2010, 13:47   #2
alex77755
Форумчанин
 
Аватар для alex77755
 
Регистрация: 14.02.2009
Сообщений: 753
По умолчанию

Цитата:
из закрытого книга
нельзя никак
Это всё равно, что взять данные из книги(диска), которые лежат в серванте(шкафу) на полке.
Всё равно их нужно взять в руки и открыть
Вот что открыл - можно и не афишировать(не показывать)
помогу решить контрольные VB6, VBA (недорого)
Alex77755@mail.ru
alex77755 вне форума Ответить с цитированием
Старый 13.05.2010, 14:07   #3
Aqil_f
Форумчанин
 
Регистрация: 12.05.2009
Сообщений: 273
По умолчанию Aqil_f

' Помоему можно открыть
Set wb = Workbooks.Open(полное имя файла,0, True, True)
' что-то делать
wb.Close False
' и закрыть.

Только незнаю как 'связывать 2 поле' из разных книг.
Aqil_f вне форума Ответить с цитированием
Старый 13.05.2010, 14:22   #4
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

То alex77755 все можно извлечь и без открытия документа

Это справедливо .если файлы находятся в одной папке.
Код:
 Sheets(2).Range("A1").Formula = "='[k2.xls]AA'!" & "B6"
 Sheets(2).Range("A1") = Range("B6")
iPath - это месторасположения файла (каталог) например D\Temp\
iFile - это название файла k2.xls
iList - это название листа в файле из которого мы извлекаем данные
"B6" - это адрес ячейки из которой нам нужно получить данные
"A1" - это адрес ячейки куда вставляем данные

Если в разных,то
Код:
Range("A1").Formula = "='" & iPath & "[" & iFile & "]" & iList & "'!" & "B6" 
Range("A1") = Range("B6")
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 13.05.2010, 14:48   #5
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Цитата:
Сообщение от doober Посмотреть сообщение
Range("A1") = Range("B6")
Range("A1") = Range("A1") ?!!!
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 13.05.2010 в 14:51.
Hugo121 вне форума Ответить с цитированием
Старый 13.05.2010, 15:27   #6
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Hugo121 все правильно,допустил ошибку
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 13.05.2010, 16:00   #7
Aqil_f
Форумчанин
 
Регистрация: 12.05.2009
Сообщений: 273
По умолчанию Aqil_f

Файлы находятся в одной папке, поэтому Ваш код
Код:
Sheets(2).Range("A1").Formula = "='[k2.xls]AA'!" & "B6"
подходить .

Но, дело в том что здесь B6 не меняется. А у меня это меняется в зависимости от выбора строку в 1-й книге (K1.XLS) в LIST1 (столбец F)
Если в LIST1 выбран 4-я строка (F4=622633), тогда в другом книге (K2.XLS, лист АА) должен выбратся соответствующий запись, т.e., 11-я. (Потому-что только в этом записе в столбец B =622633)
Aqil_f вне форума Ответить с цитированием
Старый 13.05.2010, 17:24   #8
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Код:
Private Sub CommandButton1_Click()

Range("XX") = Data_cells("AA", "B6") 'Range("XX") -ячейка.куда вставить данные
End Sub


'sh_name  имя листа .откуда берется информация,Adr_cells соответственно ячейка этого листа.откуда берутся данные
Public Function Data_cells(sh_name As String, Adr_cells As String)
Dim path As String, iAddress As String
path = Replace(ThisWorkbook.FullName, ThisWorkbook.Name, "")
iAddress = "'" & path & "[k2.xls]" & sh_name & "'!" & Range(Adr_cells).Address(ReferenceStyle:=xlR1C1)
Data_cells = ExecuteExcel4Macro(iAddress)
End Function
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 14.05.2010, 07:27   #9
Aqil_f
Форумчанин
 
Регистрация: 12.05.2009
Сообщений: 273
По умолчанию

Еще раз хочу обяснить свою задачу. В книге K1 (LIST1) курсор находятся в каком-то записе (допустим в 3-м), здесь в столбец F=622630. Тогда некоторые данные из этой записе "отправляется" в LST2
Код:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Selection.Count > 1 Then Exit Sub
If Target.Column = 13 And Target <> "" Then
    UserForm1.TextBox1.Value = Target.Value
    UserForm1.Show
End If
     Sheets(2).Cells(3, 2).Value = Sheets(1).Cells(Target.Row, 6).Value
    Sheets(2).Cells(5, 2).Value = Sheets(1).Cells(Target.Row, 7).Value & "   " & Sheets(1).Cells(Target.Row, 8).Value & "   " & Sheets(1).Cells(Target.Row, 9).Value
    Sheets(2).Cells(7, 2).Value = Sheets(1).Cells(Target.Row, 2).Value
End Sub
В это время программа должен проверить книге K2 (лист АА, столбец B) есть ли такой запись где B=622630. (В данном случае 9-я строка). Если есть, тогда из этого записа некоторые данные должен "отправляется" в К2 (LIST2). Если нет такой запись ничего не должен делать.
Помогите пожалуйста, как можно решать такую задачу?
Aqil_f вне форума Ответить с цитированием
Старый 14.05.2010, 09:17   #10
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Добавьте Find. Ищите Sheets(1).Cells(Target.Row, 6).Value в книге K2 (лист АА, столбец B).
Но похоже что без открытия книги не получится. Но можно это сделать скрытно и сразу закрыть.
Вот такая заготовка, пока нескрытно, немного поменял порядок операторов:

Код:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Selection.Count > 1 Then Exit Sub
If Target.Column = 13 And Target <> "" Then
UserForm1.TextBox1.Value = Target.Value
UserForm1.Show
    Sheets(2).Cells(3, 2).Value = Sheets(1).Cells(Target.Row, 6).Value
    Sheets(2).Cells(5, 2).Value = Sheets(1).Cells(Target.Row, 7).Value & "   " & Sheets(1).Cells(Target.Row, 8).Value & "   " & Sheets(1).Cells(Target.Row, 9).Value
    Sheets(2).Cells(7, 2).Value = Sheets(1).Cells(Target.Row, 2).Value
Set wb = Workbooks.Open("C:\temp\agilf\K2.xls", 0, True, True)
        Set y = wb.Worksheets(1).Columns(2).Find(what:=ThisWorkbook.Sheets(1).Cells(Target.Row, 6).Value, LookIn:=xlValues, lookat:=xlWhole, MatchCase:=False)
        If Not y Is Nothing Then MsgBox "Find in " & y.Address & " !!!"
wb.Close False
End If
End Sub
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 14.05.2010 в 09:38.
Hugo121 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
может ли макрос взять данные из файла не открывая сам файл? kievlyanin Microsoft Office Excel 1 14.10.2009 19:51
чтение макросов из закрытого шаблона viter.alex Microsoft Office Word 0 30.01.2009 12:16
Экспорт данных из закрытого файла КаМММ Microsoft Office Excel 6 06.10.2008 07:47
Помогите плз. Необходимо взять данные из файлов по критерию. Rom1k06 Microsoft Office Excel 5 30.07.2008 12:57
Взять данные из таблицы Access Inbox БД в Delphi 2 04.07.2007 13:53