如何用vba插入公式(vba replace函数)?如果你对这个不了解,来看看!
利用EXCEL制作会动的时钟,下面是是EK呀给大家的分享,一起来看看。
如何用vba插入公式
好久的没有更新了,今天准备给大家分享一个利用EXCEL制作时钟的案例。
这里,很多小伙伴们可能会说,EXCEL可以做时钟吗?答案当然是可以的。下面,EK就慢慢给大家分享制作过程。
首先我们看一下案例效果图:
案例里面使用了VBA和图表。
第一步,我们新建一个“钟表.xlsm”文件(可以使用VBA)。
第二步,准备辅助数据。A3:F123中的数据。
第三步,在H1中添加公式:="时间:" & TEXT(NOW(),"hh:mm:ss")
G4:=IF(HOUR(NOW())>12,(HOUR(NOW())-12+MINUTE(NOW())/60)*30,(HOUR(NOW())+MINUTE(NOW())/60)*30)
表示取当前时间对应小时的刻度。
G5:1
小时指针的宽度
G6:=360-G4-G5
H4:=MINUTE(NOW())*6
H5:0.5
H6:=360-H4-H5
I4:=SECOND(NOW())*6
I5:0
I6:=360-I4-I5
第四步,将B4:F123选中,点击【插入】-》【圆环图】。操作如下图:
第五步,处理圆环图。
<1> 将内圈2个小圆环图设置为无填充,无实线。这里是为了区分钟表的时针、分针、秒针的长度所做的辅助圆环。等下小伙伴们就会明白为什么这么做。
<2> 设置外圈三个圆环的格式。最外圈如下图:
第三个内圈设置无填充和无实线,次外圈添加数据标签。
设置第2个内圈的标签格式,同时设置为无填充和无线条,如下:
添加时分秒数据进入图表中,首先添加时针。操作如下,为了演示方便我先将时针的指针大小设置为20.
同理,我们可以将分针和秒针也放进图标中,这里,EK就简单略过,直接实现了。小伙伴们可以按照时针的输入方法进行放入。图10 为实现后的效果:
我们为单元格H1添加公式:="时间:" & TEXT(NOW(),"hh:mm:ss") 并且为当前图表添加标题,标题内容为H1(当前时间)中的内容:
第六步,打开ALT+F11组合键,也可以点击【开发工具】-》【查看代码】。添加一个模块。添加如下代码:
Sub StartTimer()
Sheet2.Range("h1") = "=""时间:"" & TEXT(NOW(),""hh:mm:ss"")"
Application.OnTime Now + TimeValue("00:00:01"), "StartTimer"
End Sub
Sub EndTimer()
On Error Resume Next
Application.OnTime Now + TimeValue("00:00:01"), "StartTimer", , False
End Sub
如下图所示:
插入两个按钮-【开始时钟】【停止时钟】:指定宏分别为-》StartTimer和-》EndTimer:
咱们来看一下实现效果,
我们对时钟界面进行稍微修正美化一下,就可以看到图1 的效果了。
最后,感谢小伙伴们的观看,我是EK。如果上述内容能够帮助到你们,希望你们能点赞,关注,评论,转发,你们不清楚的地方我会尽力为大家解答,谢谢大家的支持。我会给大家带来更多关于EXCEL的小技巧。
vba replace函数
很多Excel VBA文章和图书都介绍过如何优化VBA代码,使代码运行得更快。一些使Excel VBA代码运行更快的技术和技巧,与大家分享。鉴于VBA与VB的关系,资料中绝大多数技巧对于VBA同样适用。其中的大多数代码都是亲自在VBA中测试过的,某些地方加了一点注解。
1.妙用Replace函数替代字符串连接操作符&
你大概不知道Replace函数还能这么用吧?比如下面的语句:
MsgBox "Disk not ready." & vbCr & vbCr & _ "Please check that the diskette is in the drive" & vbCr & _ "and that the drive's door is closed.“可以看出,为了显示完整的字符串含义,要将可打印字符与非打印字符(比如:回车符vbCr)用&符号连接在一起.结果是:长长的字符连接串变得难于阅读.但是,使用Replace函数,可以巧妙地解决这个问题.方法就是:将非打印字符以字符串中不出现的一个可打印字符表示,这样完整地写出整个字符串,然后使用Replace函数替换那个特别的打印字符为非打印字符(比如:回车符vbCr).代码如下:
MsgBox Replace("Disk not ready.§§Please check that the diskette is in the " _ & "drive§and that the drive's door is closed.", "§", vbCr)2.固定长度字符串数组:赋值快,释放快!
固定长度字符串的处理速度通常慢于可变长度字符串,这是因为所有的VB字符串函数和命令只能识别可变长度字符串.因此,所有固定长度字符串必然被转换为可变长度字符串.
但是,由于固定长度字符串数组占据着一块连续的内存区域,因此在被分配以及释放时,速度明显快于可变长度的数组.比如:在一个Pentium 233MHz机器上,对于一个固定长度为100,000的数组,给其中30个位置分配数值,大约只花费半秒种的时间.而如果是可变长度的数组,同样的操作要耗费8秒之多!后者的删除操作耗时大约0.35秒,但固定长度的数组几乎可以立即"毙命"!如果应用程序中涉及到这么大的一个数组操作,选择固定长度方式数组绝对是确定无疑的了,无论是分配数值,还是释放操作,都可以风驰电掣般完成.
3.创建任意长度重复字符串的简洁方法
String$函数只能重复复制单字符(99%的朋友都知道吧),当需要重复复制2个或多个字符时,就需要一个循环.看起来是否很麻烦?
然而,使用以下的函数就能解决这个问题.基本思路是:建立一个空格字符串,其长度为要重复复制的数目,然后替换每一个空格为要复制的字符串:
Function ReplicateString(Source As String, Times As Long) As String ReplicateString = Replace$(Space$(Times), " ", Source) End Function但是请注意:根据字符串的长度以及重复的数目,这个方法也许比传统的循环方法要慢些.
4.处理字符串中的字符:字节数组法
当要处理字符串中的每一个字符时,可以将字符串赋值到一个byte数组中进行操作.要记住:每一个Unicode字符对应双字节.
这种方法通常要快许多,因为节省了大量的Mid$函数操作以及大量的临时字符串空间.下面的代码是统计字符串中空格数目的最快方法
Dim b() as Byte, count As Integer b() = source$ For i = 0 to UBound(b) Step LenB("A") If b(i) = 32 Then count = count + 1 Next请注意上面代码中LenB()函数的特殊用法:在VB4(32位)、VB5和VB6中它返回数值2, 在VB4(16位)中返回数值1.因此,我们就可以使用同一代码段,而无需#If编译指令.
5.无闪烁地快速附加字符串到textbox控件
附加文本到TextBox或者RichTextBox控件的通常方法是在当前内容上连接上新的字符串:
Text1.Text = Text1.Text & newString
但还有一个更快的方法,并且会减少连接操作的闪烁感,代码如下:
Text1.SelStart = Len(Text1.Text) Text1.SelText = newString
关于带有特定目的的VBA方法的更多的信息,您可参见VBA帮助系统相关主题。
结语
当然,代码优化可能不是绝对必要的,这依赖于您要做的工作……如果您正好编写了一个快速且简短的或者是一次性使用且与速度和/或简洁要求无关的代码,您就不需要优化代码。
但另一方面,如果您处理一个带有很多数据、工作簿、工作表等大的工程,再次检查您第一次编写好的代码,看看是否您的代码需要优化,而这样做总是值得的。
最终,您将养成编写代码的好习惯,将会使您的代码更简洁、运行更快速、并且容易为您自已和他人阅读和调试。同时,由于您的代码简洁,因而输入更快,工作效率更高。