VBA实验
文章平均质量分 50
VBA学习
奔跑的犀牛先生
自学代码的中年大叔,人不痴狂枉少年
展开
-
EXCEL的各种“空”的区别:blank,““ , 0 ,以及 VBA里的各种空值:empty,null,nothing 等
EXCEL的真正空值是 blank,只能用=isblank() 来判断但是EXCEL里真正用到 blank的地方很少。大多数情况下只需要判断 if(A1="",) 即可。另外EXCEL的内置函数一般不能返回空值,EXCEL文档这里不好编辑,我贴了我自己文档的图片如下总结的结论如下凡是为blank的地方,EXCEL也认为是可以被认为为""。反之不成立就像文本型的数字,虽然类型是文本,但是可以直接当文本计算。也是反之不成立函数无法返回真正的blank,但是可以返回""比如EXCEL的直接.原创 2020-12-20 11:57:55 · 33092 阅读 · 2 评论 -
VBA 不能给数组赋值,其实只是不能给静态数组整体赋值
VBA 不能给数组赋值,其实只是不能给静态数组整体赋值原创 2019-12-23 18:15:31 · 6223 阅读 · 2 评论 -
EXCEL的密码相关
EXCEL 工作簿保护原创 2022-07-19 16:02:47 · 313 阅读 · 0 评论 -
EXCEL公式引用得是空的单元格,但是却不返回空““,而是返回0是怎么回事? 怎么处理呢?
1问题:如果公式引用了空单元格,但是却返回了0,是怎么回事?2原因我猜想,EXCEL的函数,函数必须有返回值,EXCEL的返回值将空值处理为0返回了=INDEX(A1:B3,1,1) =OFFSET(A1,1,1)3解决用if()判断下就可以 =IF(INDEX(A1:B3,1,1)="","",INDEX(A1:B3,1,1)) =IF(OFFSET(A1,1,1)="","",OFFSET(A1,1,1))...原创 2022-03-10 11:25:03 · 17132 阅读 · 2 评论 -
EXCEL2019新增的几个很有用的函数
concat() 升级版本的 concatenate() textjoin() 升级版本的 phonetic() ifs() 升级版的if() 再也不用嵌套了 maxifs() 省得筛选后再比较了,真的好用! minifs() switch() 专门针对枚举用得?我记得 max() min() 还有 large() small()不知道新函数有没有这几个...原创 2022-03-10 10:45:19 · 719 阅读 · 1 评论 -
VBA的3种错误处理方式 on error goto 0 /-1 , on error resume next , on error goto index,是抛出异常,还是忽略报错,还是进行错误捕捉?
VBA的错误捕捉和 错误处理语句on error gotoon error resume nextif thenend ifif thenend ifif thenend if原创 2022-02-23 16:03:30 · 12579 阅读 · 0 评论 -
VBA,userform的控件 controls,如何禁用一些image/commandbutton 处理例子
备注以下都用 controls() controls() 包含userform的下级对象,labels, commandbuttons 等等处理办法1: controls().visible=false这样处理后,那个地方会隐藏,但是感觉很怪。处理办法2: label.enabled=false这样处理后,那个地方会无法点击。坏处是同时连 controltiptext 都不再生效,但是可以同时换图片标识不可用(注意刷新问题)'同时要处理包裹显示 ...原创 2022-02-22 11:09:51 · 1115 阅读 · 0 评论 -
VBA, 窗体userform 互相调用问题: 第2次调用1个userform会导致其无法初始化的问题 和解决办法
1 重复load userform ,再打开userform2,3会不初始化也无法关闭?改成 userform.show 0/vbmodeless 就好1.1 有问题的情况用userform1 打开userform2 或userform3, 同时关闭userform1 然后关闭userform2 或userform3, 后回到userform1 第2次打开userform2 /3 就BUG'---以下都是----userform1-----的内容-----------...原创 2022-02-21 19:57:19 · 3366 阅读 · 0 评论 -
VBA的userform 相关的基本事件,方法和属性,以及 userform.name 使用规范备忘
userform的事件userform的方法userform的属性原创 2022-02-21 14:54:31 · 10830 阅读 · 0 评论 -
未完成 VBA 关于 index() match() 查到表里空值的处理
Dim dict2 As Object Set dict2 = CreateObject("scripting.dictionary") Dim arr7() Dim arr8() Dim arr9() h0 = Application.Match("skillNum", Worksheets("PetExchange").Range("1:1"), 0) h1 = Application.Match(1, Worksh...原创 2022-02-21 14:28:07 · 934 阅读 · 0 评论 -
VBA 在循环里多次redim动态数组一定注意,需要加preserve
1 错误例子 For i = 1 To count_new Randomize p2 = Int(1 + 10 * Rnd) Debug.Print "第" & i & "次随到的p2=" & p2 ReDim arr7(1 To i) '这里没写preserve 害的好惨!! arr7(i) = p2 D...原创 2022-02-21 10:14:17 · 7600 阅读 · 1 评论 -
VBA,未完成--s数组和字典,用for each 循环要注意的问题
K = 1 For Each i In dict2.keys() ReDim Preserve arr8(1 To K) Debug.Print "k=" & K arr8(K) = i Debug.Print "arr8(" & K & ")=" & arr8(K) 'i错误作为了index 又作为元素,卡了这么久 K = K + 1 Next...原创 2022-02-21 10:10:51 · 680 阅读 · 0 评论 -
未完成--VBA---取不重复的随机数几个的一个案例
Function eeee111草稿() '这不行啊,还得去重随机 *权重*参数就行,这个好! 随机整数,小数,和不放回 ,之后改把,这版先做简单得''' 合成得技能得去重啊,加参数标记也行!!!现在这样不去重肯定不行!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!''' 循环检查字典也许,字典key不够长就重新随到为止?效率不够高?'每次随1个判断1次,是否和现有的重复,效率可能还可以 Dim dict2 A...原创 2022-02-21 09:47:02 · 343 阅读 · 0 评论 -
未完成---为空得判断 和运算
1 为空得判断 用len()可以 If Len(p01) = 0 Then 'p07 = ""这个不行 IsNull(p01) 也不行?2 p1*1 p1+0也不行3 但是,写转得if 函数太多了太傻4 暂时加on error resume next 暂时解决1' If Len(p01) = 0 Then 'p07 = ""这个不行 IsNull(p01) 也不行?' p01 = 0' End If'' I...原创 2022-02-18 16:12:20 · 3036 阅读 · 0 评论 -
VBA 数组合并 和 用dict 去重数组
Function merge_skill1() Dim dict1 As Object Set dict1 = CreateObject("scripting.dictionary") Dim arr1() Dim arr2() Dim arr3() Dim arr4() 'array1 array2 '先来技能数量和id g20 = Application.Match("技能数量", Worksheets("petbag")...原创 2022-02-18 15:55:28 · 2485 阅读 · 0 评论 -
VBA 5个常见错误,重要 变量 if得
' Debug.Print "location1=" & location1 If location1 = "l" Then ' location1 = l 这个会造成大错,得是字符串内容 l是变量,无定义得空变量 Worksheets("petbag").Cells(1, 8) = index5 ElseIf location1 = "r" The...原创 2022-02-18 15:08:48 · 779 阅读 · 0 评论 -
未完成---让某些image选项,显示为不可用 不可选
r5 = Worksheets("petbag").Range("a999").End(xlUp).Row For i = 1 To r5 - 2 If i = s01 Or i = s02 Then Controls("image" & i + 1).Enabled = False Controls("image" & i + 1).Picture = LoadPicture(...原创 2022-02-18 14:34:30 · 365 阅读 · 0 评论 -
未完成--VBA---多个userform之间封闭,无法传递变量,很蛋疼
下面得代码针对form2的老界面,也不用删,现在改到通用界面上做不到'最好和宠物包裹写一样,现在两套,看看处理逻辑差异多大,另外,必须回到本form写,其他form传不过去'这样应该也不行 UserForm1.Controls("image" & i + 10).Picture() = LoadPicture(ThisWorkbook.Path & "\res\skill\" & icon3 & ".jpg")下面得代码实验过了还是不行1...原创 2022-02-17 16:47:33 · 387 阅读 · 0 评论 -
未完成--如何设置multipage的默认页面,或切换
1 正确语法MultiPage3.Value = 2 UserForm1.MultiPage2.Value = 22 我自己试过的错误语法MultiPage3.pages(2).atctive这样都不行Private Sub CommandButton12_Click() Unload UserForm2 Load UserForm1 UserForm1.Show UserForm1.Captio...原创 2022-02-17 15:28:13 · 1380 阅读 · 1 评论 -
userform 之间怎么判断其他界面是否打开着?
用公共变量也不行,不同的userform之间无法传递 public 变量!Private Sub UserForm_Terminate() userform2_s = 0 Debug.Print "userform2_s= " & userform2_sEnd Sub暂时只能每次切换关闭了。。。。其他直接判断界面是否关闭的系统函数没有?需要自己写自定义函数?...原创 2022-02-17 11:29:02 · 307 阅读 · 0 评论 -
未完成 --隐藏 worksheet 必须留一个。隐藏整个workbook
Private Sub CommandButton3_Click() If Windows(ThisWorkbook.Name).Visible = False Then Windows(ThisWorkbook.Name).Visible = True Else Windows(ThisWorkbook.Name).Visible = False End If End Sub原创 2022-02-17 11:05:01 · 251 阅读 · 0 评论 -
如果一调用userform 就报错?可能是3种问题:1写错,2初始化错误,3 对应表未打开等等
如果 UserForm1. show都报错Private Sub Image1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) Load UserForm1 UserForm1.ShowEnd Sub而换一个 UserForm3. show却可以这种一般是,useform1 名称错误再就是这个页面 Us...原创 2022-02-17 11:02:35 · 1229 阅读 · 0 评论 -
VBA,2个关联变量不如简化为一个自变量,另一个作为因变量比如等级 level 和经验 exp
'直接加等级,感觉不太好' level_now = level_now + 1' n2 = Application.Match("当前等级", Worksheets("petbag").Range("2:2"), 0)' Worksheets("petbag").Cells(index1 + 2, n2) = level_now' Call get_levelup(0)'换个思路,等级小于最大等级前提下,加一整级的经验也可以-----------------'等...原创 2022-02-16 18:25:43 · 225 阅读 · 0 评论 -
未完成--- form里各种延时写法的效果比较
实际使用,这个Function delay1(t As Single) 最好用Private Declare PtrSafe Function MessageBoxTimeout Lib "user32" Alias "MessageBoxTimeoutA" (ByVal hwnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal wType As Long, ByVal wlange As Long, ByVal..原创 2022-02-16 11:52:57 · 311 阅读 · 0 评论 -
未完成--- 语句,有返回值得函数,表达式等等区分
未完成 'l1 语句 l1= 非语句 application.match 非语句 而debug.print 语句-可以无返回值原创 2022-02-16 11:34:20 · 164 阅读 · 0 评论 -
未完成--表单初始化
'初始化有两种意思,一种是真初始化变量等。另一种只是初始化表单,开始加载等待,还分开词汇吧'非初始化,是初始加载,取得本轮内的gcount层次1 ,表单/uI 显示初始化层次2: 读取初始化 Label1.Caption = "id= " & id3 Label2.Caption = name3 Select Case type3 Case Is = 1 type3ch = "Battle Pet" ...原创 2022-02-15 15:55:53 · 315 阅读 · 0 评论 -
EXCEL和VBA 中的分数
Label27.Caption = Abs(z) & " / " & m 'VBA没有分数,这里只能用文本处理原创 2022-02-15 15:42:54 · 498 阅读 · 0 评论 -
未完成 --On Error Resume Next 和 IsError(Application.Match()报错等
On Error Resume Next id2 = Application.index(Worksheets("petbag").Columns(a2), Application.Match(j, Worksheets("petbag").Columns(a1), 0)) icon2 = Application.index(Worksheets("pet1").Columns(b2), Application.Match(id2, Worksheets("pet1...原创 2022-02-15 11:39:04 · 316 阅读 · 0 评论 -
VBA的 userform 的controls的背景样式 backstyle, 无内容时可以隐藏本控件的效果
1 BackStyle的设置Controls("label" & j).BackStyle = 1 '默认,这样这个控件会有单独的颜色 Controls("label" & j).BackStyle = 0 ' 选择了这个,当控件 image label 等没内容时会看不见,隐藏的效果MS的官方解释2 例子 Controls("image" & j + 1).Picture() = LoadPicture(ThisWorkboo...原创 2022-02-15 11:30:53 · 387 阅读 · 0 评论 -
未完成 一个界面的存储和显示分开 例子
1'bag的存储和显示应该分开,判断下空的就行,还得顺order,每次改序号, 这样显示和存储次序不绑定,还能兼容删除得情况1 之前老版本直接就是顺次从 a 列 往后加但是没考虑过几种情况 中间的ID可能删除, 一旦删除后,序号就不对了,需要重新顺一遍,因为可能成为3 5 这样的循环,肯定不对而且,显示,也应该是顺order后,往前排,而不是删了就空一个。。。很奇怪新版本改动1 先分离序号和order , 这不是一个序列,...原创 2022-02-15 10:27:10 · 139 阅读 · 0 评论 -
未完成 ---判断picture等对象为空 用is
If Controls("image" & a + 1).Picture() Is Nothing Then MsgBox ("这里是空的")If Controls("image" & a + 1).Picture() Is Nothing Then MsgBox ("这里是空的")Else input1 = MsgBox("开始培养?", vbYesNo, "确定则会关闭当前界面, 前往界面 ") If input1 = vb...原创 2022-02-15 10:06:13 · 411 阅读 · 0 评论 -
未完成 --‘ 如何往ComboBox1里面加东西
listbox呢,其他呢ComboBox1.AddItem ListBox1.Text ListBox1.RowSource = "shop!d3:e15" ListBox1.ColumnCount = 2 ListBox1.ColumnWidths = "50;80" ListBox1.ColumnHeads = True原创 2022-02-14 17:22:15 · 345 阅读 · 0 评论 -
未完成 form 不同控件的图片处理方式
Image1.PictureSizeMode = fmPictureSizeModeZoom Image1.Picture = LoadPicture(ThisWorkbook.Path & "\res\" & icon1 & ".jpg") 'Image1.Picture = LoadPicture(ThisWorkbook.Path & "\res\" & "Pet_doghead01.jpg...原创 2022-02-14 15:49:01 · 168 阅读 · 0 评论 -
--未完成--关于 ListBox1的数据源 指定
ListBox1.RowSource = "shop!d3:e15" ListBox1.ColumnCount = 2 ListBox1.ColumnWidths = "50;80" ListBox1.ColumnHeads = True特备注意写法时 ListBox1.RowSource = "shop!d3:e15"而不是VBA里的range 写法,。而是EX CEL的写法!!!而且也不是controlsource...原创 2022-02-14 15:35:42 · 481 阅读 · 0 评论 -
未完成---UserForm_Activate() 无法做到实时监测?
'Private Sub UserForm_Activate()' If MultiPage1.Visible = False Then' CommandButton2.Caption = "打开"' Else' CommandButton2.Caption = "关闭"' End If'End Sub难道要加定时检测?实用的时按钮,按下时同时修改好用Private Sub CommandButton2_Click()...原创 2022-02-14 15:20:46 · 198 阅读 · 0 评论 -
未完成 关闭和隐藏form的差异,或者只是打开新的
未完成 Unload UserForm1' UserForm1.Visible = False 差别时,如果只是隐藏,当后面新开的form关闭后隐藏后,还不会推出 窗体模式而会显示后面的? 还是可以显示出来或者 也不关老的,也不隐藏,系统会自己隐藏再后台?...原创 2022-02-14 14:58:40 · 73 阅读 · 0 评论 -
未完成--最好的变量,不是传递,而是保存再文件/数据库里
Function jump1(a) input1 = MsgBox("开始培养宠物?", vbYesNo, "确定则会关闭当前界面, 前往培养界面 ") If input1 = vbYes Then index1 = a Debug.Print "确定后index1= " & index1 Worksheets("petbag").Cells(2, 6) = index1 Unload UserForm...原创 2022-02-14 14:55:11 · 496 阅读 · 0 评论 -
VBA里userform的名字,什么时候该用userform ,什么时候该用userform1呢?
当写form 触发事件时,每个不同的 userform 都还是要用 userform 这个关键词Private Sub UserForm_Initialize()但是代码里其他地方,用到某个具体的 form对象,用userform1 等具体的名称Sub startform1() Load UserForm1 UserForm1.ShowEnd SubSub startform2() Load UserForm2 UserFo...原创 2022-02-14 14:25:30 · 946 阅读 · 0 评论 -
未完成 VBA的 public 不能再不同窗体之间传递public
Public index1 '现在测得是可以在模块间传递,但是不能在不同窗体之间传递Public aaa1Private Sub UserForm_Initialize()End SubPrivate Sub CommandButton1_Click()aaa1 = 999UserForm6.ShowEnd SubPrivate Sub CommandButton3_Click() Debug.Print "aaa1= " &am...原创 2022-02-14 14:17:43 · 354 阅读 · 0 评论 -
未完成---VBA的键盘事件相关
试了几个地方有的有些,有的问题很多1workbook open时调用不好用Private Sub Workbook_Open() Load UserForm6 UserForm6.Show Application.OnKey "a", "wb01" Debug.Print "open" End SubFunction wb01() Windows(ThisWorkbook....原创 2022-02-14 14:05:42 · 947 阅读 · 0 评论