VB用OLE嵌EXCEL,调试能用,但编译后,EXCEL部分就死机。form嵌套form 可以吗上其他按钮正常使用,包括EXCEL的sheet翻页

&&&&&&&&&&&&&&&&&&
posts - 119,comments - 22,trackbacks - 0
&&ABAP直接操作EXCEL实现数据处理。这里是用OLE实现操作EXCEL的。现在还有
DOI操作EXCEL等方法。以后用到再做介绍。此处不是直接生成EXCEL文件,而是从
服务器已经上传的EXCEL模板中下载模板然后打开修改实现数据保存。也可以直接创建
新的EXCEL文件往里面传递数据并设置格式。这里不做介绍。
1.采用模板文件实现。上传EXCEL模板
&T-code:SMW0 WebRFC 的二进制数据 包:MI&&
点击按钮,上传excel模板。
模板数据保存在系统表wwwdata中。
2.在程序中下载模板
*下载EXCEL模板FORM
FORM& temp_excel_get.& DATA:& lo_objdata LIKE wwwdatatab,&&&&&&&& lo_mime LIKE w3mime,&&&&&&&& lc_filename& TYPE string VALUE'test01' ,&&&&&&&& lc_fullpath& TYPE string& VALUE'D:\test\' ,&&&&&&&& lc_path&&&&& TYPE& string VALUE'D:\test\' ,&&&&&&&& ls_destination LIKE rlgrap-filename,&&&&&&&& ls_objnam TYPE string,&&&&&&&& li_rc LIKE sy-subrc,&&&&&&&& ls_errtxt TYPE string.& DATA:p_objid TYPE wwwdatatab-objid,&&&&&& p_dest LIKE sapb-sappfad.& p_objid = 'ZTEST.XLS'. “此处为EXCEL模板名称& CALL METHOD cl_gui_frontend_services=&file_save_dialog ”调用保存对话框&&& EXPORTING&&&&& default_extension&&& = 'XLS'&&&&& default_file_name&&& = lc_filename &&& CHANGING&&&&& filename&&&&&&&&&&&& = lc_filename&&&&& path&&&&&&&&&&&&&&&& = lc_path&&&&& fullpath&&&&&&&&&&&& = lc_fullpath&&& EXCEPTIONS&&&&& cntl_error&&&&&&&&&& = 1&&&&& error_no_gui&&&&&&&& = 2&&&&& not_supported_by_gui = 3&&&&& OTHERS&&&&&&&&&&&&&& = 4.& IF lc_fullpath = ''.&&& MESSAGE& '不能打开excel' TYPE 'E'.& ENDIF.& IF sy-subrc = 0.&&& p_dest = lc_fullpath.*&&& concatenate p_objid '.XLS' into ls_objnam.&&& CONDENSE ls_objnam NO-GAPS.&&& SELECT SINGLE relid objid FROM wwwdata INTO CORRESPONDING FIELDS OF lo_objdata&&&&&&&&&& WHERE srtf2 = 0 AND relid = 'MI' AND objid = p_objid.
*检查表wwwdata中是否存在所指定的模板文件&&& IF sy-subrc NE 0 OR lo_objdata-objid EQ space.“如果不存在,则给出错误提示&&&&& CONCATENATE '模板文件' ls_objnam '不存在' INTO ls_errtxt.&&&&& MESSAGE ls_errtxt TYPE 'I'.&&& ENDIF.&&& ls_destination = p_dest. ”保存路径
*如果存在,调用DOWNLOAD_WEB_OBJECT 函数下载模板到路径下&&& CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'&&&&& EXPORTING&&&&&&& key&&&&&&&& = lo_objdata&&&&&&& destination = ls_destination&&&&& IMPORTING&&&&&&& rc&&&&&&&&& = li_rc.&&& IF li_rc NE 0.&&&&& CONCATENATE '模板文件:' ls_objnam '下载失败' INTO ls_errtxt.&&&&& MESSAGE ls_errtxt TYPE 'E'.&&& ENDIF.&&& fname = ls_destination.& ENDIF.ENDFORM.&&&&&&&&&&&&&&&&&&& "fm_excel
3.下载完模板后,打开模板文件,填入数据
& CREATE OBJECT excel 'EXCEL.APPLICATION'.& "Create EXCEL OBJECT& IF sy-subrc NE 0.&&& EXIT.& ENDIF.& SET PROPERTY OF excel 'Visible' = 0.& "1/0 是否显示EXCEL
& CALL METHOD OF excel 'Workbooks' = workbook.
& CALL METHOD OF workbook 'Open'&&& EXPORTING&&& #1 = fname. ."打开上面下载路径下的excel文件
& CALL METHOD OF excel 'Sheets' = sheet&&& EXPORTING&&& #1 = 1.
& CALL METHOD OF sheet 'Select' .
& CALL METHOD OF sheet 'ACTIVATE'. “sheet 激活
& SET PROPERTY OF sheet 'NAME' = sheetname. “设定sheet名称
*此处假设内表itab 中已经存在需要写入excel中的数据
*并且假如从模板的第7行开始插入数据
LOOP AT itab INTO wa.&&& tab = wa-tabix + 6.*在excel中插入一行&&& PERFORM excel_row_insert USING sheet tab 1.
*填充所插入行的每个单元格的数据&&& PERFORM fill_range USING tab 1 wa-t01.&&& PERFORM fill_range USING tab 2 wa-t02.&&& PERFORM fill_range USING tab 3 wa-t03.&&& PERFORM fill_range USING tab 4 wa-t04.&&& PERFORM fill_range USING tab 5 wa-t05.&&& PERFORM fill_range USING tab 6 wa-t06.& ENDLOOP.
*设置EXCEL中所插入的数据行边框线格式为黑色有边框
& bod = tab.& CONDENSE bod NO-GAPS.& CONCATENATE 'A6:F' bod INTO bod.
& PERFORM borderrange USING excel bod.
& PERFORM sub_excel_save."保存excel数据
*&---------------------------------------------------------------------**&&&&&& Form& sub_excel_save*&---------------------------------------------------------------------**&&&&&& text*----------------------------------------------------------------------*FORM sub_excel_save.& GET PROPERTY OF excel 'ActiveSheet' = sheet. “获取活动SHEET& FREE OBJECT sheet.& FREE OBJECT workbook.
& GET PROPERTY OF excel 'ActiveWorkbook' = workbook.& CALL METHOD OF workbook 'SAVE'.
& SET PROPERTY OF excel 'Visible' = 1.& "是否显示EXCEL 此处显示不退出
* SET PROPERTY OF excel 'Visible' = 1.
*& CALL METHOD OF workbook 'CLOSE'. *& CALL METHOD OF excel 'QUIT'. 注释部分为不显示直接退出
& FREE OBJECT sheet.& FREE OBJECT workbook.& FREE OBJECT excel.ENDFORM.&&&&&&&&&&&&&&&&&&& "save_book
*&---------------------------------------------------------------------**& 向excel中的指定行插入N行*&---------------------------------------------------------------------*FORM excel_row_insert USING lcobj_sheet&&&&&&&&&&&&&&&&&&&&&&&&&&& lc_row&&&&&&&&&&&&&&&&&&&&&&&&&&& lc_count.& DATA lc_range TYPE ole2_object.& DATA h_borders& TYPE ole2_object.& DO lc_count TIMES.&&& CALL METHOD OF lcobj_sheet 'Rows' = lc_range&&&&& EXPORTING #1 = 6.&&& CALL METHOD OF lc_range 'Copy'.& “COPY第6行插入一个新行&&& CALL METHOD OF lcobj_sheet 'Rows' = lc_range&&&&& EXPORTING #1 = lc_row.&&& CALL METHOD OF lc_range 'Insert'.&&& CALL METHOD OF lc_range 'ClearContents'. "是否需要清空Cell& ENDDO.ENDFORM.&&&&&&&&&&&&&&&&&&& "excel_row_insert
*&---------------------------------------------------------------------**&&&&&& Form& fill_range*&---------------------------------------------------------------------**&&&&&& text& 填充EXCEL 单元格*----------------------------------------------------------------------**&&&&& --&VALUE(F_ROW)&&& text*&&&&& --&VALUE(F_COL)&&& text*&&&&& --&VALUE(F_VALUE)& text*----------------------------------------------------------------------*FORM fill_range USING value(f_row)&&&&&&&&&&&&&&&&&&&&& value(f_col)&&&&&&&&&&&&&&&&&&&&& value(f_value).& DATA:&&& row TYPE i,&&& col TYPE i.& row = f_row.& col = f_col.& CALL METHOD OF excel 'CELLS' = cell&&& EXPORTING&&& #1 = row&&& #2 = col.& SET PROPERTY OF cell 'VALUE' = f_value.ENDFORM.&&&&&&&&&&&&&&&&&&& "fill_range&
&*&---------------------------------------------------------------------**&&&&&& Form& borderrange*&---------------------------------------------------------------------**&&&&&& text:设置EXCEL中所插入的数据行边框线格式
*----------------------------------------------------------------------**&&&&& --&LCOBJ_EXCEL& text*&&&&& --&RANGE&&&&&&& text*----------------------------------------------------------------------*FORM borderrange USING lcobj_excel&&&&&&&&&&&&&&&&&&&&&& range .& DATA: lc_cell TYPE ole2_object ,&&&&&&& lc_borders TYPE ole2_object .& CALL METHOD OF lcobj_excel 'RANGE' = lc_cell&&& EXPORTING&&& #1 = range.& DO 4 TIMES .&&& CALL METHOD OF lc_cell 'BORDERS' = lc_borders&&&&& EXPORTING #1 = sy-index.&&& SET PROPERTY OF lc_borders 'LineStyle' = '1'.&&& SET PROPERTY OF lc_borders 'WEIGHT' = 2.&&&&&&&&&&&&&&& "4=max&&& SET PROPERTY OF lc_borders 'ColorIndex' = '1'.& ENDDO.& FREE OBJECT lc_borders.& FREE OBJECT lc_cell.ENDFORM.&&&&&&&&&&&&&&&&&&& "borderrange
&暂时只用到了这么多,还有ABAP设置EXCEL字体,对齐方式等功能。什么时候用到了再
做研究。希望对大家有所帮助。
阅读(...) 评论()vb与EXCEL精华_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
vb与EXCEL精华
上传于||文档简介
&&V​B​和​E​x​c​e​l​相​互​调​用​的​操​作​手​册
阅读已结束,如果下载本文需要使用1下载券
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩9页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢共有1204位成员   人气指数 -   最新排名 -
【话题】如何用VB在OLE嵌入的EXCEL工作表中插入文本框
18:45:21 来自:迷路的小孩 浏览数:6次
ActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, 336.75, 209.25, _
& & & & 72#, 299.25).Select
& & Selection.Characters.Text = &&
& & With Selection.Font
& & & & .Name = &宋体&
& & & & .FontStyle = &常规&
& & & & .Size = 12
& & & & .Strikethrough = False
& & & & .Superscript = False
& & & & .Subscript = False
& & & & .OutlineFont = False
& & & & .Shadow = False
& & & & .Underline = xlUnderlineStyleNone
& & & & .ColorIndex = xlAutomatic
& & End With
如何用VB在OLE嵌入的EXCEL工作表中插入文本框
项思琪回复于29日19点56分 
a.在工程中引用Micro sof t Excel类型库。从VB的“工程”菜单中选择“引用”栏,选中Micro sof tExcel 11.0 Object Library(Excel 2003),然后单击“确定”,表示在工程中引用Excel类型库。
b.在通用对象的声明过程中定义Excel对象。
Dim ExApp A s Excel Applicatio n
Dim ExBoo k A s Excel Wo rkBoo k
Dim ExSheet A s Excel Wo rksheet
c.在程序中打开已经存在的Excel工件簿文件并设置活动工作表。
Set ExApp=CreateObject(&Excel.Applica2tio n&)’创建Excel对象
Set ExBoo k=ExApp.Wo rkboo ks.Open(&Excel工艺模版文件名&)’打开工件簿文件
ExApp.Visible=True’设置Excel对象可见
Set ExSheet=ExBoo k.Wo rksheet s(&表名&)’设置活动工作表
2.2 MSFlex Grid的文本向Excel单元格的传送
在CAPP项目开发中,工艺卡片中的主要内容是文本和图形。其中,VB环境下的文本内容主要存于文本框和MSFlexGrid网格控件中,其中又以MSFlex Grid网格控件为主。下面以VB的MS2Flex Grid网格控件向Excel单元格传送文本为例,介绍通用的程序代码。
以下代码将MSFlexGrid1网格控件第1行、第1列至第1行、第4列的内容传送到Excel表的“e1”~“h1”的单元格中。i=1
Fo r j=101 To 104‘101~104为字母e~h的
A SCII码值
r=Chr(j)&i
ExSheet.Range(r).Value=MSFlex Grid1.
Text Mat rix(i,j-100)
2.3 VB中的图形向Excel单元格的传送
在CAPP项目中所使用的各种工艺图形,均以文件的形式进行保存,本文使用的图形文件为Au2to CAD的dwg文件。若用变量Pict ure_name表示工艺卡片中插入的图形文件名(含路径),则可利用工作表的OLEObjects对象的Add方法,将此图形文件插入到Excel表格的某一单元格(如&a7&)中,具体代码如下:
ExSheet.Range(&a7&).Activate
ExSheet.OL EObject s.Add(FileName:=Pic2
t ure_name,Link:=Fal se).Select
需要说明的是,插入到Excel表格中的图形大小,可能与Excel模版中设定的图形区域不一致,可以在预览时(此时可通过代码自动打开所生成的Excel工艺卡片)进行如下调整:选中卡片中插入的图形;单击右键,在快捷菜单中选择“显示‘图片’工具栏”;利用图片工具栏中的“裁剪”和“压缩图片”按钮,将图片调整到合适尺寸。
2.4 已生成的Excel工艺表格的保存
以下代码将已生成的Excel工艺表格以文件的形式保存起来,供预览、打印及实际生产之用,并关闭Excel以及相应的工作薄和工作表。
Exapp.DisplayAlert s=Fal se
Exbook.SaveA s(&生成的Excel工艺表格文件名&)
Exbook.Close
Exapp.DisplayAlert s=True
Set Exboo k=Not hing
Set ExSheet=Not hing
Set Exapp=Not hing
3 预览及打印功能的实现
在VB环境下,利用OLE容器控件,调用Cre2ateLink方法可以在运行时从已生成的工艺卡片文件中创建一个链接对象[1],从而方便地打开已生成的Excel工艺表格,实现预览及打印,方法如下:在VB下建立一窗体(Name属性设置为Frm Excel),在其上放置一OL E控件(Name属性设置为Ole1),然后在预览及打印菜单的相应事件过程中编写下列代码。
Frm Excel.Ole1.CreateLink&生成的Excel工艺卡片文件名&
Frm Excel.Ole1.DoVerb‘运行时激活对象
VB语言的其他话题...
热门脚本语言:本文演示如何在 Visual Basic 应用程序中嵌入 Microsoft Excel 版本 5.0 工作表对象,然后通过使用 OLE 自动化和一个 MSOLE2.VBX 控件或 OLE 容器控件进行操作。 Microsoft Excel 版本 5.0 提供了支持使用 Visual Basic for Applications 的工作表和图表功能的 OLE 对象。 mfBVB知识库
Excel 中的工作表有时称为电子表格。 它是主文档用于在 Excel 中存储和处理数据。 在工作表包含组织成列和行的单元格,,在采用始终的工作簿的一部分。mfBVB知识库
loadTOCNode(2, 'moreinformation'); 下例显示如何使用 OLE 自动化完成在工作表添加数据、 计算和和选择单元格上的一些常见任务。 mfBVB知识库mfBVB知识库
在 Visual Basic 中启动一个新的项目。 默认情况下会创建 Form 1。
添加以下常量声明到 Form 1 的通用声明部分,说明数据来自该 CONSTANT.TXT 文件:
Const OLE_CREATE_EMBED = 0
Const OLE_ACTIVATE = 7
将 MSOLE2.VBX 文件添加到文件菜单中。使用菜单“添加文件”选项可添加该项目。 MSOLE2.VBX 位于 WINDOWS\SYSTEM 目录中。 OLE 控件将显示为 Visual Basic 工具栏上的选项。 添加 OLE 控件 (OLE 1) Form 1。 操作时按“取消”取消弹出的“插入对象”对话框。 您将建立一个空 OLE 1 对象在 Form 1 上。 将 OLE 1 控件的 SizeMode 属性设置为拉伸。
向 Form 1 中添加一个命令按钮 (Command 1)。 将标题设置为: 嵌入 Excel 5.0 对象。 添加以下代码,实现 Command 1 单击时向Excel 5.0 工作表嵌入 一个OLE 1 控件。 因为该OLE 1 控件 SizeMode 属性设置为拉伸,工作表自动调整大小自身 OLE 1 控件,执行代码。
Sub Command1_Click()
ole1.Class = "Excel.Sheet.5"
ole1.Action = OLE_CREATE_EMBED
将另一个命令按钮 (Command 2) 放到 Form 1 上中。 更改命令按钮的标题: 添加数据。 将以下代码添加到 Command 2 Click 事件:
Sub Command2_Click ()
ole1.Action = OLE_ACTIVATE
ole1.Object.cells(1, 1).value = "Jan"
ole1.Object.cells(2, 1).value = 3
ole1.Object.cells(3, 1).value = 4
ole1.Object.cells(4, 1).value = 6
&/a0&-"ole1.Object 部分是 Visual Basic 代码。 在行的其余部分添加数据 (单元格 (2,1).Value = 1) 是 Excel 的 Visual Basic for Applications 代码。
从运行菜单中选择开始,或按 F 5 键以运行该程序。 单击查看工作表的 Command 1。 单击要查看添加到工作表信息的 Command 2。 从可回到开发运行菜单中选择结束。
添加另一个命令按钮 (Command3) 来体验功能。 添加以下代码,在 Command3 单击事件代码。 SUM 函数是可以使用实验中的多个 Excel 函数之一。 运行应用程序,并按命令按钮,以查看效果。
Sub Command3_Click()mfBVB知识库&&&&&&&& ole1.Action = OLE_ACTIVATEmfBVB知识库&&&&&&&& ole1.Object.Range("A2:A4").SelectmfBVB知识库&&&&&&&& ' Try any one of the following lines, or add some pauses betweenmfBVB知识库&&&&&&&& ' them to see the selections taking place and the active cellmfBVB知识库&&&&&&&& ' changing.mfBVB知识库mfBVB知识库&&&&&&&& ' To try a line, remove the single quotation mark to uncomment themfBVB知识库&&&&&&&& ' line:mfBVB知识库&&&&&&&& ' ole1.Object.Range("C6").ActivatemfBVB知识库&&&&&&&& ' ole1.Object.cells(6, 1).value = "=SUM(R2C:R4C)"mfBVB知识库&&&&&&&& ' ole1.Object.Range("A6").SelectmfBVB知识库&&&&& End Sub
若要了解有关 Microsoft Excel 的 Visual Basic for Applications,请在 Excel 中, 打开一个新的模块工作表,将从视图菜单中, 选择对象浏览器或按 F 2 键。 在对象浏览器列出了 Excel 及其相关对象和方法中的所有对象。 在对象浏览器演示对象模型的分层特性。 mfBVB知识库mfBVB知识库如果您希望新,请尝试。但不能确定语法,最好手动启动 Microsoft Excel,逐步完成该过程中的宏录制器、 关闭宏录制器和在当前模块中查看代码。 然后代码剪切并粘贴在到 Visual Basic 事件过程。 通常需要的是 ole1.object 的前缀。
发表评论:
TA的最新馆藏[转]&[转]&[转]&[转]&[转]&[转]&Microsoft office excel正在等待其他某个应用程序以完成对象连接与嵌入操作是什么意思_百度知道

我要回帖

更多关于 form表单里面嵌套form 的文章

 

随机推荐