2013-08-05 4 views
3

У меня возникли проблемы с поиском строки внутри столбца другой книги CLOSED excel.VBA Excel запросит закрытую книгу без ее открытия

Следующий код дает ошибку несоответствия типов на MsgBox

Если, однако, я заменить эту строку с ret = "'" & wbPath & "[" & wbName & "]" & wsName & "'!" & Range("C3015").Address(True, True, -4150) то макрос работает, за исключением того, что только дает мне трудно закодированное значение (в данном случае значение в ячейке C3015).

Как найти другие значения в столбцах закрытых книг, не открывая их?

Dim wbName As String, wbPath As String, wsName As String 


wbPath = "Path\To\Workbook\" 
wbName = "NameOfWorkbook.xlsb" 
wsName = "NameOfWorkSheet" 

Dim ret As String  

ret = "'" & wbPath & "[" & wbName & "]" & wsName & "'!" & Range("D:D").Find(What:="SearchColumnDForThisString") 

MsgBox ExecuteExcel4Macro(ret) // <--------- TYPE MISMATCH ERROR 
+0

Range.Find() возвращает диапазон (не строку), попробуйте Range.Find(). – NickSlash

+0

Спасибо, теперь я не получаю сообщение об ошибке, но вычисление неверно. Он продолжает находить неправильные значения. –

+0

Что делает метод Address()? Могу ли я избавиться от него? –

ответ

0

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

Dim Wn as Window 
Dim Wb as Workbook 

Application.ScreenUpdating = False 

Set Wb = Application.Workbooks.Open("your book") 

For Each Wn in Wb 
    Wn.Visible = False 
Next Wn 

Application.ScreenUpdating = True 
+0

Это все еще открывает другой проект. Нет ли способа закрыть запрос? –

+0

Я думаю, что книга будет открыта (в некоторой степени), чтобы получить ваши данные, и каждый раз, когда вы обновляете ссылки. Есть ли конкретная причина, по которой вы не хотите, чтобы файл был открыт? – NickSlash

Смежные вопросы