日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

vba的一些小陷阱

發布時間:2023/12/15 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 vba的一些小陷阱 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近幫朋友寫了個宏,但是因為好久沒有用過vba了(話說我好像上次用vba寫了個小功能還是05年的事情。。),所以基本上可以算是從零開始,邊學邊做,以賽代練了。
因為對語言不熟悉,一個小小的功能居然花了三天。。。不過還好,后面如果再有什么活兒的話應該就相對熟練了~
下面對這個小活兒里面碰到的陷阱做下梳理:

1.最最讓我郁悶的:vba里面的數組定義

Dim arr_data(10) As Variant

正常的語言,這里的arr_data都是一個10個要素的數組??墒侨欢?#xff01;vba里面,這個arr_data有!11!個!要!素!
也怪我想當然了。。被這個數組定義坑了好久。。
所以如果你要定義一個10個要素的數組,那么有以下幾種方法:

Dim arr(9) Dim arr(1 To 10) Dim arr arr=array(a,b,c,d,e,f,g,h,i,j)

當然還有其他很多方法,具體可以參照這篇:
VBA數組完全教程

2.子函數的定義
我自己用的子函數定義是這樣的(就是個改變日期格式的小函數):

Function serviceDate(year, month, day)serviceDate = year & "/" & month & "/" & day End Function

這里面,函數體里面的serviceDate和函數名serviceDate是相同的,其實就是函數的返回值。
使用的時候要這樣:

date_ServiceDate = serviceDate(year(date_OrgDate), month(date_OrgDate), day(date_OrgDate))

3.數組的個數取得(又是數組。。。)
我沒找到直接取得數組元素個數的方法,所以只能通過以下方法計算:

array_num = UBound(arr) - LBound(arr) + 1

其中,UBound是數組的最大下標,LBound是數組的最小下標(一般是1)。雖然LBound一般就是0,但是還是減一下比較讓人放心,誰沒個萬一呢~
4.Instr的使用
這個純屬我自己粗心。本來想在一個文字列里面查找字符出現的次數,在度娘上隨便搜了下就用了Instr。
可是使用結果總是有問題。
比如在”ABCDEFGABCDEFG”文字列中查找”C”,得到的結果是3,而查找”B”,得到的結果是2。我就迷茫了,為啥B是對的C是錯的捏?
沒頭緒了快2個小時才發現,Instr返回的結果只是找到的第一個字符在文字列中的位置。。。額。。。生命啊。。。就這么被粗心白白的浪費了。。。T.T
錯誤找到了,可我的問題沒解決啊,我想要知道在文字列中字符出現了多少次,怎么辦呢?后來我用了個很笨的辦法:用Split函數把文字列按查找的字符分隔成數組,然后統計數組個數

Dim arr arr = Split("ABCDEFGABCDEFG", "B") B_num = comma_num = UBound(arr) - LBound(arr) + 1

就醬。。。誰要是有好辦法麻煩留言和我說一聲。。謝謝~~

姑且就這幾個問題吧~以了個上~

總結

以上是生活随笔為你收集整理的vba的一些小陷阱的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。