GetValue не работает...!!

Программирование на Visual Basic for Applications
own
Новичок
Новичок
 
Сообщения: 43
Зарегистрирован: 07.05.2004 (Пт) 23:35

GetValue не работает...!!

Сообщение own » 18.05.2005 (Ср) 8:52

Приветствую всех!!

Создал на листе кнопку, хочу чтобы значения из закрытой книги перешли на текущий рабочий лист
Код такой:

Function GetValue(path, file, sheet, ref)
Dim arg As String
arg = "'" & path & "[" & file & "]" & sheet & "'!" & _
range(ref).range("A1").Address(, , xlR1C1)
GetValue = ExecuteExcel4Macro(arg)
End Function

Sub CommandButton1_Click()
p = "c:\!!\Книга1"
f = "Книга1.xls"
s = "Лист1"
Application.ScreenUpdating = False
For r = 1 To 2
For c = 1 To 4
a = Cells(r, c) = GetValue(p, f, s, a)
Next c
Next r
Application.ScreenUpdating = True
End Sub

Это пример из книги но он выдает ошибку:
"Метод Range объекта Worksheet failed"
Помогите прошу вас, что здесь не так
Офисс 2003
I'm Blind

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 18.05.2005 (Ср) 10:29

Пример из книги... С необъявленными переменными... С непонятной и жуткой командой a = Cells(r, c) = GetValue(p, f, s, a)...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 18.05.2005 (Ср) 10:56

Чего же непонятного, a -- логическая переменная, которая сравнивает две ячейки :)

Правда и GetValue и Cells могут быть объектами, поэтому такая запись конечно странна.
Lasciate ogni speranza, voi ch'entrate.

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 18.05.2005 (Ср) 11:05

Ага, а потом эта "a" передается в функцию GetValue в качестве адреса Range'а... Ню-ню...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 18.05.2005 (Ср) 11:16

И правда, я то изначальный код не глядел, я только GSerg'у отвечал :)

Мдя, маразм :)
Lasciate ogni speranza, voi ch'entrate.

Igor_123
Осторожный Баянист
Осторожный Баянист
Аватара пользователя
 
Сообщения: 1325
Зарегистрирован: 21.07.2004 (Ср) 13:00
Откуда: Днепропетровск

Сообщение Igor_123 » 18.05.2005 (Ср) 11:19

Зато вложенность циклов нормальная.

У кого ещё есть комментарии :?: :D
Водки я вам не обещаю, но погуляем хорошо.
И. Сусанин.

Аватара (с) Тёмыч

own
Новичок
Новичок
 
Сообщения: 43
Зарегистрирован: 07.05.2004 (Пт) 23:35

Сообщение own » 18.05.2005 (Ср) 12:35

Этот пример взят из книги и не работает,
кто может посоветовать как осуществить извлечение из закрытой книги значений диапазона ячеек.
Очень благодарю.
I'm Blind

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 18.05.2005 (Ср) 12:41

Из закрытой никак. Книгу надо открыть, а затем использовать objWorkbook.objWorksheet.Cells(Row, Column).Value.
Lasciate ogni speranza, voi ch'entrate.

own
Новичок
Новичок
 
Сообщения: 43
Зарегистрирован: 07.05.2004 (Пт) 23:35

Сообщение own » 18.05.2005 (Ср) 14:12

Но в книге Джон пишет что можно через XML макрос т.е. пишем функцию GetValue, а потом код который выше, может быть в этом коде шибки просто имееются?
Еще на одном форуме читал что можно через iExtract=......
Дело в том что дали файл xls набитый до отказа формулами и листами поэтому он слишком долго открывается(мин20), и каждый раз открывать это же умереть можно.
I'm Blind

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 18.05.2005 (Ср) 14:16

Если нужны только значения, то открывай его как базу данных. Но открывать надо по любому.
Lasciate ogni speranza, voi ch'entrate.

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 18.05.2005 (Ср) 15:26

Если проблема в формулах, отключи их автоматический пересчет (либо ручками, либо через Application.Calculation = xlCalculationManual).

Ig
Обычный пользователь
Обычный пользователь
 
Сообщения: 73
Зарегистрирован: 30.04.2005 (Сб) 12:37
Откуда: Far East

Сообщение Ig » 18.05.2005 (Ср) 15:30

A VBA Function to Get a Value From a Closed File
VBA does not include a method to retrieve a value from a closed file. You can, however, take advantage of Excel's ability to work with linked files.

This tip contains a VBA function that retrieves a value from a closed workbook. It does by calling an XLM macro.

Note:
You cannot use this function in a worksheet formula.

The GetValue Function
The GetValue function, listed below takes four arguments:

path: The drive and path to the closed file (e.g., "d:\files")
file: The workbook name (e.g., "99budget.xls")
sheet: The worksheet name (e.g., "Sheet1")
ref: The cell reference (e.g., "C4")
Private Function GetValue(path, file, sheet, ref)
' Retrieves a value from a closed workbook
Dim arg As String

' Make sure the file exists
If Right(path, 1) <> "\" Then path = path & "\"
If Dir(path & file) = "" Then
GetValue = "File Not Found"
Exit Function
End If

' Create the argument
arg = "'" & path & "[" & file & "]" & sheet & "'!" & _
Range(ref).Range("A1").Address(, , xlR1C1)

' Execute an XLM macro
GetValue = ExecuteExcel4Macro(arg)
End Function

Using the GetValue Function
To use this function, copy the listing to a VBA module. Then, call the function with the appropriate arguments. The Sub procedure below demonstrates. It simply displays the value in cell A1 in Sheet1 of a file named 99Budget.xls, located in the XLFiles\Budget directory on drive C:.

Sub TestGetValue()
p = "c:\XLFiles\Budget"
f = "99Budget.xls"
s = "Sheet1"
a = "A1"
MsgBox GetValue(p, f, s, a)
End Sub
Another example is shown below. This procedure reads 1,200 values (100 rows and 12 columns) from a closed file, and places the values into the active worksheet.

Sub TestGetValue2()
p = "c:\XLFiles\Budget"
f = "99Budget.xls"
s = "Sheet1"
Application.ScreenUpdating = False
For r = 1 To 100
For c = 1 To 12
a = Cells(r, c).Address
Cells(r, c) = GetValue(p, f, s, a)

Next c
Next r
Application.ScreenUpdating = True
End Sub
Caveat
In order for this function to work properly, a worksheet must be active in Excel. It will generate an error if all windows are hidden, or if the active sheet is a Chart sheet.

(С)одрано отсюда 8)
Последний раз редактировалось Ig 18.05.2005 (Ср) 16:12, всего редактировалось 2 раз(а).
"Нормальные герои всегда идут в обход..."

own
Новичок
Новичок
 
Сообщения: 43
Зарегистрирован: 07.05.2004 (Пт) 23:35

Сообщение own » 18.05.2005 (Ср) 15:42

Пересчет отключен, он без пересчета открывается 20 мин
машина довольно прилична 1,8ГГц
Фпйл состоит из 8 листов, 1лист является забивным туда вносятся всякие данные, вот есть мысль сделать так :
этот большой файл запущен допустем на сервере а клиент забивает данные, которые по нажатии кнопочки отправляются на сервер, а файл на сервере принимает и вставляет в этот лист, т.е. общение между Екселями, один передает а второй принимает.
Можно ли такое реализовать, если да то как или дайте ссылку где можно подробно почитать об этом.
С Уважением. спасибо
I'm Blind

Igor_123
Осторожный Баянист
Осторожный Баянист
Аватара пользователя
 
Сообщения: 1325
Зарегистрирован: 21.07.2004 (Ср) 13:00
Откуда: Днепропетровск

Сообщение Igor_123 » 18.05.2005 (Ср) 15:53

Сделай БД на акцесе, например, куда будут забивать данные.
А в эксель будешь выбрасывать по необходимости, для анализа или отчета.

own писал(а):машина довольно прилична 1,8ГГц
Файл состоит из 8 листов,

Хотя чего-то не то, жена с файл-сервера открывает файлы 50 - 100 Мб
проц такой-же, правда ОЗУ под 1Гб, открываеться в пределах минуты.

Советую сделать рез. копию и пересмотреть структуру файла.
Водки я вам не обещаю, но погуляем хорошо.
И. Сусанин.

Аватара (с) Тёмыч

Igor_123
Осторожный Баянист
Осторожный Баянист
Аватара пользователя
 
Сообщения: 1325
Зарегистрирован: 21.07.2004 (Ср) 13:00
Откуда: Днепропетровск

Сообщение Igor_123 » 18.05.2005 (Ср) 15:54

Сделай БД на акцесе, например, куда будут забивать данные.
А в эксель будешь выбрасывать по необходимости, для анализа или отчета.

own писал(а):машина довольно прилична 1,8ГГц
Файл состоит из 8 листов,

Хотя чего-то не то, жена с файл-сервера открывает файлы 50 - 100 Мб
проц такой-же, правда ОЗУ под 1Гб, открываеться в пределах минуты.

Советую сделать рез. копию и пересмотреть структуру файла.
Водки я вам не обещаю, но погуляем хорошо.
И. Сусанин.

Аватара (с) Тёмыч

Igor_123
Осторожный Баянист
Осторожный Баянист
Аватара пользователя
 
Сообщения: 1325
Зарегистрирован: 21.07.2004 (Ср) 13:00
Откуда: Днепропетровск

Сообщение Igor_123 » 18.05.2005 (Ср) 15:55

Сделай БД на акцесе, например, куда будут забивать данные.
А в эксель будешь выбрасывать по необходимости, для анализа или отчета.

own писал(а):машина довольно прилична 1,8ГГц
Файл состоит из 8 листов,

Хотя чего-то не то, жена с файл-сервера открывает файлы 50 - 100 Мб
проц такой-же, правда ОЗУ под 1Гб, открываеться в пределах минуты.

Советую сделать рез. копию и пересмотреть структуру файла.
Водки я вам не обещаю, но погуляем хорошо.
И. Сусанин.

Аватара (с) Тёмыч

Igor_123
Осторожный Баянист
Осторожный Баянист
Аватара пользователя
 
Сообщения: 1325
Зарегистрирован: 21.07.2004 (Ср) 13:00
Откуда: Днепропетровск

Сообщение Igor_123 » 18.05.2005 (Ср) 15:56

Сделай БД на акцесе, например, куда будут забивать данные.
А в эксель будешь выбрасывать по необходимости, для анализа или отчета.

own писал(а):машина довольно прилична 1,8ГГц
Файл состоит из 8 листов,

Хотя чего-то не то, жена с файл-сервера открывает файлы 50 - 100 Мб
проц такой-же, правда ОЗУ под 1Гб, открываеться в пределах минуты.

Советую сделать рез. копию и пересмотреть структуру файла.
Водки я вам не обещаю, но погуляем хорошо.
И. Сусанин.

Аватара (с) Тёмыч

Igor_123
Осторожный Баянист
Осторожный Баянист
Аватара пользователя
 
Сообщения: 1325
Зарегистрирован: 21.07.2004 (Ср) 13:00
Откуда: Днепропетровск

Сообщение Igor_123 » 18.05.2005 (Ср) 16:02

Прошу прощения за многоразовость. Мне ругалось что не может отправить данные. :(
Водки я вам не обещаю, но погуляем хорошо.
И. Сусанин.

Аватара (с) Тёмыч

echo
Обычный пользователь
Обычный пользователь
 
Сообщения: 62
Зарегистрирован: 26.01.2005 (Ср) 8:25
Откуда: Хабаровск

Сообщение echo » 19.05.2005 (Чт) 1:10

Igor_123
А убрать за собой? :wink:
Душа болит... А лечишь её - печень болит!

Igor_123
Осторожный Баянист
Осторожный Баянист
Аватара пользователя
 
Сообщения: 1325
Зарегистрирован: 21.07.2004 (Ср) 13:00
Откуда: Днепропетровск

Сообщение Igor_123 » 19.05.2005 (Чт) 10:37

Если бы давало убирать за собой, не извинялся
Водки я вам не обещаю, но погуляем хорошо.
И. Сусанин.

Аватара (с) Тёмыч

own
Новичок
Новичок
 
Сообщения: 43
Зарегистрирован: 07.05.2004 (Пт) 23:35

Сообщение own » 19.05.2005 (Чт) 12:57

спасибо друзья за ответы, я во всем разобрался, все работает отлично. :)
I'm Blind

own
Новичок
Новичок
 
Сообщения: 43
Зарегистрирован: 07.05.2004 (Пт) 23:35

Сообщение own » 20.05.2005 (Пт) 11:36

Маленький вопрос остался.

В файле открыто очень много незадействованых ячеек,
т.е. 5000 ячеек содержит в себе информацию
а остальные 10000 просто открыты
как их убрать чтобы бегунком передвигаться только по открытым ячейкам
I'm Blind

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 20.05.2005 (Пт) 11:38

Что значит "открытая ячейка"?

own
Новичок
Новичок
 
Сообщения: 43
Зарегистрирован: 07.05.2004 (Пт) 23:35

Сообщение own » 20.05.2005 (Пт) 11:47

Ну вот берем пустую книгу выделяем 400 строк, соответственно лист растянулся на 400 строк, следовательно мы можем передвигаться вверх и вниз на 400 строк с пустыми ячейками (т.е. я их открыл 400 строк и куча столбцов), а теперь надо 300 строк убать, чтобы я мог передвигаться по 100 строкам вверх и вниз,
это я спрашиваю потому что файл открывается очень долго, и мне кажется что из-за того что листы растянуты до 40000 строк, а забито всего лишь там 100 строк а остальные 39900 просто пустые, поэтому наверно и файл долго открывается, вот и надо все пустые строки убрать
I'm Blind

Igor_123
Осторожный Баянист
Осторожный Баянист
Аватара пользователя
 
Сообщения: 1325
Зарегистрирован: 21.07.2004 (Ср) 13:00
Откуда: Днепропетровск

Сообщение Igor_123 » 20.05.2005 (Пт) 13:09

Выделяешь пустые строки или до конца файла и удаляешь. Иногда помогает :D
Водки я вам не обещаю, но погуляем хорошо.
И. Сусанин.

Аватара (с) Тёмыч

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 20.05.2005 (Пт) 13:13

У тебя в одной из ячеек пробел или нестандартное форматирование.
Найди ее, очисти и сохрани документ. После открытия все станет нормально.
Lasciate ogni speranza, voi ch'entrate.

own
Новичок
Новичок
 
Сообщения: 43
Зарегистрирован: 07.05.2004 (Пт) 23:35

Сообщение own » 20.05.2005 (Пт) 13:44

Все понял спасибо друзья
I'm Blind


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4

    TopList