上一篇主題 :: 下一篇主題 |
發表人 |
內容 |
b7421200
註冊時間: 2007-08-07 文章: 15
第 1 樓
|
發表於: 星期四 六月 12, 2008 7:52 pm 文章主題: 一個DBF內,轉成不同的SHEETS |
|
|
我已經在這裡、紅狐、程式設計俱樂部…都爬過了。
也找了EXCEL VBA了,還是試不出來…
我的目的:
在一個DBF(ALL.BDF)內,有許多的資料,像是:
A B C D
L555 5 6 7
L555 8 9 8
L666 4 4 3
L666 3 3 5
要將A裡面相同(EX.L555)的都匯到一個SHEET(在同一EXCEL檔裡),並重新命名SHEET1 = L555,SHEET2 = L666 ……
所以我用
SELECT DISTINCT A FROM ALL INTO CURSOR N NOFILTER
計算總要增加幾個SHEET; 我已經試出來,可以增加SHEET及重新命名了!
可是在選到要填入資料時,都會出錯,會出現:
* OLE error code 0*8002000b:Invalid index.
我的程式如下:
EXCEL = CREATEOBJECT('EXCEL.APPLICATION')
IF TYPE('EXCEL') = 'U'
WAIT WINDOW "啟動失敗!"
RETURN
ENDIF
EXCEL.WORKBOOKS.ADD
REPORTTITLE = "總表"
EXCEL.CAPTION = REPORTTITLE
EXCEL.VISIBLE = .T.
SELECT N
go top
a = reccount()
b = a-3
c= 1
do while !eof() and b => c
if a <> b
excel.sheets.add
else
loop
endif
c = c + 1
enddo
select n
for i = 1 to a
select n
go i
excel.worksheets("sheet" + alltrim(str(i))).name = alltrim((n.centername))
endfor
SELECT N
GO TOP
DO WHILE !EOF()
lcenter = alltrim(n.A)
lcenter = '"&lcenter"'
SELECT *FROM ALL WHERE ALL.A = N.A INTO CURSOR FOOU NOFILTER
SELECT FOOU
GO TOP
SCAN FOR RECNO() >= 1
for list = 1 to fcount()
fld = field(list)
excel.worksheets(lcenter).cells(recno()+1,list).value = &fld
endfor
ENDSCAN
SKIP
ENDDO
EXCEL.ACTIVEWORKBOOK.SAVEAS('D:\ALL.XLS')
PS.是紅色那行出錯。 |
|
回頂端 |
|
 |
nelsonchuang
註冊時間: 2003-09-04 文章: 563 來自: 臺灣
第 2 樓
|
發表於: 星期五 六月 13, 2008 8:51 am 文章主題: |
|
|
出錯時,
lcenter 值是多少
recno()值是多少
&fld的值又是多少?
你可以先抓出來嗎? _________________ 大家好,請多指教 |
|
回頂端 |
|
 |
b7421200
註冊時間: 2007-08-07 文章: 15
第 3 樓
|
發表於: 星期五 六月 13, 2008 9:25 am 文章主題: |
|
|
nelsonchuang 寫到: | 出錯時,
lcenter 值是多少
recno()值是多少
&fld的值又是多少?
你可以先抓出來嗎? |
有,我有試過;
如果我不用變數放進去
而直接用=> "L555" 的話是可以跑的出來的
用變數的話:
lcenter = "L555"
recno() :因為我select 出來的foou ,筆數要大於等於1時才會動
這應該不會有太大的問題。
&fld:裡面的值都是有的; |
|
回頂端 |
|
 |
nelsonchuang
註冊時間: 2003-09-04 文章: 563 來自: 臺灣
第 4 樓
|
發表於: 星期五 六月 13, 2008 9:50 am 文章主題: |
|
|
=.=|| 我是問...出錯當時,這些值是多少?你有追蹤嗎? _________________ 大家好,請多指教 |
|
回頂端 |
|
 |
b7421200
註冊時間: 2007-08-07 文章: 15
第 5 樓
|
發表於: 星期五 六月 13, 2008 10:03 am 文章主題: |
|
|
nelsonchuang 寫到: | =.=|| 我是問...出錯當時,這些值是多少?你有追蹤嗎? |
抱歉抱歉!
lcenter 值是多少 :"L555"
recno()值是多少 :FOOU.第一筆的時候
&fld的值是多少 :L555080401
---------------------------------------------------------
我一直在想是不是不能用lcenter來替代 "l555" 呢?
不然都是【OLE error code 0*8002000b:Invalid index.】出錯… |
|
回頂端 |
|
 |
nelsonchuang
註冊時間: 2003-09-04 文章: 563 來自: 臺灣
第 6 樓
|
發表於: 星期五 六月 13, 2008 10:34 am 文章主題: |
|
|
你的
lcenter = alltrim(n.A)
lcenter = '"&lcenter"'
你確定lcenter="l555"?
我測了一下
lcenter="L555"
excel.worksheets(LCENTER) 是object
你在紅色那一行前面,先加一行susp
然後去debug 的地方輸入
excel.worksheets(lcenter) 看是不是物件
excel.worksheets(lcenter).cells(recno()+1,list)看是不是錯誤
先把這個澄清,問題會快一點解決 _________________ 大家好,請多指教 |
|
回頂端 |
|
 |
b7421200
註冊時間: 2007-08-07 文章: 15
第 7 樓
|
發表於: 星期五 六月 13, 2008 11:40 am 文章主題: |
|
|
nelsonchuang 寫到: | 你的
lcenter = alltrim(n.A)
lcenter = '"&lcenter"'
你確定lcenter="l555"?
我測了一下
lcenter="L555"
excel.worksheets(LCENTER) 是object
你在紅色那一行前面,先加一行susp
然後去debug 的地方輸入
excel.worksheets(lcenter) 看是不是物件
excel.worksheets(lcenter).cells(recno()+1,list)看是不是錯誤
先把這個澄清,問題會快一點解決 |
試了一下,出現如下:
嗯,是那個名字出錯,居然有兩個””的…
lcenter 是字元的。
改成即可:
lcenter = alltrim(n.centername)
lcenter = ALLTRIM('&lcenter')
謝謝nelsonchuang的幫助,我試出來了,感謝你!太感謝你了!
另外想請教,foxpro的debugger器怎麼用啊? |
|
回頂端 |
|
 |
|