2016-06-17 1 views
-2

Привет, AHKer im новичок здесь, я использую это, чтобы найти текст из буфера обмена в Excel, если ключевое слово find в столбце.B, скопируйте определенные ячейки, затем зациклируйте до тех пор, пока не найдете, но, однако, не работает ... вообще, может ли кто-нибудь сделать мне одолжение? как заставить его работать? благодаря!Excel Найти ключевое слово из буфера обмена (Loop до тех пор, пока не будет найден)

#SingleInstance force Ignore off 
SetDefaultMouseSpeed, 0 

IfWinExist, ahk_class Progman 
    WinActivate 
Sleep 100 
PostMessage, 0x50, 0x0804,0,, A 
clipboard = 
Sleep 300 
IfWinExist, huasheng 
    WinActivate 
Sleep 500 
KeyWait, LButton, D 
Sleep 1000 
Click 3 
Send, ^c 
ClipWait 
StringReplace, clipboard, clipboard, `n,, all 
StringReplace, clipboard, clipboard, `r,, all 
var := clipboard 
var := SubStr(var, InStr(var, "%A_Space%") + 1, InStr(var, "(") - InStr(var, "):") - 3) 
Clipboard := var 
Xl := ComObjCreate("Excel.Application") 
Xl.Visible := True 
Xl := ComObjActive("Excel.Application") 
wbk := Xl.Workbooks.Open("C:\Users\iViLL\Google Drive\Doc\ExportOrderList201606161859.Xlsx") 
t := %Clipboard%, found := false 
x := Xl.Range("B:B").Find(t).row 
for Sheet, in wbk.Sheets 
{ 
    if (!c := x) 
     continue 
    if (!found) 
    found := true 
    first := c.Value 
    Loop 
    { 
Xl.Range("A" x).Copy 
StringReplace, clipboard, clipboard, `n,, all 
StringReplace, clipboard, clipboard, `r,, all 
MyVar1 :=Clipboard 
Xl.Range("B" x).Copy 
StringReplace, clipboard, clipboard, `n,, all 
StringReplace, clipboard, clipboard, `r,, all 
MyVar2 :=Clipboard 
Xl.Range("J" x).Copy 
StringReplace, clipboard, clipboard, `n,, all 
StringReplace, clipboard, clipboard, `r,, all 
MyVar3 :=Clipboard 
Xl.Range("K" x).Copy 
StringReplace, clipboard, clipboard, `n,, all 
StringReplace, clipboard, clipboard, `r,, all 
StringReplace, clipboard, clipboard, %A_Space%,, all 
MyVar4 :=Clipboard 
Xl.Range("H" x).Copy 
StringReplace, clipboard, clipboard, `n,, all 
StringReplace, clipboard, clipboard, `r,, all 
MyVar5 :=Clipboard 
Xl.Range("M" x).Copy 
StringReplace, clipboard, clipboard, `n,, all 
StringReplace, clipboard, clipboard, `r,, all 
MyVar6 :=Clipboard 
Xl.Range("N" x).Copy 
StringReplace, clipboard, clipboard, `n,, all 
StringReplace, clipboard, clipboard, `r,, all 
MyVar9 :=Clipboard 
Xl.Range("U" x).Copy 
StringReplace, clipboard, clipboard, `n,, all 
StringReplace, clipboard, clipboard, `r,, all 
StringReplace, clipboard, clipboard, %A_Space%,, all 
MyVar7 :=Clipboard 
Xl.Range("AA" x).Copy 
StringReplace, clipboard, clipboard, `n,, all 
StringReplace, clipboard, clipboard, `r,, all 
StringReplace, clipboard, clipboard, %A_Space%,, all 
MyVar8 :=Clipboard 
IfWinExist Untitled - Notepad 
{ 
WinActivate 
WinWaitActive Untitled - Notepad 
} 
else 
IfWinNotExist Untitled - Notepad 
{ 
run, C:\WINDOWS\system32\notepad.exe 
WinWaitActive Untitled - Notepad 
} 
Sleep 1000 
SendRaw ID:%MyVar2%`nNum:%MyVar1%`nStatus:%MyVar5%`nAddress:%MyVar3%,%MyVar6%,%MyVar9%,%MyVar4% 
If (MyVar8) 
{ 
IfInString, MyVar7, New Address 
{ 
SendRaw `n%MyVar7% 
} 
else 
IfNotInString, MyVar7, New Address 
{ 
SendRaw `nNew Address:%MyVar3%,%MyVar6%,%MyVar9%,%MyVar8% 
} 
} 
else 
{ 
Sleep 100 
} 
Sleep 500 
Send, ^a 
Sleep 100 
Send, ^c 
Sleep 100 
Send, {Delete} 
Sleep 300 
Winclose, Untitled - Notepad 
IfWinExist, huasheng 
WinActivate 
WinWaitActive huasheng 
Send, ^v 
    c := Sheet.Range("B:B").FindNext(c) 
} Until (c.Value = first) 
} 
if (!found) 
msgbox not found! 
Return 
+0

сжать ваш код вниз до самой части, где код не работает (используйте' msgbox' для отладки), а затем кто-то может помочь вам – Blauhirn

ответ

0

Вы можете использовать собственную функцию excel «Матч», чтобы выполнить свою задачу. Я сделал такого рода вещи до и вот пример его цикл»удаляет строку, содержащую определенный текст или значение,

xl := ComObjGet(newestFile) 
zeros := xl.Application.WorksheetFunction.CountIf(xl.Sheets("Detail").Range("x:x"), "0") 

Loop, %zeros%{ 
zeros := xl.Application.WorksheetFunction.MATCH("0", xl.Sheets("Detail").Range("x:x"), 0) 
xl.Sheets("Detail").Range(xl.Sheets("Detail").Cells(zeros,4).address,xl.Sheets("Detail").Cells(zeros,6).address).EntireRow.Delete 
} 

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

  • Нет связанных вопросов^_^