看来也只能这样了,谢谢!
这个帖子可以结了。 回复 9# whoistop
Thanks 回复 12# kevinch
老大可以改寫這個VBA 變成 AU3可以使用的嗎.....剛好遇到這個需求...可惜小弟功力不夠 改寫不出來
可以改成函數的方式可以引用嗎?? 回复 18# kk_lee69
没明白你的意思,你指的是哪个修改? 回复 19# kevinch
第12樓....... 那個 你舉的範例其中 最快的應該是 先讀取陣列 利用變數取代 然後再回寫....
不過有個疑問想請教一下.....
理論上 VBA 在EXCEL 跑會是最快所以 VBA 的陣列再跑應該會比 用AU3的陣列再跑來的快....
我本來是想 拿你的範本 直接改...可是突然發現的是 陣列那段 不知道怎麼寫成....AU3的
我最初的想法是利用 VBA 本身的陣列 跟取代函數本來只是想利用AU3 把 變數 傳送到VBA
但是 後來 又發現 那麼 EXCEL 怎麼知道這段 VBA 程式呢??所以一直搞不懂
能把這段 取代的 變成AU3 可以用的嗎?? 回复 20# kk_lee69
可以,但是我要知道你打算怎么实现,因为写成func需要有一个大体的思路:
func _ReplaceExcelArea($area,????????)
固定处理还是通过参数?对应关系
endfunc 回复 21# kevinch
func _ReplaceExcelArea($area,????????)
固定处理还是通过参数?对应关系
endfunc
當然是通過參數處理
第一個 應該是$oExcel 這個吧
第二個 $area應該是範圍吧 ==> 最好是 可以以 A1:Z10000 這樣地表示法
參數3 應該是 尋找的字串
參數4 應該是取代的字串
參數5不知道能否實現就是 可以定義 要不要 排除存有公式的儲存格....
因為有些欄位是公式 但是通常取代只會希望 取代掉文字的部份 ...當然不希望 取代破壞掉原來的公式
不知道這樣是否表達清楚....感謝您的幫忙^^ 回复 22# kk_lee69 Func _ReplaceExcelArea($oexcel,$range="A1",$lookupvalue="",$replacevalue="",$skipformulacell=1)
Dim $arr,$n,$i
With $oexcel.range($range)
$arr=.formula
For $n=0 To UBound($arr)-1
For $i=0 To UBound($arr,2)-1
If $skipformulacell=0 Or StringLeft($arr[$n][$i],1)<>"=" Then $arr[$n][$i]=StringReplace($arr[$n][$i],$lookupvalue,$replacevalue)
Next
Next
.formula=$arr
EndWith
EndFunc这个可以试一下,不会替换有公式的单元格有风险,还是要慎重使用 附上我的完整测试代码$excel=ObjCreate("excel.application")
$excel.visible=False
$wb=$excel.workbooks.open(@ScriptDir&"\1.xlsx")
_ReplaceExcelArea($wb.activesheet,"a1:l18","1","-")
$wb.save
$wb.close
$excel.quit
MsgBox(0,"","OK")
Func _ReplaceExcelArea($oexcel,$range="A1",$lookupvalue="",$replacevalue="",$skipformulacell=1)
Dim $arr,$n,$i
With $oexcel.range($range)
$arr=.formula
For $n=0 To UBound($arr)-1
For $i=0 To UBound($arr,2)-1
If $skipformulacell=0 Or StringLeft($arr[$n][$i],1)<>"=" Then $arr[$n][$i]=StringReplace($arr[$n][$i],$lookupvalue,$replacevalue)
Next
Next
.formula=$arr
EndWith
EndFunc 回复 23# kevinch
OK!! 太感謝了這樣就可以解決我的問題了....
另外再跟您請教個觀念.......其實上面的 函數中陣列的部分 是使用AU3的陣列對吧.....
有沒有方式 是可以使用 VBA 本身的陣列(就是 數組)......我原本的想法是有點類似
http://www.autoitx.com/forum.php?mod=viewthread&tid=13074&highlight=EXCEL%2B%BA%EA
這篇文章中提到的....不過這篇文章中的前提條件是....宏 本身就存在於 EXCEL.....
如果 EXCEL 本身沒有宏....用AU3 把宏加進去跑
P.S 這邊要解釋一下用AU3把宏加進去跑... 不是 先寫個宏的字串語法....利用AU3建立宏...在RUN宏...
如果是這樣我覺得理論上 可以做到....
但是我想的是 AU3 跟宏的語法是混和的.....就是不再EXCEL中建立宏....但是 是用宏的 語法再跑....這樣可以做到嗎??
可是後來想想自己的邏輯 還是有點怪怪的 說不通.....純粹請教觀念而已.... 感謝幫忙 本帖最后由 kevinch 于 2012-12-6 20:54 编辑
回复 25# kk_lee69
au3是可以这样做的,不过并不是简单的就能写入
首先,要判断是否禁用了宏,至少要将宏安全性设置为中或者中以下才能在excel中运行宏,还要设置“信任对vb模块的访问”才能写入宏代码到文件,这引起都可以通过修改注册表实现
其次是写入宏代码,这个以前曾经帮人写过一个小程序,利用一个固定的文本文件装载写好的vba代码,类似一个“容器”,然后用au3在执行的过程中读取容器中的代码写入excel,执行完毕后再删除
不过所有这些操作都有可能被杀毒软件报毒,因为与宏病毒的原理基本一致
其实与其这样,不如尝试下看能不能找到一种方法,可以直接将vba代码转换为au3代码,感觉上有此可能,有空时研究一下
页:
1
[2]