- 浏览: 894967 次
- 性别:
- 来自: 大连
文章分类
- 全部博客 (319)
- Thinking / 反思 (27)
- 我读的技术类图书 (3)
- 我读的非技术图书 (3)
- Java & Groovy (55)
- Ruby/Rails (9)
- Python (10)
- C/C++ (14)
- C# & .net (9)
- 互联网相关技术 (6)
- Database (6)
- Unix/Linux (6)
- WindowsDev (21)
- 工具使用 / Tips (62)
- 编程技术杂谈/咨讯 (6)
- 软工 / 敏捷 / 模式 (6)
- 易筋经 / 各种内功 (3)
- 充电 / 他学科知识 (6)
- 外语学习 (16)
- 我和宝宝的甜蜜生活 (24)
- 八卦 (3)
- 健康 (0)
- 无类别 (0)
- mTogether (4)
- 一页纸 (3)
- SAP (7)
- baby (2)
- abap (2)
- temp (1)
- network (1)
- 生活 (1)
最新评论
-
daliang1215:
收藏一下,好东西。 xp 的快捷键用的非常爽,到win7缺没有 ...
Windows7: 右键任务栏上的一个窗口, 用快捷键c关闭它 -
Alice南京:
感谢
Java GC 监视方法与工具 -
wjason:
今天在excel 2010上面写了一些代码,果然lookup有 ...
Excel 公式: 根据一个单元格的用户输入值, 自动设置另一个单元格的值 -
wjason:
因式分解:http://zh.wikipedia.org/wi ...
教孩子学编程: 数学题1 -
bbls:
不错 找了好久了
VS2010: 在Solution Explorer中,自动关联当前正在编辑的文件
我以前的VBA都是满足我自己的一个小小的需求的,他们通常都比较简单,属于自娱自乐型的,都很简单,今天终于写了一个稍微复杂一点的, 程序有两个bug, 在写这篇博客之前, 我刚花费两个小时把它们解决掉, 趁着还没忘, 对吸取到的一些经验教训加以总结.
下面是部分excel代码,代码后面是总结, 总结的地方已使用"- == BUG == -"标出:
' -- == BUG == -- ' use this option, the interpreter will help you~~~ ' Option Explicit 'used in step 01 Dim st Dim et Dim maxrow Dim count 'used in step 02 Dim waste Private Sub CommandButton1_Click() st = DateValue("2008-08-29") et = DateValue("2008-9-06") maxrow = 61000 count = 1 'MsgBox DateValue(Cells(2, 1)) Call processSheet(Sheet2) Call processSheet(Sheet3) Call processSheet(Sheet4) MsgBox (count) End Sub Private Sub processSheet(sheet) sheet.Activate For i = 2 To maxrow If sheet.Cells(i, 1) <> "" Then t = DateValue(sheet.Cells(i, 1)) If t >= st And t <= et Then count = count + 1 sheet.Rows(i).Copy Sheet5.Rows(count).Insert Shift:=xlDown End If End If Next 'MsgBox (Cells(2, 1)) 'MsgBox (count) End Sub Private Sub CommandButton2_Click() For i = 2 To 5815 d = DateValue(Cells(i, 1)) t = TimeValue(Cells(i, 1)) Call findPos(d, t, Cells(i, 2), Cells(i, 3)) Cells(i, 14) = waste If waste = Cells(i, 13) Then Cells(i, 15) = "Yes" Else Cells(i, 15) = "NO" End If Next End Sub Sub findPos(d, t, asset, serial) 'Sheet5.Select waste = "-" For i = 2 To 60000 'asert date is not null If Sheet5.Cells(i, 1) = "" Then Exit For End If 'find waste box td = DateValue(Sheet5.Cells(i, 1)) tt = TimeValue(Sheet5.Cells(i, 1)) diff = DateDiff("n", t, tt) If d = td And (diff > -10 And diff < 10) And asset = Sheet5.Cells(i, 2) And serial = Sheet5.Cells(i, 3) Then waste = Sheet5.Cells(i, 14) Exit For End If Next 'Sheet1.Select End Sub Private Sub CommandButton3_Click() For i = 2 To 5815 If "NO" = Cells(i, 15) Then d = DateValue(Cells(i, 1)) t = TimeValue(Cells(i, 1)) Cells(i, 1).Select Call findFuzzy(d, t, Cells(i, 2), Cells(i, 3)) Cells(i, 14) = waste If waste = Cells(i, 13) Then Cells(i, 15) = "Yes" Else Cells(i, 15) = "NO" End If End If Next End Sub Sub findFuzzy(d, t, asset, serial) Min = DateValue("2099-08-29") mintime = TimeValue("23:59:59") mintimebeh = TimeValue("23:59:59") waste = "-" flag = True For i = 2 To 60000 'asert date is not null If Sheet5.Cells(i, 1) = "" Then flag = False Exit For End If 'judge wheather is the same printer If asset = Sheet5.Cells(i, 2) And serial = Sheet5.Cells(i, 3) Then 'find waste box td = DateValue(Sheet5.Cells(i, 1)) tt = TimeValue(Sheet5.Cells(i, 1)) diff = DateDiff("n", t, tt) 'record the min date before last day If DateDiff("d", d, td) = 1 Then If tt < mintimebeh Then mintimebeh = tt ' -- == BUG == -- i spell mpbeh as mpben by mistake ' -- == BUG == -- pay more attantion on the spelling of the var mpbeh = i End If End If 'record the min value today If DateDiff("d", d, td) = 0 Then If tt > t And tt < mintime Then mintime = tt mp = i End If End If 'end judge End If Next If mintime <> TimeValue("23:59:59") Then ' -- == BUG == -- waste = Cells(mp, 14) ' -- == BUG == -- when use the cells that are not in the same sheet of the button ,you must use "Sheet5" to modify it. waste = Sheet5.Cells(mp, 14) Else waste = Sheet5.Cells(mpbeh, 14) End If 'Sheet1.Select End Sub Private Sub CommandButton4_Click() d1 = DateValue("2008-08-29") d2 = DateValue("2008-7-06") MsgBox DateDiff("d", d1, d2) End Sub
总结两点:
1. 第一个bug的原因是我误将mpbeh拼写成了mpben,以至于我没有得到我想要的值, 该死的键盘设计的有问题, h & n靠的那么近, 还张得那么像, 在一堆字符里错误的出现通常很难辨识,尤其在脑袋大的时候.
为此MrLiu建议使用:"Option Explicit"来减少,变量拼写的错误, 恩,不错,thx
2. 在引用了不和空间在一个sheet里面的cells的时候,没有使用sheet进行限定.
虽然通篇我都很小心的注意了这一点, 但我还是漏掉了一处, 为此我也付出了应有的代价. 以后只有更加留神,或者写vba的时候尽量避免这种情况出现. 毕竟你想我刚开始那样直接写上一个Cells, 他在解释器看来是再合法不过的了, 虽然你可能并不想这么做.
另:玩具一样的例子中学到的东西也有限, 如果我有一个机会出一个实际题目, 让自己或者别人通过这个例子强化一下vba, 我会出什么? 刚才想了一下这个问题, 一个答案是做一个:"SQL学习环境", 毕竟他和数据库还都挺关系的. 还有别的更好的答案吗?
发表评论
-
批量替换,一个文件夹中, 所有文件中的某个特定字符串(For Lync Update)
2015-10-10 10:31 1956因为Office升级, 需要对所有的脚本内容, 做如下字符 ... -
Snagit: "在截图中自动添加时间戳"功能的开启与关闭
2015-07-21 16:27 1613Snagit有这样一个功能 - "在截图中自动添 ... -
网易公开课 - 让我们教孩子编码吧
2014-01-05 15:44 1355看了这个网易公开课. http://v.163.com/m ... -
Alias for Command Parameter for Bash
2013-12-30 12:25 1441bash的alias(别名)不直接支持$1,$2,$3,这 ... -
grep tools on windows
2013-12-28 19:52 1360最开始一直使用这个工具. FileLocator Lit ... -
VIM: 编写自己的“高亮显示syntax文件"
2013-10-13 08:52 942The following link is very use ... -
AutoHotKey: 从资源管理器中,获取被选择的文件的路径(及文件夹)的API
2013-10-12 11:49 7136从下面的URL中,获得了这个Library. Ge ... -
Everything Command Line Option
2013-09-14 10:56 1270Run "everything --help&q ... -
Links
2013-07-27 21:03 1145Reference Card DZone refc ... -
Wireshark Filters
2013-06-23 16:18 1701Wireshark是一款非常好用的网络抓包工具: htt ... -
在linux的VMware虚拟机中, 无法访问VMware的Shared Folders
2013-06-11 21:41 2412在一个VMware虚拟机的Setting中可以设置Shar ... -
Excel条件格式: 根据某一列单元格的值, highlight整行
2013-06-11 10:43 13792[追记 about excel Conditional F ... -
VIM: 查看log文件时的一些技巧, 关于如何展示搜索结果
2013-05-25 08:21 2250最近的学习工作中, 查看log文件需求特别多, 于是我对 ... -
Vim: Windows7中, 通过右键菜单加快捷键v, 快速启动vim
2013-05-22 14:39 3627在xp时代, 安装了vim之 ... -
Windows7: 右键任务栏上的一个窗口, 用快捷键c关闭它
2013-05-10 21:34 3422右键任务栏上的一个窗口, 在弹出菜单之后, 按下字母c, ... -
Windows 7: 单显示器, 窗口布局快捷键
2013-05-09 17:24 1700使用但显示器, 尤其是使用笔记本的用户, 应该有过这样的感 ... -
下述PDF文件无法保存解决办法: There was a problem reading this document(135)
2013-04-15 08:38 4878手头有一个PDF文档, 是加密的. 所以无法对他进行编辑和 ... -
Windows命令行中, 类似于linux的history命令
2012-10-31 09:43 7941在写这篇博客的时候: ImageMagick: 图像处理工具包 ... -
VS2010: 在Solution Explorer中,自动关联当前正在编辑的文件
2012-09-01 14:03 2876在Eclipse中有这样的功能:Link with edit ... -
AutoHotkey:使用快捷键,在双显示器间,移动最大化的窗口
2012-07-11 11:09 4486无意间看了我以前写的一篇博客:VC++: 在双显示器间,移动最 ...
相关推荐
3. **使用第三方工具**: "隐藏ExcelVBA.exe"可能就是这样一个工具,它可能通过某种方式自动隐藏或加密VBA模块,提供更高级的保护。使用此类工具时需要注意安全性和兼容性,确保它们不会破坏Excel文件或引入恶意软件...
类似地,`Workbooks.Open("PDF的路径")`是Excel VBA中的一个方法,通常用于打开Excel工作簿,但如果你安装了支持的ActiveX控件,它也可以用来打开PDF文件。 下面是一个示例脚本,展示了如何结合使用`CreateObject`...
总结起来,通过Excel VBA和Windows API,我们可以轻松地获取电脑硬盘的序列号和其他相关信息。这种技术在开发特定的Excel应用程序时非常有用,尤其是在需要识别或验证硬件设备的场景下。不过,要注意的是,访问这些...
Excel VBA为用户提供了一个强大的工具集,不仅能够极大地提高工作效率,还能够实现高度定制化的应用程序开发。通过本课程的学习,学员将能够掌握Excel VBA的基础知识,并能够在实际工作中灵活运用这些技能来解决复杂...
附录提供了一个详细的VBA对象模型图,帮助读者理解VBA环境中不同对象之间的关系和层次结构。 通过阅读这本书,读者不仅可以掌握Excel VBA的基本语法,还能学会如何利用VBA进行更复杂的数据操作和自动化任务,提升...
Excel对象模型是VBA在Excel中的核心组件,它是一个层次结构的类库,包含了各种对象、属性、方法和事件。理解这个模型是学习VBA的关键。以下是一些主要的Excel对象: 1. **Application对象**:代表整个Excel应用程序...
- **Function函数**: 可以返回一个值的过程,用于计算结果。 - **Property属性过程**: 定义对象的属性。 - **Event事件过程**: 处理对象触发的事件。 **1.12 内部函数** - **测试函数**: 如`IsNumeric`、`IsEmpty`...
总结来说,ExcelVBA在交通工程质量监督管理系统中扮演着不可或缺的角色,通过自动化数据处理,提高数据管理的质量和效率,使得复杂的数据管理工作变得更为便捷和可靠。同时,对VBA的学习和掌握,对于提升工作效率和...
1. **设置图表对象**:首先,我们需要在VBA编辑器中创建一个ChartObject,这代表了一个Excel图表。可以使用`Worksheets("Sheet1").ChartObjects.Add`方法来添加一个新的图表对象到指定的工作表上。 2. **选择图表...
总结来说,“水晶精灵”这款游戏不仅是娱乐的工具,更是一个学习Excel VBA的理想平台。它以一种直观且有趣的方式展示了VBA的潜力,鼓励着人们去探索编程的乐趣,提升技术素养。无论你是初学者还是有经验的开发者,都...
本文档的标签为"ExcelVBA 排课表显示实”,表明本文档的内容是关于使用 Excel VBA 编程语言来实现排课表的显示实例,并提供了相关的标签来帮助读者快速了解文档的内容。 部分内容解释: 本文档的部分内容提供了一个...
本文将详细介绍Excel VBA中的常用对象,并通过一个具体的实例——数据汇总功能的实现——来展示如何利用这些对象。 #### 二、Excel VBA的常用对象 在Excel VBA中,对象是程序的核心组成部分。理解这些对象及其属性...
通过以上步骤,我们可以轻松地使用Excel VBA创建一个简单的登录界面,从而实现对敏感数据的保护。这对于希望提高数据安全性的初学者来说是一个很好的实践项目。当然,这只是VBA强大功能的冰山一角,深入学习VBA将为...
实用的EXCELVBA编程大全总结.doc
在这个“Excel VBA实现的最全的单位换算-VBA源码”的压缩包中,你将找到一个利用VBA编写的单位换算程序,它覆盖了各种常见的物理量单位,如长度、重量、体积、温度、速度等。通过学习和理解这个源码,你可以提升自己...
根据提供的Excel VBA代码,我们可以总结出以下关键知识点: ### 关键知识点一:宏操作流程 这段宏的主要目的是实现一个自定义的“另存为”功能,并在保存新工作簿后,删除原工作簿中的某些元素(如指定的工作表和...
在使用VB/VBA编程语言操作Excel时,经常会遇到一个令人头疼的问题:尽管已经执行了`xlapp.Quit` 和 `Set xlapp = Nothing`来关闭Excel应用并释放相关资源,但Excel进程仍然在任务管理器中持续运行,无法完全关闭。...