VBA:加载数组值时出错9

时间:2016-07-07 20:38:05

标签: arrays excel vba excel-vba

我目前正在编写一个多用户表单工作簿,它将通过添加点来检查guest虚拟机。我试图通过“签到表格”上的主要标签在他们办理登机手续时按姓名回复来使其更加个性化。我还要制作另一个用户表格,如果他们要求,则显示所有来宾信息它。 现在我有2个关于我试图通过其他在线资源调试的问题。

1)在办理登机手续时,我使用名为Profile的数组来检索该人的所有信息。当我调出要添加到数组的范围时,我最终得到错误9“下标超出范围”。为了解决这个问题,我试图ReDim保留数组,但却发现我的信息已经被清除了。

Option Explicit
Dim Profile() as Variant, Point as Integer

Sub CheckIn()
ActiveCell.Offset(0, 6).Select
ActiveCell.Value = ActiveCell.Value + Point
If ActiveCell.Value >= 10 Then
    ActiveCell.Value = ActiveCell.Value - 10
    MsgBox ("Congradulations! You just earned one free Engineering Pad. Talk to your Membership chair to recieve your free pad.")
End If
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = ActiveCell.Value + Point

Profile() = Array(Range(Cells(ActiveCell.Row, 1), Cells(ActiveCell.Row, 12)))
'data is Error 9 here

ReDim Preserve Profile(0 To 11)
'data is cleared here

MainLabel.Caption = "Hello " & Profile(1) & " " & Profile(2) & ". You Have " & Profile(7) & " Points."

ActiveCell.EntireRow.Select
Application.Wait (Now + #12:00:05 AM#)
MainLabel.Caption = "Please Enter Your 9-Digit ID or Swipe Your Card"
End Sub

此外,将数据类型从Variant更改为String只会在我尝试将数据添加到Profile时产生类型不匹配,即使使用Split()也是如此。怎么解决这个问题?任何建议表示赞赏。谢谢!

以下是我的电子表格的图片

enter image description here

2 个答案:

答案 0 :(得分:0)

Range()周围不需要Array()来获取值...此外,Range将始终生成单值或二维数组。

变化:

Profile = Range(Cells(ActiveCell.Row, 1), Cells(ActiveCell.Row, 12))
'note the lack of parentheses

此外,由于行是第一个元素,因此您无法使用preserve重新生成数组,因为preserve仅适用于数组的最终维度。

ReDim Preserve Profile(0 To 11,0 to 2)可以工作但是 ReDim Preserve Profile(0 To 22,0 to 1)会失败,因为在此上下文中保留无效

答案 1 :(得分:0)

当您将一系列单元格中的值分配到变体数组中时,始终会获得一个二维的,基于1的数组;即使该数组仅为1到1作为第二个等级(列),或者在第一个等级(行)中为1比1。

dim profile as variant, acrw as long

acrw = activecell.row

with worksheets("MySheet1")   'know what worksheet you are on!!!!!
    profile = .Range(.Cells(acrw, 1), .cells(acrw, 12)).value2

    'the following should be 1:1 and 1:12
    debug.print lbound(profile, 1) & ":" & ubound(profile, 1)
    debug.print lbound(profile, 2) & ":" & ubound(profile, 2)

    'why are you redimming this at all?
    'ReDim Preserve Profile(0 To 11)
    'the following adds room for two more columns of data while preserving the values
    ReDim Preserve Profile(1 to 1, 1 To 14)
end with

您只能使用ReDim statement保留来更改第二等级的维度;永远不会是第一个。

使用LBoundUBound函数确定数组的限制( aka 边界)。