以下操作可以纠正AHK内部。它用一个打开的单词文档中的单词tom替换了ted这个词。
工作代码
; Word Constants
vbTrue := -1
wdReplaceNone := 0
wdFindContinue := 1
return
#IfWinActive, ahk_exe WINWORD.EXE
^7::
try
oWord := ComObjActive("Word.Application")
catch
return
FindText := "ted"
ReplaceWith := "tom"
oFind := oWord.Selection.Find
oHyperlinks := oWord.ActiveDocument.Hyperlinks
oFind.ClearFormatting
oFind.Replacement.ClearFormatting
while oFind.Execute(FindText, vbTrue, false,,,,, wdFindContinue,,, wdReplaceNone)
oHyperlinks.Add(oWord.Selection.Range, "http://www.autohotkey.com",,, ReplaceWith)
return
然而,当我将这个完全相同的代码转换为函数时,它不起作用。以这种方式编写时它不起作用,即使删除了参数并将变量放回到脚本中,它也不起作用。
代码损坏(带参数)
ReplaceAndLink(FindText, ReplaceWith)
{
; Word Constants
vbTrue := -1
wdReplaceNone := 0
wdFindContinue := 1
return
try
oWord := ComObjActive("Word.Application")
catch
return
oFind := oWord.Selection.Find
oHyperlinks := oWord.ActiveDocument.Hyperlinks
oFind.ClearFormatting
oFind.Replacement.ClearFormatting
while oFind.Execute(FindText, vbTrue, false,,,,, wdFindContinue,,, wdReplaceNone)
oHyperlinks.Add(oWord.Selection.Range, "http://www.autohotkey.com",,, ReplaceWith)
return
}
#IfWinActive, ahk_exe WINWORD.EXE
^7::
ReplaceAndLink("ted", "tom")
代码损坏(无参数)
ReplaceAndLink(FindText, ReplaceWith)
{
; Word Constants
vbTrue := -1
wdReplaceNone := 0
wdFindContinue := 1
return
try
oWord := ComObjActive("Word.Application")
catch
return
FindText := "ted"
ReplaceWith := "tom"
oFind := oWord.Selection.Find
oHyperlinks := oWord.ActiveDocument.Hyperlinks
oFind.ClearFormatting
oFind.Replacement.ClearFormatting
while oFind.Execute(FindText, vbTrue, false,,,,, wdFindContinue,,, wdReplaceNone)
oHyperlinks.Add(oWord.Selection.Range, "http://www.autohotkey.com",,, ReplaceWith)
return
}
#IfWinActive, ahk_exe WINWORD.EXE
^7::
ReplaceAndLink()
故障排除说明:
另外......我知道类似的基于COM的AHK脚本可以放入函数中......例如参见:
LinkCreator(FindText, ReplaceWith)
{
oWord := ComObjActive("Word.Application")
oWord.Selection.Find.ClearFormatting
oWord.Selection.Find.Replacement.ClearFormatting
oWord.Selection.Find.Execute(FindText, 0, 0, 0, 0, 0, 1, 1, 0, ReplaceWith, 2)
}
F2::
LinkCreator("store", "town")
答案 0 :(得分:1)
在功能完成之前,您正在调用return
。这会导致脚本停止处理该函数并返回调用者。
ReplaceAndLink(FindText, ReplaceWith)
{
; Word Constants
vbTrue := -1
wdReplaceNone := 0
wdFindContinue := 1
return <---------- HERE
try
oWord := ComObjActive("Word.Application")
catch
return
尝试删除它,它应该按预期执行。
当某些内容未执行时,一个简单的故障排除提示是在代码中的某处放置Soundbeep
或MsgBox
,以查看是否有一些无法访问的代码并从那里向后工作。