2016-04-24 3 views
0

У меня есть книга Excel под названием «C: \ myfile.xlsm».Не удалось получить доступ к ячейкам в другой книге

В нем есть рабочий лист под названием «продажи».

Из другой открытой книги Я пытаюсь получить доступ к значению ячейки из этой книги C: \ myfile.xlsm.

(BTW: C: \ myfile.xlsm не открыт.)

Выполнение следующих терпит неудачу:

temp = Workbooks("C:\myfile.xlsm").Worksheets("sales").Range("C2").Value 

Я получаю эту ошибку, и я не знаю, почему:

время работы ошибка 9

Подстрочный из диапазона

+0

Вы действительно не задаете вопрос, знаете ли. Все ответы указывают, что вы хотите знать, ПОЧЕМУ вы получаете ошибку и как использовать код, который вы показываете. Немного несправедливо ответить на эти ответы, что ваша проблема связана со скоростью и что вы пытаетесь найти способ не открывать книгу! Тем не менее, поиск информации о подключении к книге с использованием OLE DB (соединение с базой данных). Если содержимое рабочей книги, которое вы хотите запросить, находится в формате «плоской таблицы», или ключевая информация находится в именованных диапазонах, что должно быть более эффективным, что фактически открывает книгу. –

+0

OLE DB работал как шарм. Очень быстро. Я запустил его в новой книге, которая обращается к существующей книге с более чем 80 000 строк. Первоначальная настройка заняла время, потому что в этой таблице было дюжину рабочих листов. Один содержит эти 80 000 строк. У других есть еще много тысяч. Но как только я выбрал именно эту книгу и сохранил новую книгу, я могу перезапустить ее и вытащить обновление всего за пять секунд. Отлично. –

+0

Рад, что это помогло :-) Проблема теперь в том, как бороться с этим обсуждением ... Моя склонность была бы такой: 1) Используйте ссылку [edit], чтобы дополнить свой исходный вопрос наблюдением за большим объемом данных и скоростью, являющейся фактор; 2) Запишите подход OLE DB, который вы разработали для себя, и опубликуйте его как ответ. В какой-то момент вы сможете щелкнуть галочку рядом с ней, чтобы отметить ее как «ответ». (Вам разрешено, даже поощряется, сделать это на Stack Overflow!) –

ответ

0

Это работает для меня, надеюсь, вам это тоже помогает?

Private Sub stuff() 
    Dim TemP As String 
    TemP = "C:\Users\Ashleysaurus\Desktop\doug" & "\" & "Book1.xlsm" 
    Set TemP2 = Workbooks.Open(TemP) 
    Temp3 = ActiveWorkbook.Sheets("Sheet1").Range("e1").Value 
    Debug.Print ; Temp3 
End Sub 
0

Вам необходимо открыть кулак, а затем файл.

Workbooks.Open FileName:="C:\myfile.xlsm" 

После вы можете использовать файл

temp = Workbooks("myfile.xlsm").Worksheets("sales").Range("C2").Value 

Если вы хотите получить значение только:

temp = ExecuteExcel4Macro("'C:[myfile.xlsm]Sales'!" & Range("C2").Range("A1").Address(, , xlR1C1)) 
+0

Я надеялся ** НЕ ** открыть файл. Он очень большой, и он медленно открывается. Я могу получить доступ к ячейкам из этой книги ** без ** открытия. Но это путем размещения соответствующих формул в ячейках листа. Что-то вроде: = 'C: \ [file.xlsm] sales'! C2 Но я действительно хочу делать что-то в VBA, и я не хочу ждать, пока откроется целевая книга. Есть ли способ? –

+0

Вы можете использовать ExecuteExcel4Macro: temp = ExecuteExcel4Macro ("'C: \ [myfile.xlsm] Продажи'! '& Range (« C2 »). Диапазон (« A1 »). Адрес (,, xlR1C1)) – Juanpablomo

0

использовать это:

Set wk = Workbooks.Open("C:\myfile.xlsm") 
temp = wk.Sheets("sales").Range("C2").Value 
wk.Close 
0

Для получения значения ячейки из другая рабочая книга, не открывая ее, попробуйте следующее:

Sub Demo()   
    Dim Path As String, FileName As String, SheetName As String, CellRange As String 
    Dim tempStr As String 
    Path = "C:\" 
    FileName = "myfile.xlsm" 
    SheetName = "Sales" 
    CellRange = Range("C2").Address(, , xlR1C1) 

    strRef = "'" & Path & "[" & FileName & "]" & SheetName & "'!" & CellRange 

    Result = ExecuteExcel4Macro(strRef) 
End Sub 
+0

Спасибо Mrig. Это должно быть именно то, что мне нужно. Я сейчас ухожу, чтобы попробовать. –

+0

ОК. Пробовал. Оно работает. Но, к сожалению, это очень медленно. Мой первоначальный вопрос заключался в том, чтобы скопировать только одну ячейку. Тем не менее, в полном решении я должен выделить около 6000 строк, каждая из которых содержит 7 ячеек. ЭТО ДЕЙСТВИТЕЛЬНО МЕДЛЕННО! :( –