HTA et Find Function Excel VBA

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 

Ci-dessus est le code HTA qui obtient le mot de requête de la textbox HTA, trouve ce mot dans excel et renvoie / affiche la valeur de la ligne décalée résultante dans le contenu nommé div. Je peux exécuter le script avec succès jusqu'à l'ouverture du file excel. Mais le script donne une erreur à la ligne: définissez strbol. . . Message d'erreur: Abonnement hors-gamme.

J'ai testé la méthode de search dans excel vba, elle a fonctionné, mais pas dans la note HTA: publication de IE6, donc pardon pour les indentations et l'erreur de mise en forme.

Vous devez qualifier pleinement cette gamme.

J'ai également remplacé xlValues, xlPart, xlByRows, xlNext avec leurs valeurs. Je ne suis pas sûr que dans hta , comme dans VBS, vous pouvez définir une constante au sumt du code

Essayez ceci ( NON TESTÉ comme je n'ai jamais travaillé dans hta ).

 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 

NOTES SUPPLÉMENTAIRES :

Comme vous utilisez .Find , vous devez également piéger le code pour voir si vous avez réellement trouvé une correspondance else objDiv.innerText = "Result: " & objWb.Sheets(1).Cells(strbol.Row, strbol.Column).Offset(0, -4).Value échoue.

Quelque chose comme

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

FOLLOWUP (des commentaires ci-dessous)

Code testé dans VBS. Je crée un file C:\Sample.xlsx et tapez "Sid" dans la cellule N95 , puis je C:\Sample.xlsx le file VBS qui contient le code ci-dessous. Cela a fonctionné sans erreur et m'a montré un boîte de message $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