#include<file.au3>
代码运行的速度超快,只知道完成了,但我要的数据不知道该怎么找。很艰难地试着一个个去解读大师写的代码,但大部分还是没弄明白。希望大师能把代码的作用写个解释吧
$wb=ObjGet(@ScriptDir&"\k3dyb.xls");ObjGet对 COM 对象从现有的进程或文件名检索一个参考.
With $wb.worksheets("DYB") ;With用于减少对象类型变量的参考文本,便于快速编写
$arr=.usedrange.value
EndWith
$wb.close(False)
If IsArray($arr) Then ;IsArray检查某个变量是否数组类型
$dic=ObjCreate("scripting.dictionary") ;ObjCreate通过一个指定的类名引用一个 COM 对象
For $n=1 To UBound($arr,2)-1 ;UBound返回数组维度的大小
If Not $dic.exists($arr[$n]) Then $dic($arr[$n])=$n ;?
Next
$oexcel=ObjCreate("excel.application") ;创建一个Excel 对象
$oexcel.visible=True;想隐藏执行,把这里改成False
$wb=$oexcel.workbooks.open(@ScriptDir&"\JEXL.xls")
With $wb.worksheets("配货表")
$rng=.cells.find("原单号")
If IsObj($rng) Then;检查一个变量或者表达式是否为对象类型
$arr2=.range($rng.offset(1),.cells(.rows.count,$rng.column).end(3).offset(0,1)).value ;?
For $n=0 To UBound($arr2,2)-1
If $dic.exists($arr2[$n]) Then
$arr2[$n]=$arr[$dic($arr2[$n])]
$arr2[$n]=$arr[$dic($arr2[$n])]
EndIf
Next
$rng.offset(1,1).resize(UBound($arr2,2),UBound($arr2)).value=$arr2
EndIf
EndWith
$wb.close(true)
$oexcel.quit
Else
MsgBox(0,"","数据格式不对!")
EndIf 附带你给的两个文件测试 非常感谢大师的回复,我原来的代码确实是录制的,大师写的代码,看起来很吃力。直接拷过来运行,出现如下错误:
+> AU3版本: 3.3.7.15
+> ============================================
>运行 AU3Check (1.54.21.0)开始目录:D:\autoit3
+>10:12:17 AU3Check 完成:0
>运行:(3.3.7.15):D:\autoit3\autoit3_x64.exe "D:\uuuu.au3"
D:\uuuu.au3 (17) : ==> ?????????????? "With" ??.:
With $wb.worksheets("DYB")
With ^ ERROR
->10:12:17 AutoIT3.exe 完成::1
+>10:12:19 ACNWrapper 完成..
>退出代码: 1 运行时间: 1.983 秒 本帖最后由 kevinch 于 2013-5-9 08:22 编辑
$wb=ObjGet(@ScriptDir&"\k3dyb.xls")
With $wb.worksheets("DYB")
$arr=.usedrange.value
EndWith
$wb.close(False)
If IsArray($arr) Then
$dic=ObjCreate("scripting.dictionary")
For $n=1 To UBound($arr,2)-1
If Not $dic.exists($arr[$n]) Then $dic($arr[$n])=$n
Next
$oexcel=ObjCreate("excel.application")
$oexcel.visible=True;想隐藏执行,把这里改成False
$wb=$oexcel.workbooks.open(@ScriptDir&"\JEXL.xls")
With $wb.worksheets("配货表")
$rng=.cells.find("原单号")
If IsObj($rng) Then
$arr2=.range($rng.offset(1),.cells(.rows.count,$rng.column).end(3).offset(0,1)).value
For $n=0 To UBound($arr2,2)-1
If $dic.exists($arr2[$n]) Then
$arr2[$n]=$arr[$dic($arr2[$n])]
$arr2[$n]=$arr[$dic($arr2[$n])]
EndIf
Next
$rng.offset(1,1).resize(UBound($arr2,2),UBound($arr2)).value=$arr2
EndIf
EndWith
$wb.close(true)
$oexcel.quit
Else
MsgBox(0,"","数据格式不对!")
EndIf
如果是程序,不提倡用公式,看楼主的宏是录制的,不知道这样写你看得明白不 我写了一段代码,目的是从JEXL表中得到三个单元格拼合起来的产品代码,
然后根据这个产品代码,去另外一个表中找到相应的数值.
如果用VBA的宏,很好做,且已经做好了,但在AU3中运行不成,
所以想通过变量直接得到这三个数值,第一个值没问题,后两个因为要转到
另一张表,出错了,请大师指教. 也请大师验证一下,这段运行宏的代码是哪不合适了? 另外从http://www.autoitx.com/forum.php?mod=viewthread&tid=13074&extra=&highlight=%BA%EA&page=1抄了一段关于在AUTOIT里运行宏的代码放到EXCEL.AU3中,然后在程序中调用_ExcelMacroRun($oExcel, "JCSJ"),结果错误示如下
D:\autoit3\Include\excel.au3 (1286) : ==> ??????(?????).:
$o_object.Run($s_MacroName, $v_Arg1, $v_Arg2, $v_Arg3, $v_Arg4, $v_Arg5, $v_Arg6, $v_Arg7, $v_Arg8, $v_Arg9, $v_Arg10, $v_Arg11, $v_Arg12, $v_Arg13, $v_Arg14, $v_Arg15, $v_Arg16, $v_Arg17, $v_Arg18, $v_Arg19, $v_Arg20, $v_Arg21, $v_Arg22, $v_Arg23, $v_Arg24, $v_Arg25, $v_Arg26, $v_Arg27, $v_Arg28, $v_Arg29, $v_Arg30)
$o_object.Run($s_MacroName, $v_Arg1, $v_Arg2, $v_Arg3, $v_Arg4, $v_Arg5, $v_Arg6, $v_Arg7, $v_Arg8, $v_Arg9, $v_Arg10, $v_Arg11, $v_Arg12, $v_Arg13, $v_Arg14, $v_Arg15, $v_Arg16, $v_Arg17, $v_Arg18, $v_Arg19, $v_Arg20, $v_Arg21, $v_Arg22, $v_Arg23, $v_Arg24, $v_Arg25, $v_Arg26, $v_Arg27, $v_Arg28, $v_Arg29, $v_Arg30)^ ERROR
->13:06:38 AutoIT3.exe 完成::1 贴你的完整代码上来,附上excel文件 谢谢KENVICH的回复,但运行的结果如3楼,不知道错在哪里。 >运行:(3.3.7.15):D:\autoit3\autoit3_x64.exe "D:\333.au3"
D:\333.au3 (65) : ==> ???????????("Object").:
$hh = $oExcel.application.worksheetfunction.match($aa,$oExcel.activesheet.range("a1:h10"),0)
$hh = $oExcel^ ERROR
->22:39:41 AutoIT3.exe 完成:[CODE 假设$oExcel是工作簿
$AA=$oExcel.application.worksheetfunction.match($aa,$oExcel.activesheet.range("a1:h10"),0)
不过在代码里调用工作表函数不如直接自己写函数
页:
1
[2]