打开EXCEL 运行就会提示错误。[已解决]
本帖最后由 heroxianf 于 2016-4-18 15:08 编辑KK兄我怎么换了个函数,打开就要提示错误呢?
之前用老版本EXCELUDF打开操作没问题的。_ExcelBookOpen($aWorkbook, $aFileName) ;打開EXCEL表
;~ $aWorkbook = ObjCreate("Excel.Application")
With $aWorkbook.worksheets("") ;ActiveSheet;Func liulan()
$liulan = FileOpenDialog("浏览EXCEL格式", "", "EXCEL2007以下格式(*.xls)|EXCEL2010格式(*.xlsx)", 1)
If FileExists($liulan) Then
GUICtrlSetData($Input1, $liulan)
$aFileName = GUICtrlRead($Input1)
EndIf
_Excel_BookOpen($aWorkbook, $aFileName) ;打開EXCEL表
;~ $aWorkbook = ObjCreate("Excel.Application")
With $aWorkbook.worksheets("") ;ActiveSheet;
$ProdArray = .range("A1").currentregion.value
;下面這段為 尋找跟替換 ;檢查 讀取到的檔案是否 有 不應該出現的字
For $n = 0 To UBound($ProdArray) - 1
For $i = 0 To UBound($ProdArray, 2) - 1
$ProdArray[$n][$i] = StringReplace($ProdArray[$n][$i], "'", "")
Next
Next
EndWith
;~ MsgBox(0, "", UBound($ProdArray, 2))
ControlSetText($Form1, "", $Label2, UBound($ProdArray))
ControlSetText($Form1, "", $label4, UBound($ProdArray, 2) - 1)
MsgBox(0, "", $ProdArray[$i])
_Excel_BookNew($bWorkbook)
If @error Then Exit MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_BookNew Example 1", "Error creating new workbook." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
GUICtrlSetState($Button_kaishi, 64)
EndFunc ;==>liulan 本帖最后由 kk_lee69 于 2016-4-18 14:07 编辑
回复 1# heroxianf
_Excel_BookOpen要返回對象吧
#include <Excel.au3>
$oExcel = _ExcelBookOpen(@ScriptDir&"\A1.xlsx",1,0) ;打開EXCEL表
$oExcel.ActiveSheet.Protect("123")
_ExcelBookClose($oExcel, 1, 0) 回复 1# heroxianf
_Excel_BookOpen
打开一个现有的工作簿
#include <Excel.au3>
_Excel_BookOpen ( $oExcel, $sFilePath [, $bReadOnly = False [, $bVisible = True [, $sPassword = Default [, $sWritePassword = Default]]]] )
参 数
$oExcel 打开工作簿的 Excel 应用对象
$sFilePath 文件的路径与文件名
$bReadOnly [可选] 设置为 True, 以只读方式打开工作簿 (默认 = False)
$bVisible [可选] 设置为 True, 指定工作簿窗口可见 (默认 = True)
$sPassword [可选] 工作簿的读保护密码 (如果有, 默认无)
$sWritePassword [可选] 工作簿的写保护密码 (如果有, 默认无)
返 回 值
成功: 返回工作簿对象
失败: 返回 0, @error 设置 为非 0 值.
@error: 1 - $oExcel 不是一个对象或者不是一个应用对象
2 - $sFilePath 指定对象不存在
3 - 无法打开 $sFilePath. @extended 设置为打开方法返回的 COM 错误代码
4 - 不允许读写访问. 工作簿可能已由另一个用户/任务打开
备 注 回复 3# kk_lee69
KK啊就是上次您帮助我的帖子,我想改成新版的UDF函数 结果就出错了 本帖最后由 kk_lee69 于 2016-4-18 14:21 编辑
回复 4# heroxianf
你的第八行 沒有返回對象
第10行 怎麼會有對象可以用
把第八行 改成 $aWorkbook=_Excel_BookOpen($aWorkbook, $aFileName) ;打開EXCEL表 回复 5# kk_lee69
KK你看看这个呢,上次你帮我的代码。$oExcel = _ExcelBookOpen($FileName,0,True) ;打開EXCEL表
;$INFNAME=StringTrimRight($FILEarray1[$f],4)
;$INFNAME2=$BillName1
With $oExcel.ActiveSheet;worksheets("")
$ProdArray=.range("a1").currentregion.value
;$arrt=$oExcel.application.intersect(.range("a1").currentregion,.range("a1").currentregion.offset(1)).value ;第一行不讀取
;下面這段為 尋找跟替換 ;檢查 讀取到的檔案是否 有 不應該出現的字
For $n=0 To UBound($ProdArray)-1
For $i=0 To UBound($ProdArray,2)-1
$ProdArray[$n][$i]=StringReplace($ProdArray[$n][$i],"'","")
Next
Next
$ProdArray=.application.transpose($ProdArray) ;行列互換
;.parent.close(false) ;讀取完畢後 把頁面關掉的
EndWith
_ArrayDisplay($ProdArray)
_ExcelBookClose($oExcel, 0, 0)
$oExcel=0 回复 6# heroxianf
你看一下第一行是不是$oExcel =.....
而你自己的那個位置 有 某某某=......嗎?? 回复 6# heroxianf
你看一下第一行是不是$oExcel =.....
而你自己的那個位置 有 某某某=......嗎??
把你的第八行改成
$aWorkbook=_Excel_BookOpen($aWorkbook, $aFileName) 回复 8# kk_lee69
#include <Excel_new.au3>
#include <array.au3>
Local $oExcel
$oExcel = _Excel_BookOpen($oExcel, "1.xls", 1, 0) ;打開EXCEL表
;$INFNAME=StringTrimRight($FILEarray1[$f],4)
;$INFNAME2=$BillName1
With $oExcel.ActiveSheet;worksheets("")
$ProdArray=.range("a1").currentregion.value
;$arrt=$oExcel.application.intersect(.range("a1").currentregion,.range("a1").currentregion.offset(1)).value ;第一行不讀取
;下面這段為 尋找跟替換 ;檢查 讀取到的檔案是否 有 不應該出現的字
For $n=0 To UBound($ProdArray)-1
For $i=0 To UBound($ProdArray,2)-1
$ProdArray[$n][$i]=StringReplace($ProdArray[$n][$i],"'","")
Next
Next
$ProdArray=.application.transpose($ProdArray) ;行列互換
;.parent.close(false) ;讀取完畢後 把頁面關掉的
EndWith
_ArrayDisplay($ProdArray)
_Excel_BookClose($oExcel)
错误截图
这样还是不行呢。 回复 8# kk_lee69
谢谢搞定了, 要使用新的UDF格式 先open一个对象#include <Excel_new.au3>
#include <array.au3>
Local $otest = "1.xls"
Local $oExcel = _Excel_Open()
$otest = _Excel_BookOpen($oExcel, $otest) ;打開EXCEL表
;$INFNAME=StringTrimRight($FILEarray1[$f],4)
;$INFNAME2=$BillName1
With $otest.ActiveSheet;worksheets("")
$ProdArray=.range("a1").currentregion.value
;$arrt=$oExcel.application.intersect(.range("a1").currentregion,.range("a1").currentregion.offset(1)).value ;第一行不讀取
;下面這段為 尋找跟替換 ;檢查 讀取到的檔案是否 有 不應該出現的字
For $n=0 To UBound($ProdArray)-1
For $i=0 To UBound($ProdArray,2)-1
$ProdArray[$n][$i]=StringReplace($ProdArray[$n][$i],"'","")
Next
Next
$ProdArray=.application.transpose($ProdArray) ;行列互換
;.parent.close(false) ;讀取完畢後 把頁面關掉的
EndWith
_ArrayDisplay($ProdArray)
_Excel_BookClose($oExcel) 本帖最后由 kk_lee69 于 2016-4-18 15:04 编辑
回复 9# heroxianf
Local $oAppl = _Excel_Open()
Local $sWorkbook ="C:\1.xlsx"
Local $oExcel = _Excel_BookOpen($oAppl, $sWorkbook, Default, Default, True)
With $oExcel.ActiveSheet;worksheets("")
$ProdArray=.range("a1").currentregion.value
;$arrt=$oExcel.application.intersect(.range("a1").currentregion,.range("a1").currentregion.offset(1)).value ;第一行不讀取
;下面這段為 尋找跟替換 ;檢查 讀取到的檔案是否 有 不應該出現的字
For $n=0 To UBound($ProdArray)-1
For $i=0 To UBound($ProdArray,2)-1
$ProdArray[$n][$i]=StringReplace($ProdArray[$n][$i],"'","")
Next
Next
$ProdArray=.application.transpose($ProdArray) ;行列互換
;.parent.close(false) ;讀取完畢後 把頁面關掉的
EndWith
_ArrayDisplay($ProdArray)
_Excel_BookClose($oExcel) 回复 10# heroxianf
仔細看說明檔的範例
新的UDF 用法是
#include <Excel.au3>
#include <MsgBoxConstants.au3>
; 创建应用对象
Local $oAppl = _Excel_Open()
If @error Then Exit MsgBox(16, "Excel UDF: _Excel_BookOpen 示例", "创建 Excel 应用对象发生错误." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
; *****************************************************************************
; 打开现有工作簿并返回其对象标识符.
; *****************************************************************************
Local $sWorkbook = @ScriptDir & "\Extras\_Excel1.xls"
Local $oWorkbook = _Excel_BookOpen($oAppl, $sWorkbook, Default, Default, True)
If @error Then Exit MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_BookOpen 示例 1", "打开工作簿发生错误 '" & $sWorkbook & "'." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_BookOpen 示例 1", "工作簿 '" & $sWorkbook & "' 已成功打开." & @CRLF & @CRLF & "[微软]创建日期: " & $oWorkbook.BuiltinDocumentProperties("Creation Date").Value) 回复 12# kk_lee69
嗯,最近在看你发的一片VBA操作方法的帖子,再了解VBA直接操作,感觉那样速度 很快的样子。 回复 13# heroxianf
跟VBA 操作 EXCEL 速度快很多你可以找找 kevinch 的文章 他是高手
我的資料很多都來自於他的手筆 回复 14# kk_lee69
好的 ,谢谢了哈~
页:
[1]
2