| 上一篇主題 :: 下一篇主題   | 
	
	
	
		| 發表人 | 
		內容 | 
	
	
		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 文章: 564 來自: 臺灣
  第 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 文章: 564 來自: 臺灣
  第 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 文章: 564 來自: 臺灣
  第 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器怎麼用啊? | 
			 
		  | 
	
	
		| 回頂端 | 
		 | 
	
	
		  | 
	
	
		 |