第一遍打印无错误,第二遍则出错,发生在:sheet1.Range("A1:K29").Select,代码如下。

truemichael 2000-07-08 10:34:00
Dim xlapp As Excel.Application
Dim sheet1 As Worksheet
Dim xlbook As Workbook
Set xlapp = New Excel.Application
Set xlapp = CreateObject("excel.application")
xlapp.Visible = False
Set xlbook = xlapp.Workbooks.Open(App.Path & "\ddgl.xls")
Set sheet1 = xlbook.Worksheets(1)
sheet1.Range("A1:K29").Select
Selection.ClearContents
这里填加信息
ActiveCell.Replace What:="TRUE", Replacement:="¡Å", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False
Cells.Replace What:="TRUE", Replacement:="¡Å", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False
Cells.Replace What:="FALSE", Replacement:="¡Á", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False
Range("E23").Select
xlbook.Save
sheet1.PrintOut
xlapp.Quit
...全文
167 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
bgxy 2001-09-08
  • 打赏
  • 举报
回复
用excel object编程,最好把xlapp.Visible = False改成xlapp.Visible = true,在VB中用debug一步一步跟着走。

你的问题应该是没有清除实例。
以下几句:
Set xlapp = CreateObject("excel.application")
xlapp.Visible = False
Set xlbook = xlapp.Workbooks.Open(App.Path & "\ddgl.xls")
Set sheet1 = xlbook.Worksheets(1)
sheet1.Range("A1:K29").Select
中建立了excel实例,打开xls文件,选择A1:K29范围的单元格
打印完成后只是关闭了excel,并没有清除实例
这样试试
xlapp.Quit
set xlapp=nothing

而且在sheet1.Range("A1:K29").Select之前加一句
sheet1.Range("A1").Select
看一下是否正确选择了A1
如果还出错,逐行debug,看是在选择A1时出错还是A1:K29时出错,也许有眉目



truemichael 2001-09-07
  • 打赏
  • 举报
回复
up
function ceshi_Excel %利用MATLAB生成Excel文档 % ceshi_Excel % % Copyright 2009 - 2010 xiezhh. % $Revision: 1.0.0.0 $ $Date: 2009/12/14 20:40:00 $ % 设定测试Excel文件名和路径 filespec_user = [pwd '\测试.xls']; % 判断Excel是否已经打开,若已打开,就在打开的Excel中进行操作,否则就打开Excel try % 若Excel服务器已经打开,返回其句柄Excel Excel = actxGetRunningServer('Excel.Application'); catch % 创建一个Microsoft Excel服务器,返回句柄Excel Excel = actxserver('Excel.Application'); end; % 设置Excel服务器为可见状态 Excel.Visible = 1; % set(Excel, 'Visible', 1); % 若测试文件存在,打开该测试文件,否则,新建一个工作簿,并保存,文件名为测试.Excel if exist(filespec_user,'file'); Workbook = Excel.Workbooks.Open(filespec_user); % Workbook = invoke(Excel.Workbooks,'Open',filespec_user); else Workbook = Excel.Workbooks.Add; % Workbook = invoke(Excel.Workbooks, 'Add'); Workbook.SaveAs(filespec_user); end % 返回当前工作表句柄 Sheets = Excel.ActiveWorkbook.Sheets; % Sheets = Workbook.Sheets; Sheet1 = Sheets.Item(1); % 返回第1个表格句柄 Sheet1.Activate; % 激活第1个表格 % 页面设置 Sheet1.PageSetup.TopMargin = 60; % 上边距60磅 Sheet1.PageSetup.BottomMargin = 45; % 下边距45磅 Sheet1.PageSetup.LeftMargin = 45; % 左边距45磅 Sheet1.PageSetup.RightMargin = 45; % 右边距45磅 % 设置行高和列宽 % 定义行高向量RowHeight RowHeight = [26,22,15,29,37,29,29,25,25,36,280,31,40,29,15,24]'; % 设置Range对象(从A1A16)的行高 Sheet1.Range('A1:A16').RowHeight = RowHeight; % 设置Range对象(从A1到H1)的列宽 Sheet1.Range('A1:H1').ColumnWidth = [9,15,9,9,9,9,9,9]; % 合并单元格 Sheet1.Range('A1:H1').MergeCells = 1; Sheet1.Range('A2:H2').MergeCells = 1; Sheet1.Range('A8:A9').MergeCells = 1; Sheet1.Range('B8:D8').MergeCells = 1; Sheet1.Range('E8:H8').MergeCells = 1; Sheet1.Range('B9:D9').MergeCells = 1; Sheet1.Range('E9:H9').MergeCells = 1; Sheet1.Range('A10:H10').MergeCells = 1; Sheet1.Range('A11:H11').MergeCells = 1; Sheet1.Range('A12:H12').MergeCells = 1; Sheet1.Range('A13:H13').MergeCells = 1; Sheet1.Range('A14:H14').MergeCells = 1; Sheet1.Range('D16:H16').MergeCells = 1; % 设置单元格的边框 Sheet1.Range('A4:H14').Borders.Weight = 3; Sheet1.Range('A10:H12').Borders.Item(3).Linestyle = 0; Sheet1.Range('A10:H12').Borders.Item(4).Linestyle = 0; Sheet1.Range('A13:H13').Borders.Item(4).Linestyle = 0; Sheet1.Range('A14:H14').Borders.Item(3).Linestyle = 0; % 设置单元格对齐方式 Sheet1.Range('A1:H9').HorizontalAlignment = 3; Sheet1.Range('A4:A9').HorizontalAlignment = 6; Sheet1.Range('C4:C7').HorizontalAlignment = 6; Sheet1.Range('E4:E7').HorizontalAlignment = 6; Sheet1.Range('G4:G7').HorizontalAlignment = 6; Sheet1.Range('A10:H10').HorizontalAlignment = 6; Sheet1.Range('A11:H11').HorizontalAlignment = 6; % -4130 Sheet1.Range('A11:H11').VerticalAlignment = 1; Sheet1.Range('A12:H12').HorizontalAlignment = 4; Sheet1.Range('A13:H13').VerticalAlignment = 1; Sheet1.Range('A14:H14').HorizontalAlignment = 4; Sheet1.Range('D16:H16').HorizontalAlignment = 4; % 写入单元格内容 Sheet1.Range('A1').Value = '试 卷 分 析'; Sheet1.Range('A2').Value = '( 2009 — 2010 学年 第一学期)'; Sheet1.Range('A4:H4').Value = {'课程名称','','课程号',... '','任课教师学院','','任课教师',''}; Sheet1.Range('A5:H5').Value = {'授课班级','','考试日期',... '','应考人数','','实考人数',''}; Sheet1.Range('A6:H6').Value = {'出卷方式','','阅卷方式',... '','选用试卷A/B','','考试时间',''}; Sheet1.Range('A7:H7').Value = {'考试方式','','平均分',... '','不及格人数','','及格率',''}; Sheet1.Range('A8').Value = '成绩分布'; Sheet1.Range('B8').Value = '90分以上 人占 %'; Sheet1.Range('E8').Value = '80---89分 人占 %'; Sheet1.Range('B9').Value = '70---79分 人占 %'; Sheet1.Range('E9').Value = '60---69分 人占 %'; Sheet1.Range('A10').Value = ['试卷分析(含是否符合教学大纲、难度、知识覆'... '盖面、班级分数分布分析、学生答题存在的共性问题与知识掌握情况、教学中'... '存在的问题及改进措施等内容)']; Sheet1.Range('A12').Value = '签字 : 年 月 日'; Sheet1.Range('A13').Value = '教研室审阅意见:'; Sheet1.Range('A14').Value = '教研室主任(签字): 年 月 日'; Sheet1.Range('D16').Value = '主管院长签字: 年 月 日'; % 设置字号 Sheet1.Range('A4:H12').Font.size = 10.5; % 设置单元格A4至H12的字号为10.5 Sheet1.Range('A1').Font.size = 16; % 设置单元格A1的字号为16 Sheet1.Range('A1').Font.bold = 2; % 单元格A1的字体加粗 % 插入图片,如果当前工作表中有图形存在,通过循环将图形全部删除 Shapes = Sheet1.Shapes; % 返回第1个工作表的Shapes接口的句柄 if Shapes.Count ~= 0; for i = 1 : Shapes.Count; Shapes.Item(1).Delete; % 删除第1个Shape对象 end; end; % 产生均值为75,标准差为4的正态分布随机数,画直方图,并设置图形属性 zft = figure('units','normalized','position',... [0.280469 0.553385 0.428906 0.251302],'visible','off'); % 新建图形窗口,设为不可见 set(gca,'position',[0.1 0.2 0.85 0.75]); % 设置坐标系的位置和大小 data = normrnd(75,4,1000,1); % 产生均值为75,标准差为4的正态分布随机数 hist(data); % 绘制正态分布随机数的频数直方图 grid on; % 添加参考网格 xlabel('考试成绩'); % 为X轴加标签 ylabel('人数'); % 为Y轴加标签 hgexport(zft, '-clipboard'); % 将直方图复制到剪贴板 % 选中工作表Sheet1A11单元格,插入由MATLAB命令作出的直方图 Sheet1.Range('A11').Select; Sheet1.Paste % Sheet1.PasteSpecial; delete(zft); % 删除图形句柄 Workbook.Save % 保存文档
EXCEL里使用SQL的方法(欢乐小爪原创) 急用EXCEL的SQL用法,抄来欢乐小爪几篇文章,支持原创,留下小爪印:http://hi.baidu.com/huanhuanxiaozhua/blog EXCEL(VBA)~SQL 经典写法范本汇集(一) 2007-12-10 21:20 编前话:为了更系统的学习sql语句,小爪首次系统的汇集sql 需引用 microsoft activeX Data Objects 2.8 library 1.sql = "select 构件名称,构件代号,横长度,横数量,竖长度,竖数量,比重,相应工艺 from [参数$B2:K1916]where (大样代码='" & DYDH & "') and (内外框='WKXC')" 2.sql = "select 构件名称,构件代号,横长度,横数量,竖长度,竖数量,比重,相应工艺 from [参数$B2:K" & CSMaxrow & "] where (大样代码='" & DYDH & "') and (内外框='WKXC')" **************************************************************** A、根据本工作簿的1个表查询求和写法范本 Sub 查询方法一() Set CONN = CreateObject("ADODB.Connection") CONN.Open "provider=microsoft.jet.oledb.4.0;extended properties=excel 8.0;data source=" & ThisWorkbook.FullName sql = "select 区域,存货类, sum(代销仓入库数量),sum(代销仓出库数量),sum(日报数量)from [sheet4$a:i] where 区域='" & [b3] & "' and month(日期)='" & Month(Range("F3")) & "' group by 区域,存货类" Sheets("sheet2").[A5].CopyFromRecordset CONN.Execute(sql) CONN.Close: Set CONN = Nothing End Sub ----------------- Sub 查询方法二() Set CONN = CreateObject("ADODB.Connection") CONN.Open "dsn=excel files;dbq=" & ThisWorkbook.FullName sql = "select 区域,存货类, sum(代销仓入库数量),sum(代销仓出库数量),sum(日报数量)from [sheet4$a:i] where 区域='" & [b3] & "' and month(日期)='" & Month(Range("F3")) & "' group by 区域,存货类" Sheets("sheet2").[A5].CopyFromRecordset CONN.Execute(sql) CONN.Close: Set CONN = Nothing End Sub ************************************************************************************************** B、根据本工作簿2个表的不同类别查询求和写法范本 Sub 根据入库表和回款表的区域名和月份分别求存货类发货数量和本月回款数量查询() Set conn = CreateObject("adodb.connection") conn.Open "provider=microsoft.jet.oledb.4.0;" & _ "extended properties=excel 8.0;data source=" & ThisWorkbook.FullName Sheet3.Activate Sql = " select a.存货类,a.fh ,b.hk from (select 存货类,sum(本月发货数量) " _ & " as fh from [入库$] where 存货类 is not null and 区域='" & [b2] _ & "' and month(日期)=" & [d2] & " group by 存货类) as a" _ & " left join (select 存货类,sum(数量) as hk from [回款$] where 存货类" _ & " is not null and 区域='" & [b2] & "' and month(开票日期)=" & [d2] & "" _ & " group by 存货类) as b on a.存货类=b.存货类" Range("a5").CopyFromRecordset conn.Execute(Sql) End Sub ******************************************************************* C、根据本文件夹下其他工作簿1个表区域的区域求和 Sub 在工作表1汇总本文件夹下001工作薄的表1分数列查询汇总() Set conn = CreateObject("ADODB.Connection") conn.Open "dsn=excel files;dbq=" & ThisWorkbook.Path & "\001.xls" sql = "select sum(分数) from [sheet1$]" Sheets(1).[a2].CopyFromRecordset conn.Execute(sql) conn.Close: Set conn = Nothing End Sub --------------------- Sub 在工作表1汇总本文件夹下001工作薄的表1A1:A10查询汇总() Set conn = CreateObject("ADODB.Connection") conn.Open "provider=microsoft.jet.oledb.4.0;extended properties='excel 8.0;hdr=no;';data source=" & ThisWorkbook.Path & "\001.xls" sql = "select sum(f1) from [sheet1$a1:a10]" Sheets(1).[A5].CopyFromRecordset conn.Execute(sql) conn.Close: Set conn = Nothing End Sub ----------------------- Sub 在工作表1汇总本文件夹下001工作薄的表1分数列A1:A7查询并msgbox表达汇总() Set conn = CreateObject("ADODB.Connection") Set rr = CreateObject("ADODB.recordset") conn.Open "dsn=excel files;dbq=" & ThisWorkbook.Path & "\001.xls" sql = "select sum(分数) from [sheet1$a1:a7]" Sheets(1).[A8].CopyFromRecordset conn.Execute(sql) rr.Open sql, conn, 3, 1, 1 MsgBox rr.fields(0) conn.Close: Set conn = Nothing End Sub ****************************************************************************************** D、根据本文件夹下其他工作簿多个表区域的单列区域查询求和 sub 本文件夹下其他工作簿的每个工作簿的第4列 30行查询求和 Dim cn As Object, f$, arr&(1 To 30), i% Application.ScreenUpdating = False Set cn = CreateObject("adodb.connection") f = Dir(ThisWorkbook.Path & "\*.xls") Do While f <> "" If f <> ThisWorkbook.Name Then cn.Open "provider=microsoft.jet.oledb.4.0;extended properties='excel 8.0;hdr=no;';data source=" & ThisWorkbook.Path & "\" & f Range("d5").CopyFromRecordset cn.Execute("select f4 from [基表1$a5:d65536]") cn.Close For i = 1 To 30 arr(i) = arr(i) + Range("d" & i + 4) Next i End If f = Dir Loop Range("d5").Resize(UBound(arr), 1) = WorksheetFunction.Transpose(arr) Application.ScreenUpdating = True End Sub ************************************************************************************************** E、根据本文件夹下其他工作簿多个表区域的多列区域查询求和 sub 本文件夹下其他工作簿的每个工作簿的第B\C\D列 25行查询求和 Dim cn As Object, f$, arr&(1 To 25, 1 To 3), i% Application.ScreenUpdating = False Set cn = CreateObject("adodb.connection") f = Dir(ThisWorkbook.Path & "\*.xls") Do While f <> "" If f <> ThisWorkbook.Name Then cn.Open "provider=microsoft.jet.oledb.4.0;extended properties='excel 8.0;hdr=no;';data source=" & ThisWorkbook.Path & "\" & f Range("b6").CopyFromRecordset cn.Execute("select f2,f3,f4 from [基表3$a6:e65536]") cn.Close For i = 1 To 25 For j = 1 To 3 arr(i, j) = arr(i, j) + Cells(i + 5, j + 1) Next j Next i End If f = Dir Loop Range("b6").Resize(UBound(arr), 3) = arr Application.ScreenUpdating = True End Sub *********************************************************************************** F、其他相关知识整理 ' 用excel SQL方法 'conn是建立的连接对象,用open打开 ' 通过 CreateObject("ADODB.Connection") 这一句建立了一个数据库连接对象conn ' 在工程中就不再需要引用“Microsot ActiveX Data Objects 2.0 Library“ 对象 '设置对象 conn 为一个新的 ADO 链接实例,也可以用 set conn = New ADODB.Connection。 -------------- ' conn.Close表示关闭conn连接 ' Set conn = Nothing 是把连接对象conn置空,不然你退出了文件,但数据库还没有关闭 conn.Open "dsn=excel files;dbq=" & ThisWorkbook.Path & "\001.xls"能把这段含义具体解释一下吗? '这里的dbq的作用? '------------------ 'dsn是缩写,data source name数据库名 是 excel file ' 'dbq 也是缩写,data base query 意思是数据库查询,后接源库文件名 001.xls '--------------------- '代码中长单词怎么记住的? '比如copyfromrecordset可以拆开记忆,copy、from、recordset 这三个单词意思知道吧,就是“复制、从、记录集” '----------------- 'Sql = "select sum(分数) from [sheet1$]"这里加"分数"两字什么作用? ' 'SQL一般结构是select 字段 from 表,意思是从指定的表中查询字段,字段的理解可以是:表 中的列名 ' '分数 是001.xls文件的sheet1第一行A列的字段名,SQL一般以字段来识别每列数据 '------------------- '为什么要用复制的对象引用过来计算呢? ' '因为Sql语句只是对源数据库的字段找到了符合条件的的数据,但不会自动复制到汇总表来,所以需要复制copy ' '注意 这里的 [sheet1$]" ,001文件的数据存放地上sheet1表,应当用方括号并加上$ ' '如果源数据文件001不是excel,而是Access,则引用表时,不需要加方括号,也不要$ '----------------- 还有,这里Execute表示什么作用? '' Execute是执行SQL查询语句的意思 ----------------------------- 如果不要字段也可以,那么在打开语句中加上:hdr=no '这样没有分数字段也可实现 'SQL语句我换了形式,而且加上了hdr=no,即无需字段,而且我在SQL中用了sum(f1),f1表示第一列数据 '[sheet1$a1:a10] "是只求a1:a10区域的和" ********************************************** 编后话: 前面也多次听说了sql,总没有时间,也没有好好认识它 第一次认真系统学习sql语句,汇集了一些代码。 有不同理解的人,欢迎给予小爪评论,小爪只爱excel
LINGO是用来求解线性和非线性优化问题的简易工具。LINGO内置了一种建立最优化模型的语言,可以简便地表达大规模问题,利用LINGO高效的求解器可快速求解并分析结果。 §1 LINGO快速入门 当你在windows下开始运行LINGO系统时,会得到类似下面的一个窗口: 外层是主框架窗口,包含了所有菜单命令和工具条,其它所有的窗口将被包含在主窗口之下。在主窗口内的标题为LINGO Model – LINGO1的窗口是LINGO的默认模型窗口,建立的模型都都要在该窗口内编码实现。下面举两个例子。 例1.1 如何在LINGO中求解如下的LP问题: 在模型窗口中输入如下代码: min=2*x1+3*x2; x1+x2>=350; x1>=100; 2*x1+x2<=600; 然后点击工具条上的按钮 即可。 例1.2 使用LINGO软件计算6个发点8个收点的最小费用运输问题。产销单位运价如下表。 单 位 销地 运 价 产地 B1 B2 B3 B4 B5 B6 B7 B8 产量 A1 6 2 6 7 4 2 5 9 60 A2 4 9 5 3 8 5 8 2 55 A3 5 2 1 9 7 4 3 3 51 A4 7 6 7 3 9 2 7 1 43 A5 2 3 9 5 7 2 6 5 41 A6 5 5 2 2 8 1 4 3 52 销量 35 37 22 32 41 32 43 38 使用LINGO软件,编制程序如下: model: !6发点8收点运输问题; sets: warehouses/wh1..wh6/: capacity; vendors/v1..v8/: demand; links(warehouses,vendors): cost, volume; endsets !目标函数; min=@sum(links: cost*volume); !需求约束; @for(vendors(J): @sum(warehouses(I): volume(I,J))=demand(J)); !产量约束; @for(warehouses(I): @sum(vendors(J): volume(I,J))<=capacity(I)); !这里是数据; data: capacity=60 55 51 43 41 52; demand=35 37 22 32 41 32 43 38; cost=6 2 6 7 4 2 9 5 4 9 5 3 8 5 8 2 5 2 1 9 7 4 3 3 7 6 7 3 9 2 7 1 2 3 9 5 7 2 6 5 5 5 2 2 8 1 4 3; enddata end 然后点击工具条上的按钮 即可。 为了能够使用LINGO的强大功能,接着第二节的学习吧。 §2 LINGO中的集 对实际问题建模的时候,总会遇到一群或多群相联系的对象,比如工厂、消费者群体、交通工具和雇工等等。LINGO允许把这些相联系的对象聚合成集(sets)。一旦把对象聚合成集,就可以利用集来最大限度的发挥LINGO建模语言的优势。 现在我们将深入介绍如何创建集,并用数据初始化集的属性。学完本节后,你对基于建模技术的集如何引入模型会有一个基本的理解。 2.1 为什么使用集 集是LINGO建模语言的基础,是程序设计最强有力的基本构件。借助于集,能够用一个单一的、长的、简明的复合公式表示一系列相似的约束,从而可以快速方便地表达规模较大的模型。 2.2 什么是集 集是一群相联系的对象,这些对象也称为集的成员。一个集可能是一系列产品、卡车或雇员。每个集成员可能有一个或多个与之有关联的特征,我们把这些特征称为属性。属性值可以预先给定,也可以是未知的,有待于LINGO求解。例如,产品集中的每个产品可以有一个价格属性;卡车集中的每辆卡车可以有一个牵引力属性;雇员集中的每位雇员可以有一个薪水属性,也可以有一个生日属性等等。 LINGO有两种类型的集:原始集(primitive set)和派生集(derived set)。 一个原始集是由一些最基本的对象组成的。 一个派生集是用一个或多个其它集来定义的,也就是说,它的成员来自于其它已存在的集。 2.3 模型的集部分 集部分是LINGO模型的一个可选部分。在LINGO模型中使用集之前,必须在集部分事先定义。集部分以关键字“sets:”开始,以“endsets”结束。一个模型可以没有集部分,或有一个简单的集部分,或有多个集部分。一个集部分可以放置于模型的任何地方,但是一个集及其属性

7,763

社区成员

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

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