如何用EXCEL做报表,并嵌套在 form 窗体中

eisldkw 2019-06-10 09:53:48
如何用EXCEL做报表,并嵌套在 form 窗体中 ,取代 下图中用的控件,



显然此时,EXCEL控件 不能有工具栏和菜单栏

...全文
2595 54 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
54 条回复
切换为时间正序
请发表友善的回复…
发表回复
eisldkw 2019-06-23
  • 打赏
  • 举报
回复
在结帖之际,对米老师,表示隆重的感谢。
eisldkw 2019-06-22
  • 打赏
  • 举报
回复
引用 54 楼 milaoshu1020 的回复:
那你学他这么做吧,看能不能脱离Excel直接运行;


感谢,问题是,我不知道他是怎么调用的。有没有反编译的软件,我反编译后借鉴一下他的编码方式。再次感谢。
eisldkw 2019-06-21
  • 打赏
  • 举报
回复
引用 51 楼 milaoshu1020 的回复:
1. 可以加如以下语句禁止修改:

xlSheet.cells.Locked = True
xlSheet.protect

2.3.我暂时也没有办法去掉边框;
4.你想多了;


非常感谢。期待着您的其他答复。
milaoshu1020 2019-06-21
  • 打赏
  • 举报
回复
1. 可以加如以下语句禁止修改:

xlSheet.cells.Locked = True
xlSheet.protect

2.3.我暂时也没有办法去掉边框;
4.你想多了;
eisldkw 2019-06-21
  • 打赏
  • 举报
回复
引用 48 楼 milaoshu1020 的回复:
加一句:
OLE1.SizeMode = vbOLESizeAutoSize


非常非常的感谢,米老师。感谢您一路的支持,问题接近尾声了,还有几个小问题,就解决完了。如下图所示:



1、如图中红箭头所示处 数值 22 可以 改动,如何禁止改动,因为这是报表呀
2、excel边框可以改动,如何锁定其大小
3、在锁定EXCEL边框大小的前提下,不要影响EXCEL右下角滚动条的拖动。
4、可否将EXCEL相关的几个文件放置在软件工程目录下,直接调用此目录下的EXCEL相关文件,这样的话就无需考虑客户电脑上有没有安装EXCEL以及其版本等问题
再次感谢,米老师。新时代的活雷锋。
milaoshu1020 2019-06-21
  • 打赏
  • 举报
回复
那你学他这么做吧,看能不能脱离Excel直接运行;
eisldkw 2019-06-21
  • 打赏
  • 举报
回复
引用 51 楼 milaoshu1020 的回复:
1. 可以加如以下语句禁止修改:

xlSheet.cells.Locked = True
xlSheet.protect

2.3.我暂时也没有办法去掉边框;
4.你想多了;


关于第4问,我见到过一个其他人的项目确实是这么做的。如下图所示:

eisldkw 2019-06-20
  • 打赏
  • 举报
回复
引用 43 楼 milaoshu1020 的回复:
可以加一句:
OLE1.DoVerb


非常感谢,但是加了OLE1.DoVerb这一句,还是不管用。 如下图所示,为什么表序号 右侧的 列 都没有显示出来?

milaoshu1020 2019-06-20
  • 打赏
  • 举报
回复
可以加一句:
OLE1.DoVerb
eisldkw 2019-06-20
  • 打赏
  • 举报
回复
引用 41 楼 milaoshu1020 的回复:
我找到问题的原因了,创建的时候虽然用的是Excel.Sheet,但得到的OLE.object居然是WorkBook对象,由此可以继续得到其他对象:
(之前的示例代码是错误的,因为我想当然的认为OLE1.object是WorkSheet对象了,下面的代码则没有这个问题,所以应该可以顺利导入数据;)

Option Explicit

Private Sub Form_Load()
OLE1.CreateEmbed App.Path & "\book1.xlsx", "Excel.Sheet"

Dim xlBook As Object
Set xlBook = OLE1.object

Dim xlSheet As Object
Set xlSheet = xlBook.sheets(1)

MsgBox xlSheet.cells(1, 1)

Dim xlApp As Object
Set xlApp = xlBook.application

MsgBox xlApp.version
End Sub


非常感谢,米老师。窗体上的OLE控件显示数据了,但是只显示一部分,不知道是什么原因。请帮忙再看一下,1、列只显示了一部分,2、标题没有显示出来,3、合计部分也没有显示出来。 如下图所示




milaoshu1020 2019-06-20
  • 打赏
  • 举报
回复
写了个示例,代码如下:

Option Explicit

Dim xlApp As Object
Dim xlBook As Object
Dim xlSheet As Object

Private Sub Form_Load()
OLE1.SizeMode = vbOLESizeAutoSize
OLE1.CreateEmbed App.Path & "\book1.xlsx", "Excel.Sheet"

Set xlBook = OLE1.object
Set xlSheet = xlBook.sheets(1)
xlSheet.cells.Clear

'MsgBox xlSheet.cells(1, 1)

Set xlApp = xlBook.application

'MsgBox xlApp.version

OLE1.DoVerb 'vbOLEShow

End Sub


效果如图:

下载地址:
链接:https://pan.baidu.com/s/1ErlI1-TR6Dx_GhYkbr3SIg
提取码:a9qh
说明:
由于程序设定初始尺寸是自动调整的,所以...
实际显示内容的TOP和LEFT由OLE在窗体上的的TOP和LEFT控制,需要预留一定的空间;
实际显示内容的WIDTH和HEIGHT由初始文件,也就是创建OLE内嵌对象时传递文件的内容控制,可以先保存一些用来确定窗体初始大小的数据,初始化完毕后清空表格即可;
milaoshu1020 2019-06-20
  • 打赏
  • 举报
回复
加一句:
OLE1.SizeMode = vbOLESizeAutoSize
eisldkw 2019-06-20
  • 打赏
  • 举报
回复
引用 45 楼 milaoshu1020 的回复:
看你两个Excel表格在一起,你知道他的控件是OLE做的吗?他是如何调整的?


详细解释请看下图:

eisldkw 2019-06-20
  • 打赏
  • 举报
回复
引用 45 楼 milaoshu1020 的回复:
看你两个Excel表格在一起,你知道他的控件是OLE做的吗?他是如何调整的?
感谢,上面的控件不是OLE ,是FAR POINT SPREAD 控件,这个控件不好用,所以想用EXCEL控件 把这个SPREAD控件 替换掉。
milaoshu1020 2019-06-20
  • 打赏
  • 举报
回复
看你两个Excel表格在一起,你知道他的控件是OLE做的吗?他是如何调整的?
eisldkw 2019-06-19
  • 打赏
  • 举报
回复
引用 34 楼 milaoshu1020 的回复:
可以这样:

Option Explicit

Private Sub Form_Load()
OLE1.CreateEmbed App.Path & "\book1.xlsx", "Excel.Sheet"

Dim xlSheet As Object
Set xlSheet = OLE1.object

Dim xlApp As Object
Set xlApp = xlSheet.application

MsgBox xlApp.version
End Sub


非常感谢,但是,数据没有显示在OLE控件中,显示在另外生成的EXCEL程序中,请问如何处理,如下图所示


相关代码如下:

OLE1.CreateEmbed App.Path & "\book1.xls", "Excel.Sheet"

Dim xlSheet As Object
Set xlSheet = OLE1.object

Dim xlApp As Object
Set xlApp = xlSheet.Application


With Rs_Data
.ActiveConnection = Conn
.Source = SQLofBB4
.Open
End With


Set xlBook = xlApp.Workbooks().Add
Set xlSheet = xlBook.Worksheets("sheet1") ' 如果不用此处,则运行到最后一行代码处时直接提示 对象不支持此属性和代码
xlApp.Visible = True

'添加查询语句,导入EXCEL数据
Set xlQuery = xlSheet.QueryTables.Add(Rs_Data, xlSheet.Range("a1"))

请问如何处理,非常感谢。
milaoshu1020 2019-06-19
  • 打赏
  • 举报
回复
我找到问题的原因了,创建的时候虽然用的是Excel.Sheet,但得到的OLE.object居然是WorkBook对象,由此可以继续得到其他对象:
(之前的示例代码是错误的,因为我想当然的认为OLE1.object是WorkSheet对象了,下面的代码则没有这个问题,所以应该可以顺利导入数据;)

Option Explicit

Private Sub Form_Load()
OLE1.CreateEmbed App.Path & "\book1.xlsx", "Excel.Sheet"

Dim xlBook As Object
Set xlBook = OLE1.object

Dim xlSheet As Object
Set xlSheet = xlBook.sheets(1)

MsgBox xlSheet.cells(1, 1)

Dim xlApp As Object
Set xlApp = xlBook.application

MsgBox xlApp.version
End Sub
sonic_andy 2019-06-19
  • 打赏
  • 举报
回复
关注....
milaoshu1020 2019-06-19
  • 打赏
  • 举报
回复
应该是这样:
set xlBook = xlSheet.sheets.parent
milaoshu1020 2019-06-19
  • 打赏
  • 举报
回复
写错了,OLE中xlSheet的Parent竟然是Application对象;
加载更多回复(34)

7,785

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧