| 网站首页 | 业界新闻 | 小组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 261 人关注过本帖
标题:求助操作Excel问题
只看楼主 加入收藏
yll148
Rank: 2
等 级:论坛游民
威 望:1
帖 子:228
专家分:15
注 册:2012-7-3
结帖率:87.5%
  已结贴   问题点数:20  回复次数:7   
求助操作Excel问题
我首先向Excel写入宏
cc="Sub ArrayFill(vfparray)"+Chr(10)+"    Sheets(bm).Range(WZ).Resize(UBound(vfparray,1), UBound(vfparray,2)).Value = vfparray"+Chr(10)+"    ThisWorkBook.Refreshall"+Chr(10)+"End sub"
myexcel.activeworkbook.vbproject.vbcomponents.Add(1).codemodule.addfromstring(cc)
然后将DBF表数据COPY成数组
Select lrk
Copy To Array eSJ Fields &zdlb
再将数组粘贴到Excel表
myexcel.Run('ArrayFill', @eSJ)
预览表格时不显示粘贴的值,不知道为什么???,恳请各位朋友们帮忙看看,谢谢!,谢谢!
搜索更多相关主题的帖子: 操作 数组 Sub Excel Copy 操作 数组 Copy Excel Sub 
2020-03-24 08:39
wengjl
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:83
帖 子:1756
专家分:3119
注 册:2007-4-27
  得分:0 
改用循环一个单元格一个单元格写入的办法试试

只求每天有一丁点儿的进步就可以了
2020-03-24 13:49
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:239
帖 子:7105
专家分:31682
注 册:2014-5-20
  得分:0 
类似的也可以用_vfp.DataToClip将DBF复制到剪贴板再到EXCEL粘贴。

2020-03-24 14:09
wengjl
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:83
帖 子:1756
专家分:3119
注 册:2007-4-27
  得分:0 
以下是引用yll148在2020-3-24 08:39:16的发言:

我首先向Excel写入宏
cc="Sub ArrayFill(vfparray)"+Chr(10)+"    Sheets(bm).Range(WZ).Resize(UBound(vfparray,1), UBound(vfparray,2)).Value = vfparray"+Chr(10)+"    ThisWorkBook.Refreshall"+Chr(10)+"End sub"
myexcel.activeworkbook.vbproject.vbcomponents.Add(1).codemodule.addfromstring(cc)
然后将DBF表数据COPY成数组
Select lrk
Copy To Array eSJ Fields &zdlb
再将数组粘贴到Excel表
myexcel.Run('ArrayFill', @eSJ)
预览表格时不显示粘贴的值,不知道为什么???,恳请各位朋友们帮忙看看,谢谢!,谢谢!



试了一下,红色的这一句不行,提示VBA项目连接错误

只求每天有一丁点儿的进步就可以了
2020-03-24 14:26
厨师王德榜
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:90
帖 子:552
专家分:2105
注 册:2013-2-16
  得分:10 
在我自己电脑上测试过,你的宏代码没有问题,当然,由于是我自己的环境测试的,可能跟你的不同.
我感觉可能出现的问题是下标越界,即你的Workbook中,有时没有 Sheets(bm) 这个对象,
你可以 加一段检测代码,来确保执行效果:
LOCAL shtOK as Boolean  && Sheet名称是否存在?
TRY
    myexcel = CREATEOBJECT("Excel.Application")
    wb = myexcel.Workbooks.open(cExl)
    * myexcel.Visible = .T.
    FOR ii=1 TO wb.sheets.count
        IF wb.sheets(ii).name =cSht  then
            shtOK = .t.
            EXIT for  
        ENDIF
    ENDFOR
CATCH TO ex
    MESSAGEBOX(ex.message)
ENDTRY
    IF shtOK = .f. THEN
        RETURN -3
    ENDIF
*......如果Sheet存在,再执行以下代码......*
Try  && 这一段是确保用户的Excel允许运行宏,没有VBA信任设置方面的问题
    oVBE = myexcel.VBE.ActiveVBProject
    oErr = Null
Catch To oErr
    MESSAGEBOX(oErr.message)
Endtry
 
If !Isnull(oErr) And oErr.ErrorNo == 1943
    Text to cMsg Noshow Pretext 1+2
        当前的 Excel 配置不允许执行这个宏,请检查 Excel 配置。
 
        请确认勾选了: 可靠发行商中的 “信任对 Visual Basic 项目”的访问
    EndText
    Messagebox(cMsg, 16, 'pasteDbf2Excel')
    myexcel.Visible = .T.
    (1).Controls(6).Controls(14).Controls(3).Execute()
Endif

TRY
    * Excel写入宏代码
*    wb.vbproject.vbcomponents.Add(1).codemodule.addfromstring(cVbCode)  && 这样加也可以,但是不方便最后删除宏
*   所以我这样给Excel添加宏,这样的好处是方便最后删除宏代码
    om = myexcel.VBE.ActiveVBProject.VBComponents.Add(1)
    om.name = "FillFromArray_vbs"
    om.CodeModule.AddFromString(cVbCode)
    myexcel.Run('ArrayFill', @arrEsj)
    * 输出表头
    FOR ii =1 TO FCOUNT(cAlias)
        wb.sheets(cSht).cells(1,ii).value = FIELD(ii,cAlias)
    ENDFOR
    * 删除宏代码:
    myexcel.VBE.ActiveVBProject.VBComponents.remove(om)

    wb.save()
    wb.close()
    myexcel.quit()
CATCH TO ex
    MESSAGEBOX(ex.message)
FINALLY
    myexcel.quit()
    RELEASE myexcel
    RELEASE arrEsj
ENDTRY     
2020-03-24 14:53
yll148
Rank: 2
等 级:论坛游民
威 望:1
帖 子:228
专家分:15
注 册:2012-7-3
  得分:0 
谢谢各位老师,再各位老师的帮助下我的问题解决了,谢谢!
2020-03-25 06:55
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:212
帖 子:7960
专家分:19972
注 册:2012-2-5
  得分:10 
回复 楼主 yll148
看下这个帖子是否对你有帮助
https://blog.bccn.net/sdta/16740

坚守VFP最后的阵地
2020-03-25 08:12
yll148
Rank: 2
等 级:论坛游民
威 望:1
帖 子:228
专家分:15
注 册:2012-7-3
  得分:0 
回复 7楼 sdta
谢谢sdta老师,我就是按照这个方法做的,已找到了的问题所在,已经解决了,谢谢您了!
2020-03-25 10:47
快速回复:求助操作Excel问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.078389 second(s), 8 queries.
Copyright©2004-2020, BCCN.NET, All Rights Reserved