excel - VBA 宏函数超出范围
问题描述
Function getNames()
Dim wbThis As Workbook, arr() As Variant, i As Long
Set wbThis = ThisWorkbook
For i = 1 To 50
arr(i) = wbThis.Sheets("Sheet1").Cells(6, i).Value
Next i
For i = 1 To 50
MsgBox "employee names are***** ." + arr(i)
Next i
End Function
我在 Sheet1 中有我的 VBA 宏代码。在 sheet1 中,我有一个单击按钮。单击按钮时,我调用了 getNames 函数。在 sheet1 我有所有行和列值。但是当我运行它时显示
下标超出范围/运行时错误“9”
我尝试了很多。任何人对此有任何想法。
解决方案
您需要为变量数组分配一些大小。
Function getNames()
Dim wbThis As Workbook, i As Long
Set wbThis = ThisWorkbook
redim arr(1 to 50) As Variant
For i = lbound(arr) To ubound(arr)
arr(i) = wbThis.Sheets("Sheet1").Cells(6, i).Value
Next i
For i = lbound(arr) To ubound(arr)
MsgBox "employee names are***** ." & arr(i)
Next i
End Function
ReDim
可以不用Dim
先用。LBound
toUBound
是一种更通用的方法,可以通过静态数组从下边界循环到上边界。& 号&
是字符串连接的首选运算符。
函数旨在返回一个值。sub
作为一个程序,这可能会更好。
您可以通过从 sub 调用函数来“播种”数组。
sub main()
dim i as long, nms as variant
nms = getNames()
For i = lbound(nms) To ubound(nms)
MsgBox "employee names are***** ." & nms(i)
Next i
end sub
Function getNames()
Dim wbThis As Workbook, i As Long
Set wbThis = ThisWorkbook
redim arr(1 to 50) As Variant
For i = lbound(arr) To ubound(arr)
arr(i) = wbThis.Sheets("Sheet1").Cells(6, i).Value
Next i
getnames = arr
End Function
推荐阅读
- javascript - 如何使用 JSON 获取谷歌热图 LatLng?
- android - 如何使用 RecyclerView 和 CardView 在 SearchView 中实现多个过滤器?
- python - Pandas 将包含 nan 值的浮点列转换为 int 以进行合并操作
- python-3.x - scapy:如何手动编码 rdata
- cmake - 如何检测 include(SomeModule) 是否有效?
- php - 在codeigniter中成功为ajax请求请求特定控制器的必要“路由设置”应该是什么?
- python - python regex:从字符串中提取数字,未知数字格式
- linux - 如何为 Linux 创建可在 32 位和 64 位上运行的可执行文件?它与 SYSV 和 GNU / Linux 格式有关吗?
- c# - 如何在使用 CreateNoWindow = true 时完全杀死一个进程
- nativescript - *ngIf 在 ios nativescript-angular 中不起作用