当前位置: 代码迷 >> VFP >> 关于VFP里EXCEL的ACTIVESHEET RANGE变量的写法
  详细解决方案

关于VFP里EXCEL的ACTIVESHEET RANGE变量的写法

热度:4015   发布时间:2013-02-26 00:00:00.0
求助 关于VFP里EXCEL的ACTIVESHEET RANGE变量的写法
我有如下VFP9的一段代码
LOCAL lOldSetOpt,mChanNum
lOldSetOpt = DDESetOption("SAFETY")
= DDESetOption("SAFETY",.F.)
mChanNum = DDEInitiate('Excel','SYSTEM') &&EXCEL是否已经打开
IF mChanNum <> -1
= messagebox('EXCEL程序已经打开,请先将其关闭!',64,'系统提示!')
= DDETerminate(mChanNum) 
= DDESetOption("SAFETY",lOldSetOpt)
RETURN
ENDIF
IF FILE("c:\ncvoucher.xls")
   DELETE FILE c:\ncvoucher.xls
ENDIF
COPY TO c:\ncvoucher.xls TYPE xl5
OleApp=CREATEOBJECT("Excel.Application") 
OleApp.Application.Visible=.F. 
OleApp.Application.WorkBooks.open("c:\ncvoucher.xls") 
OleApp.Worksheets("ncvoucher").Activate
Myrs=OleApp.SHEETS(1).UsedRange.Rows.Count &&有数据的总行数
Myrq=OleApp.cells(2,6).Value
OleApp.cells(1,8).Value='核算类别A'
OleApp.cells(1,9).Value='核算值A'
OleApp.cells(1,10).Value='核算类别B'
OleApp.cells(1,11).Value='核算值B'
OleApp.cells(1,12).Value='核算类别C'
OleApp.cells(1,13).Value='核算值C' 
OleApp.range('F:F').NumberFormatLocal = "@"  
OleApp.range('F:F').value='20'+DTOC(Myrq)
OleApp.cells(1,6).Value='制单日期'
OleApp.ActiveSheet.Range("A1"&":"&"T"&CStr(Myrs)).Copy         &&有效数据COPY    range变量的写法 
OleApp.worksheets.Add
OleApp.worksheets("sheet1").Activate
OleApp.ActiveSheet.Name=1101
OleApp.ActiveSheet.Paste         &&把有效数据COPY至新的工作表1101
OleApp.Columns.AutoFit
OleApp.ActiveWorkbook.Save
OleApp.Quit 
RELEASE OleApp

以上代码中的OleApp.ActiveSheet.Range("A1"&":"&"T"&CStr(Myrs)).Copy   中的RANGE部分引用了变量Myrs 如果把Range("A1"&":"&"T"&CStr(Myrs))中变量部分设置为固定值,如Range('A1:T100'))则程序完全可以执行,但引用变量后则执行错误。
我也在网上找了下变量写法文章,但程序执行到此始终提示“不能识别的命令”。
请教各位师兄该如何调整??

------解决方案--------------------------------------------------------
*--- 将引用的区域事先赋予变量,然后再调用
DLINE_S = "A"+TRANSFORM(ROW)+":"+CHR(ASC("A")+FCOUNT()-1)+TRANSFORM(ROW)
*--- 上面红字部分即为起始单元格与终止单元格,下面代码红字部分为引用变量
OEXCEL.ACTIVESHEET.RANGE(DLINE_S).BORDERS(3).LINESTYLE = 9

------解决方案--------------------------------------------------------
程序中最好用cells,而不用Range
单个单元格:cells(行,列)
多个单元格:cells(左上角行,左上角列).Resize(行数,列数)
用Range要凑成字母列号,与行号,太麻烦了。
  相关解决方案