2013-04-16 4 views
2
Sub search  
Set objExl = CreateObject("Excel.Application") 
Set objWb = objExl.Workbooks 
objWb.Open("C:\Documents and Settings\user\Desktop\book.xls") 
Set strbol = objWb("C:\Documents and Settings\user\Desktop\book.xls").Sheets(1).Cells.Find(document.getElementById("q").Value, Range("A1"), xlValues, xlPart, xlByRows, xlNext, False, False) 
Set objDiv = document.getElementById("content") 
objDiv.innerText = "Result: " & objWb.Sheets(1).Cells(strbol.Row,strbol.Column).Offset(0,-4).Value  
objWb("C:\Documents and Settings\user\Desktop\book.xls").Close 
Set objWb = Nothing 
Set objExl = Nothing 
End Sub 

Выше есть HTA-код, который получает слово запроса из текстового поля HTA, находит это слово в excel и возвращает/отображает итоговое значение строки смещения в содержимом с именем div. Я могу запустить скрипт успешно до открытия файла excel. Но скрипт дает ошибку в строке: Set strbol. , , Сообщение об ошибке: Подзаголовок за пределами допустимого диапазона.HTA и функция поиска Excel VBA

Я тестировал метод поиска в excel vba, который работал, но не в HTA примечание: публикация из IE6, поэтому прощение за отступы и ошибка форматирования.

+0

Попробуйте '1' Изменить' Set objWb = objExl.Workbooks' в 'Набор objWb = objExl.Workbooks.Open (" C: \ Documents и Settings \ user \ Desktop \ book.xls ")' Then '2' Удалить строку' objWb.Open ("C: \ Documents and Settings \ user \ Desktop \ book.xls") 'и затем' 3' изменить 'Установить strbol = objWb («C: \ Documents and Settings \ user \ Desktop \ book.xls»). Листы (1) .... 'to' Установить strbol = objWb.Sheets (1) ... ' –

+0

Также измените' objWb («C: \ Documents and Settings \ user \ Desktop \ book.xls»). Закрыть 'to' objWb.Close' –

+0

@SiddharthRout: Сделаны изменения, делает код маленьким и лучше. Но теперь ошибка находится в одной строке, но для значения Range («A1») (смотрите параметр после завершения) Сообщение об ошибке: Тип Mismatch 'Range' – msinfo

ответ

2

Вы должны полностью квалифицировать этот диапазон.

Я также заменил xlValues, xlPart, xlByRows, xlNext своими значениями. Я не уверен, что в hta, как в VBS можно определить константу в верхней части кода

Попробуйте это (UNTESTED, как я никогда не работал в ОМТ).

Sub search() 
    Set objExl = CreateObject("Excel.Application") 
    Set objWb = objExl.Workbooks.Open("C:\Documents and Settings\user\Desktop\book.xls") 
    Set strbol = objWb.Sheets(1).Cells.Find(document.getElementById("q").Value, objWb.Sheets(1).Range("A1"), -4163, 2, 1, 1, False, False) 
    Set objDiv = document.getElementById("content") 
    objDiv.innerText = "Result: " & objWb.Sheets(1).Cells(strbol.Row, strbol.Column).Offset(0, -4).Value 
    objWb.Close 
    Set objWb = Nothing 
    Set objExl = Nothing 
End Sub 

EXTRA ПРИМЕЧАНИЕ:

Поскольку вы используете .Find, вам необходимо также улавливает код, чтобы увидеть, если вы на самом деле нашли матч еще objDiv.innerText = "Result: " & objWb.Sheets(1).Cells(strbol.Row, strbol.Column).Offset(0, -4).Value подведет.

Что-то вроде

If Not strbol Is Nothing Then 
    objDiv.innerText = "Result: " & _ 
         objWb.Sheets(1).Cells(strbol.Row, strbol.Column).Offset(0, -4).Value 
End If 

Followup (Из комментариев ниже)

Код испытания в VBS. Я создаю файл C:\Sample.xlsx и набрал «Sid» в ячейке N95, а затем запустил файл VBS, который имеет код ниже. Он работал без ошибок и показал мне окно сообщения $N$95

Dim objExl, objWb, strbol 

Set objExl = CreateObject("Excel.Application") 
Set objWb = objExl.Workbooks.Open("C:\Sample.xls") 
Set strbol = objWb.Sheets(1).Cells.Find("Sid", objWb.Sheets(1).Range("A1"), _ 
      -4163, 2, 1, 1, False, False) 

msgbox strbol.address 

objWb.Close 
Set objWb = Nothing 
Set objExl = Nothing 
+0

Set strbol = objWb.Sheets (1) .Cells.Find (document.getElementById ("q"). Значение ,, -4163, 2, 1, 1, False, False)> Сделал код для работы. > Но не мог понять, что, если кто-то захочет найти из определенного диапазона, например, после B5. > В любом случае, Siddharth Rout, я хотел бы воспользоваться этой возможностью, поблагодарить вас за то, что вы научили меня использовать Win API (функции управления окнами и дочерними окнами) через ваш блог. Я также слежу за вами на форуме Microsoft (technet и msdn). – msinfo

+0

В таком случае вам нужно указать, что я сделал выше 'objWb.Sheets (1) .Range (« A1 »)' For 'B5' становится« objWb.Sheets (1) .Range («B5») 'И также ... Спасибо :) –

+0

Да! Я получил теорию, но когда я начал практиковать, даже Range («A1») отказывается работать. Поэтому мне пришлось отказаться от него, поскольку по умолчанию это исправление, и это мое текущее требование не нуждается в B5. Надеюсь, у меня не должно быть будущего, когда я должен искать от B5, и у меня нет ответа на это.То же самое работает в VBA, но не в vbscript HTA. – msinfo

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