这段excel vba 实例有什么问题?应该如何改正?

Excel VBA 如何实现改变单元格内容后自动更新到数据库?不知道代码哪里有问题,请指教
[问题点数:20分,结帖人star_loafer]
Excel VBA 如何实现改变单元格内容后自动更新到数据库?不知道代码哪里有问题,请指教
[问题点数:20分,结帖人star_loafer]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
相关帖子推荐:
2013年11月 VB大版内专家分月排行榜第二
2012年9月 VB大版内专家分月排行榜第三
2013年11月 VB大版内专家分月排行榜第二
2012年9月 VB大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。Sub 新批报送邮局()&&'新批报送邮局:抽取新批户主姓名、身份证号码、家庭住址,注销户主不抽取
Dim Town(12), Sh As Worksheet, i As Byte, j As Long, r As Long
Dim conn As Object, sql$
Town(1) = &林口镇&: Town(2) = &古城镇&: Town(3) = &刁翎镇&: Town(4) = &五林镇&: Town(5) = &朱家镇&: Town(6) = &柳树镇&: Town(7) = &三道通镇&: Town(8) = &龙爪镇&: Town(9) = &莲花镇&: Town(10) = &奎山乡&: Town(11) = &青山乡&: Town(12) = &建堂乡&& & '需要抽取数据的乡镇
Set Sh = Sheets(&新批报送邮局&)
Sh.[A1:D65536].ClearContents& & '清空新批报送邮局数据
Set conn = CreateObject(&adodb.connection&)
conn.Open &provider=microsoft.jet.oledb.4.0;extended properties='excel 8.0;hdr=imex=1';Data Source=& & ThisWorkbook.FullName
Sh.Cells(1, 1).Resize(1, 3) = Array(&姓名&, &身份证号码&, &家庭住址&) '栏位名称
For i = 1 To 12
& & With Sheets(Town(i))
& && &&&sql = &select f6,f3,f9 from [& & Town(i) & &$B2:I65536] where f2='' and f6&&'' and isnull(f26)&& & '6、3、9是工作簿中相对应的列
& && &&&r = Sh.Cells(65536, 1).End(xlUp).Row + 1& && &&&'新批报送邮局A栏最后空白列
& && &&&Sh.Cells(r, -1).CopyFromRecordset conn.Execute(sql)
& & End With
Next i
conn.Close
Set conn = Nothing
End Sub复制代码
学海无涯...
在线时间5184 小时经验10013 威望2 最后登录注册时间阅读权限95UID371378积分10713帖子精华0分享0
积分排行65帖子精华0微积分0
是没结果,还是出错???
在线时间567 小时经验786 威望0 最后登录注册时间阅读权限30UID522086积分936帖子精华0分享0
EH中级, 积分 936, 距离下一级还需 164 积分
积分排行1135帖子精华0微积分0
回复 2楼 wudixin96 的帖子
出错,这部分是黄色的“Sh.Cells(r, -1).CopyFromRecordset conn.Execute(sql)”
学海无涯...
在线时间6664 小时经验10661 威望5 最后登录注册时间阅读权限95UID277206积分12361帖子精华0分享0
积分排行55帖子精华0微积分0
Cells(r, -1)错误,在这里列值必须为正数,因为不存在第-1列。
心无杂草 自生快乐
在线时间5184 小时经验10013 威望2 最后登录注册时间阅读权限95UID371378积分10713帖子精华0分享0
积分排行65帖子精华0微积分0
如果是这个错误的话,就是这句出错了sql = &select f6,f3,f9 from [& & Town(i) & &$B2:I65536] where f2='' and f6&&'' and isnull(f26)&
请看区域是B2:I65536
总共是8列,而楼主代码中却有F9/F26,这样数据没法取的
机会是留给有准备的人
操作环境:Windows 8/8.1 + Microsoft Office 2013
在线时间567 小时经验786 威望0 最后登录注册时间阅读权限30UID522086积分936帖子精华0分享0
EH中级, 积分 936, 距离下一级还需 164 积分
积分排行1135帖子精华0微积分0
我上传附件了,麻烦大家看一下。
按照大家的修改了,但是还是不好使,请看附件。
17:16 上传
下载次数: 5
338.63 KB, 下载次数: 5
在线时间6664 小时经验10661 威望5 最后登录注册时间阅读权限95UID277206积分12361帖子精华0分享0
积分排行55帖子精华0微积分0
Sub 新批报送邮局()
& & Dim Conn As Object, Sql$
& & Dim Sh As Worksheet, Sht As Worksheet
& & Set Sh = Sheets(&新批报送邮局&)
& & Sh.[2:65536].Clear
& & Set Conn = CreateObject(&adodb.connection&)
& & Conn.Open &provider=microsoft.jet.oledb.4.0;extended properties=Excel 8.0;Data Source=& & ThisWorkbook.FullName
& & On Error Resume Next
& & For Each Sht In Sheets
& && &&&If Sht.UsedRange.Rows.Count & 1 And Sht.Name && Sh.Name Then
& && && && &Sql = &Select 姓名,身份证号码,住址 & _
& && && && && & & &From [& & Sht.Name & &$A1:Z& & Sht.[C65536].End(3).Row & &] & _
& && && && && & & &Where 登记时间=## And 姓名&&'' And Isnull(变动种类)&
& && && && &Sh.[A65536].End(3)(2).CopyFromRecordset Conn.Execute(Sql)
& && &&&End If
& & Next
& & Conn.Close: Set Conn = Nothing
End Sub复制代码
[ 本帖最后由 alzeng 于
18:22 编辑 ]
心无杂草 自生快乐
在线时间6664 小时经验10661 威望5 最后登录注册时间阅读权限95UID277206积分12361帖子精华0分享0
积分排行55帖子精华0微积分0
(234.95 KB, 下载次数: 15)
18:23 上传
下载次数: 15
在线时间567 小时经验786 威望0 最后登录注册时间阅读权限30UID522086积分936帖子精华0分享0
EH中级, 积分 936, 距离下一级还需 164 积分
积分排行1135帖子精华0微积分0
回复 8楼 alzeng 的帖子
感谢一念老师和其他帮助的朋友,明天我回单位套用一下,不懂的还得麻烦大家。[em01]
学海无涯...
在线时间567 小时经验786 威望0 最后登录注册时间阅读权限30UID522086积分936帖子精华0分享0
EH中级, 积分 936, 距离下一级还需 164 积分
积分排行1135帖子精华0微积分0
回复 8楼 alzeng 的帖子
一念老师啊!~我在单位试了一下,确实好使,但是数据多的时候好慢啊!能优化一下代码吗?有时候还出现假死状态。
然后还有个小小的要求,这段代码是抽取十二个乡镇B列等于的数据,如果我要抽取其它数据必然要到代码里修改,能不能在前台,也就是新批报送邮局这个表里直接选择呢?麻烦老师了。。。再次感谢。
学海无涯...
积分≥4700即可申请
优秀会员奖章No.2
优秀会员奖章No.1
金牌优秀会员
金牌优秀会员奖章No.1
优秀会员奖章No.3
Excel Home竞赛活动
Excel Home竞赛活动奖章
- 注意:自起,未完成邮箱认证的会员将无法发帖!如何完成邮箱认证?请点击下方“查看”。
关注我们,与您相约微信公众平台!
Copyright 1999 - 2017 Excel Home. All Rights Reserved.本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!
Powered by
本站特聘法律顾问:徐怀玉律师 李志群律师 &&今日: 48|昨日: 387|帖子: 3367394|会员: 764139|欢迎新会员:
面向应用型求助,帮您迅速解决技巧和基础方面的困难。版主: , , , , ,
8万 / <span title="万
面向应用型求助,帮您迅速解决函数和图表方面的困难。版主: , , , , ,
3万 / <span title="万
面向应用型求助,帮您迅速解决VBA程序开发方面的困难。版主: , , , , , ,
4万 / <span title="万
主题: 591, 帖数: 4万
主题: 805, 帖数: <span title="万
主题: 557, 帖数: 2万
主题: 1062, 帖数: <span title="万
主题: 3392, 帖数: <span title="万
主题: 601, 帖数: 6305
主题: 1162, 帖数: 4万
主题: 141, 帖数: 4567
主题: 311, 帖数: 2万
主题: 2万, 帖数: 3万
主题: 1161, 帖数: <span title="万
主题: 21, 帖数: 766
主题: 3534, 帖数: 6万
主题: 284, 帖数: 5863
主题: 1692, 帖数: 4万
主题: 197, 帖数: 9177
主题: 1721, 帖数: 4万
主题: 1051, 帖数: 4万
主题: 2845, 帖数: 8万
主题: 73, 帖数: 929
主题: 156, 帖数: 1855
主题: 224, 帖数: 4832
主题: 46, 帖数: 2331
主题: 831, 帖数: 2万
主题: 1162, 帖数: 4万
主题: 89, 帖数: 2070
主题: 4645, 帖数: <span title="万
主题: 119, 帖数: 1721
主题: 164, 帖数: 4388
主题: 937, 帖数: 1万
主题: 12, 帖数: 328
主题: 611, 帖数: 1万
主题: 3万, 帖数: <span title="万
主题: 3097, 帖数: 7万
主题: 306, 帖数: 2万
主题: 1451, 帖数: 7万
站长推荐 /1
兰色幻想+小妖联合录制
excel函数初中高56集+VBA宏80集
高清视频教程
让你从excel菜鸟走向excel高手!
Powered by在实际工作中,Excel应该注意那些问题(重要或频繁的操作)有那些?具体点!_百度知道
在实际工作中,Excel应该注意那些问题(重要或频繁的操作)有那些?具体点!
还是需要平时的积累,一下子很难总结!注意勤保存自己的劳动成果吧。⒈快速定义工作簿格式首先选定需要定义格式的工作簿范围,单击“格式”菜单的“样式”命令,打开“样式”对话框;然后从“样式名”列表框中选择合适的“样式”种类,从“样式包括”列表框中选择是否使用该种样式的数字、字体、对齐、边框、图案、保护等格式内容;单击“确定”按钮,关闭“样式”对话框,Excel工作簿的格式就会按照用户指定的样式发生变化,从而满足了用户快速、大批定义格式的要求。 ⒉快速复制公式复制是将公式应用于其它单元格的操作,最常用的有以下几种方法:一是拖动制复制。操作方法是:选中存放公式的单元格,移动空心十字光标至单元格右下角。待光标变成小实心十字时,按住鼠标左键沿列(对行计算时)或行(对列计算时)拖动,至数据结尾完成公式的复制和计算。公式复制的快慢可由小实心十字光标距虚框的远近来调节:小实心十字光标距虚框越远,复制越快;反之,复制越慢。也可以输入复制。此法是在公式输入结束后立即完成公式的复制。操作方法:选中需要使用该公式的所有单元格,用上面介绍的方法输入公式,完成后按住Ctrl键并按回车键,该公式就被复制到已选中的所有单元格。还可以选择性粘贴。操作方法是:选中存放公式的单元格,单击Excel工具栏中的“复制”按钮。然后选中需要使用该公式的单元格,在选中区域内单击鼠标右键,选择快捷选单中的“选择性粘贴”命令。打开“选择性粘贴”对话框后选中“粘贴”命令,单击“确定”,公式就被复制到已选中的单元格。 ⒊快速显示单元格中的公式如果工作表中的数据多数是由公式生成的,如果想要快速知道每个单元格中的公式形式,可以这样做:用鼠标左键单击“工具”菜单,选取“选项”命令,出现“选项”对话框,单击“视图”选项卡,接着设置“窗口选项”栏下的“公式”项有效,单击“确定”按钮。这时每个单元格中的公式就显示出来了。如果想恢复公式计算结果的显示,再设置“窗口选项”栏下的“公式”项失效即可。 ⒋快速删除空行有时为了删除Excel工作簿中的空行,你可能会将空行一一找出然后删除,这样做非常不方便。你可以利用“自动筛选”功能来简单实现。先在表中插入新的一行(全空),然后选择表中所有的行,选择“数据”菜单中的“筛选”,再选择“自动筛选”命令。在每一列的项部,从下拉列表中选择“空白”。在所有数据都被选中的情况下,选择“编辑”菜单中的“删除行”,然后按“确定”即可。所有的空行将被删去。插入一个空行是为了避免删除第一行数据。 ⒌自动切换输入法当你使用Excel 2000编辑文件时,在一张工作表中通常是既有汉字,又有字母和数字,于是对于不同的单元格,需要不断地切换中英文输入方式,这不仅降低了编辑效率,而且让人不胜其烦。在此,笔者介绍一种方法,让你在Excel 2000中对不同类型的单元格,实现输入法的自动切换。新建或打开需要输入汉字的单元格区域,单击“数据”菜单中的“有效性”,再选择“输入法模式”选项卡,在“模式”下拉列表框中选择“打开”,单击“确定”按钮。 选择需要输入字母或数字的单元格区域,单击“数据”菜单中的“有效性”,再选择“输入法模式”选项卡,在“模式”下拉列表框中选择“关闭(英文模式)”,单击“确定”按钮。之后,当插入点处于不同的单元格时,Excel 2000能够根据我们进行的设置,自动在中英文输入法间进行切换。就是说,当插入点处于刚才我们设置为输入汉字的单元格时,系统自动切换到中文输入状态,当插入点处于刚才我们设置为输入数字或字母单元格时,系统又能自动关闭中文输入法。 ⒍自动调整小数点如果你有一大批小于1的数字要录入到Excel工作表中,如果录入前先进行下面的设置,将会使你的输入速度成倍提高。单击“工具”菜单中的“选项”,然后单击“编辑”选项卡,选中“自动设置小数点”复选框,在“位数”微调编辑框中键入需要显示在小数点右面的位数。在此,我们键入“2”单击“确定”按钮。完成之后,如果在工作表的某单元格中键入“4”,则在你按了回车键之后,该单元格的数字自动变为“0.04”。方便多了吧!此时如果你在单元格中键入的是“8888”,则在你结束输入之后,该单元格的数字自动变为“88.88”。 ⒎用“记忆式输入”有时我们需要在一个工作表中的某一列输入相同数值,这时如果采用“记忆式输入”会帮你很大的忙。如在职称统计表中要多次输入“助理工程师”,当第一次输入后,第二次又要输入这些文字时,只需要编辑框中输入“助”字,Excel2000会用“助”字与这一列所有的内容相匹配,若“助”字与该列已有的录入项相符,则Excel2000会将剩下的“助理工程师”四字自动填入。按下列方法设置“记忆式输入”:选择“工具”中的“选项”命令,然后选择“选项”对话框中的“编辑”选项卡,选中其中的“记忆式键入”即可。 ⒏用“自动更正”方式实现快速输入使用该功能不仅可以更正输入中偶然的笔误,也可能把一段经常使用的文字定义为一条短语,当输入该条短语时,“自动更正”便会将它更换成所定义的文字。你也可以定义自己的“自动更正”项目:首先,选择“工具”中的“自动更正”命令;然后,在弹出的“自动更正”对话框中的“替换”框中键入短语“爱好者”,在“替换为”框中键入要替换的内容“电脑爱好者的读者”;最后,单击“确定”退出。以后只要输入“爱好者”,则整个名称就会输到表格中。 ⒐用下拉列表快速输入数据如果你希望减少手工录入的工作量,可以用下拉表来实现。创建下拉列表方法为:首先,选中需要显示下拉列表的单元格或单元格区域;接着,选择菜单“数据”菜单中的“有效性”命令,从有效数据对话框中选择“序列”,单击“来源”栏右侧的小图标,将打开一个新的“有效数据”小对话框;接着,在该对话框中输入下拉列表中所需要的数据,项目和项目之间用逗号隔开,比如输入“工程师,助工工程师,技术员”,然后回车。注意在对话框中选择“提供下拉箭头”复选框;最后单击“确定”即可。 10..两次选定单元格  有时,我们需要在某个单元格内连续输入多个测试值,以查看引用此单元格的其他单元格的效果。但每次输入一个值后按Enter键,活动单元格均默认下移一个单元格,非常不便。此时,你肯定会通过选择“工具”&#92;“选项&&#92;“编辑&,取消“按Enter键移动活动单元格标识框&选项的选定来实现在同一单元格内输入许多测试值,但以后你还得将此选项选定,显得比较麻烦。其实,采用两次选定单元格方法就显得灵活、方便:  单击鼠标选定单元格,然后按住Ctrl键再次单击鼠标选定此单元格(此时,单元格周围将出现实线框)。
11.“Shift+拖放&的妙用  在拖放选定的一个或多个单元格至新的位置时,同时按住Shift键可以快速修改单元格内容的次序。具体方法为:选定单元格,按下Shift键,移动鼠标指针至单元格边缘,直至出现拖放指针箭头“?&,然后进行拖放操作。上下拖拉时鼠标在单元格间边界处会变为一个水平“工&状标志,左右拖拉时会变为垂直“工&状标志,释放鼠标按钮完成操作后,单元格间的次序即发生了变化。这种简单的方法节省了几个剪切和粘贴或拖放操作,非常方便。 12.超越工作表保护的诀窍  如果你想使用一个保护了的工作表,但又不知道其口令,有办法吗?有。选定工作表,选择“编辑&&#92;“复制&、“粘贴&,将其拷贝到一个新的工作簿中(注意:一定要新工作簿),即可超越工作表保护。 13.巧用IF函数  (1).设有一工作表,C1单元格的计算公式为:=A1/B1,当A1、B1单元格没有输入数据时,C1单元格会出现“#DIV/0!”的错误信息。这不仅破坏了屏幕显示的美观,特别是在报表打印时出现“#DIV/0!”的信息更不是用户所希望的。此时,可用IF函数将C1单元格的计算公式更改为:=IF(B1=0,″″,A1/B1)。这样,只有当B1单元格的值是非零时,C1单元格的值才按A1/B1进行计算更新,从而有效地避免了上述情况的出现。  (2).设有C2单元格的计算公式为:=A2+B2,当A2、B2没有输入数值时,C2出现的结果是“0”,同样,利用IF函数把C2单元格的计算公式更改如下:=IF(AND(A2=″″,B2=″″),″″,A2+B2)。这样,如果A2与B2单元格均没有输入数值时,C2单元格就不进行A2+B2的计算更新,也就不会出现“0”值的提示。  (3).设C3单元格存放学生成绩的数据,D3单元格根据C3(学员成绩)情况给出相应的“及格”、“不及格”的信息。可用IF条件函数实现D3单元格的自动填充,D3的计算公式为:=IF(C3<60,″不及格″,″及格″=。 14.累加小技巧  我们在工作中常常需要在已有数值的单元格中再增加或减去另一个数。一般是在计算器中计算后再覆盖原有的数据。这样操作起来很不方便。这里有一个小技巧,可以有效地简化老式的工作过程。   (1).创建一个宏:  选择Excel选单下的“工具→宏→录制新宏”选项;  宏名为:MyMacro;  快捷键为:Ctrl+Shift+J(只要不和Excel本身的快捷键重名就行);  保存在:个人宏工作簿(可以在所有Excel工作簿中使用)。  (2).用鼠标选择“停止录入”工具栏中的方块,停止录入宏。  (3).选择Excel选单下的“工具→宏→Visual Basic编辑器”选项。  (4).在“Visual Basic编辑器”左上角的VBA Project中用鼠标双击VBAProject(Personal.xls)打开“模块→Module1”。  注意:你的模块可能不是Module1 ,也许是Module2、Module3。  (5).在右侧的代码窗口中将Personal.xls-Module1(Code)中的代码更改为:  Sub MyMacro( )  OldValue = Val(ActiveCell.Value)  InputValue = InputBox(“输入数值,负数前输入减号”,“小小计算器”)  ActiveCell.Value = Val(OldValue+InputValue)  End Sub  (6).关闭Visual Basic编辑器。  编辑完毕,你可以试试刚刚编辑的宏,按下Shift+Ctrl+J键,输入数值并按下“确定”键。(这段代码只提供了加减运算,借以抛砖引玉。)    15.怎样保护表格中的数据  假设要实现在合计项和小计项不能输入数据,由公式自动计算。  首先,输入文字及数字,在合计项F4至F7单元格中依次输入公式:=SUM (B4∶E4)、=SUM(B5∶E5)、=SUM(B6∶E6)、=SUM(B7∶E7),在小计项B8至F8单元格中依次输入公式:=SUM(B4∶B7)、=SUM(C4∶C7)、=SUM(D4∶D7)、=SUM(E4∶E7)、=SUM(F4∶F7)。在默认情况下,整个表格的单元格都是锁定的,但是,由于工作表没有被保护,因此锁定不起作用。  选取单元格A1∶F8,点击“格式→单元格”选单,选择“保护”选项,消除锁定复选框前的对勾,单击确定。然后,再选取单元格F4∶F7和B8∶F8,点击“格式→单元格”选单,选择“保护”选项,使锁定复选框选中,单击确定,这样,就把这些单元格锁定了。接着,点击“工具→保护→保护工作表”选单,这时,会要求你输入密码,输入两次相同的密码后,点击确定,工作表就被保护起来了,单元格的锁定也就生效了。今后,可以放心地输入数据而不必担心破坏公式。如果要修改公式,则点击“工具→保护→撤消保护工作表”选单,这时,会要求你输入密码,输入正确的密码后,就可任意修改公式了。 16.如何避免Excel中的错误信息在Excel中输入或编辑公式后,有可能不能正确计算出结果,Excel将显示一个错误信息,引起错误的原因并不都是由公式本身有错误产生的。下面我们将介绍五种在Excel中常出现的错误信息,以及如何纠正这些错误。  错误信息1—####  输入到单元格中的数据太长或单元格公式所产生的结果太大,在单元格中显示不下时,将在单元格中显示####。可以通过调整列标之间的边界来修改列的宽度。  如果对日期和时间做减法,请确认格式是否正确。Excel中的日期和时间必须为正值。如果日期或时间产生了负值,将在整个单元格中显示####。如果仍要显示这个数值,请单击“格式”菜单中的“单元格”命令,再单击“数字”选项卡,然后选定一个不是日期或时间的格式。  错误信息2—#DIV/0!  输入的公式中包含明显的除数0,例如-120/0,则会产生错误信息DIV/0!。  或在公式中除数使用了空单元格(当运算对象是空白单元格,Excel将此空值解释为零值)或包含零值单元格的单元格引用。解决办法是修改单元格引用,或者在用作除数的单元格中输入不为零的值。  错误信息3—#VALUE!  当使用不正确的参数或运算符时,或者当执行自动更正公式功能时不能更正公式,都将产生错误信息#VALUE!。  在需要数字或逻辑值时输入了文本,Excel不能将文本转换为正确的数据类型。这时应确认公式或函数所需的运算符或参数正确,并且公式引用的单元格中包含有效的数值。例如,单元格B3中有一个数字,而单元格B4包含文本,则公式=B3+B4将返回错误信息#VALUE!。  错误信息4—#NAME?  在公式中使用了Excel所不能识别的文本时将产生错误信息#NAME?。可以从以下几方面进行检查纠正错误:  (1)如果是使用了不存在的名称而产生这类错误,应确认使用的名称确实存在。在“插入”菜单中指向“名称”,再单击“定义”命令,如果所需名称没有被列出,请使用“定义”命令添加相应的名称。  (2)如果是名称,函数名拼写错误应修改拼写错误。  (3)确认公式中使用的所有区域引用都使用了冒号(:)。例如:SUM(A1:C10)。  注意将公式中的文本括在双引号中。  错误信息5— #NUM!  当公式或函数中使用了不正确的数字时将产生错误信息#NUM!。  要解决问题首先要确认函数中使用的参数类型正确。还有一种可能是由公式产生的数字太大或太小,Excel不能表示,如果是这种情况就要修改公式,使其结果在-1×1307之间。
其他类似问题
9人觉得有用
excel的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁}

我要回帖

更多关于 excel vba基础入门 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信