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