【问题标题】:VBA Runtime Error 9 - Subscript out of rangeVBA 运行时错误 9 - 下标超出范围
【发布时间】:2017-02-01 15:42:13
【问题描述】:

我正在尝试创建一个用户表单,该表单将传播带有信息的 excel 工作表的第一个可用行。我正在努力使范围正确,并且表单当前显示“下标超出范围”; “运行时错误 9”。 'if' 语句似乎也有问题,但遵循在线标准建议似乎无助于解决问题。

如果有人知道我哪里出错了(我对此很陌生),那就太好了。

Private Sub UserForm_Initialize()  
BusinessAreaBox.List = Array("option one", "option two")  
End Sub  

Private Sub CommandButton1_Click()  
Dim RowCount As Long  
RowCount = Sheets("Sheet1").Range.Sheets("Sheet1").Cells(2, "A")  
With ThisWorkbook.Sheets("Sheet1").Range("A2")  
.Offset(RowCount, 0).Value = BusinessArea1.Value  
.Offset(RowCount, 1).Value = BusinessContact1.Value  
.Offset(RowCount, 2).Value = LPSContact1.Value  
.Offset(RowCount, 4).Value = ProjectedFTE1.Value  
.Offset(RowCount, 5).Value = DateOfMostRecentMeeting1.Value  
.Offset(RowCount, 6).Value = FTEComment1.Value  
.Offset(RowCount, 7).Value = ProposedMove1.Value  
.Offset(RowCount, 8).Value = DeskUtilisation1.Value  
.Offset(RowCount, 9).Value = OtherComment1.Value  
.Offset(RowCount, 10).Value = Actions1.Value  
If RegularMeeting1.Value = True Then  
.Offset(RowCount, 3).Value = "Yes"  
Else  
.Offset(RowCount, 3).Value = "No"  
End If  
RegularMeeting1.Value = True Or False  
End With  
End Sub  

Private Sub CommandButton2_Click()  
  Unload Me  
End Sub  

【问题讨论】:

  • 你想用这条线做什么:RowCount = Sheets("Sheet1").Range.Sheets("Sheet1").Cells(2, "A")?我猜这个是黄色的?
  • 那是错误的来源。我试图让它将第一组信息填充到“工作表 1”、第 2 行,然后从该点开始填充到第一个可用行。我必须承认,我从网上的一个例子中提取了那句话,但我看不出这句话应该读什么——任何想法都会非常感激。
  • 等一下,你要Sheet1!A2吗?那你为什么要从中阅读(以一种荒谬的扭曲不可能工作的方式)?如果你想写入到一个单元格,那么单元格的值需要在赋值的left-hand-side;真的,这与从变量读取/写入变量没有什么不同。
  • @Mat'sMug;如果RowCount = 0,那么她会写信给Sheet1!A2.Offset(RowCount, 0).Value,如果RowCount <> 0她不是。

标签: vba excel userform subscript


【解决方案1】:

我猜你可能会追求这个

Private Sub CommandButton1_Click()
    With ThisWorkbook.Sheets("Sheet1")
        .Cells(.Rows.Count, 1).End(xlUp).Offset(1).Resize(, 11).Value = Array(BusinessArea1.Value, _
                                                                              BusinessContact1.Value, _
                                                                              LPSContact1.Value, _
                                                                              IIf(RegularMeeting1.Value, "Yes", "No"), _
                                                                              ProjectedFTE1.Value, _
                                                                              DateOfMostRecentMeeting1.Value, _
                                                                              FTEComment1.Value, _
                                                                              ProposedMove1.Value, _
                                                                              DeskUtilisation1.Value, _
                                                                              OtherComment1.Value, _
                                                                              Actions1.Value)

    End With
    RegularMeeting1.Value = True Or False '<--| what is this supposed to do?
End Sub

【讨论】:

  • @JohnMuggins,谢谢。但让我们等待杰西卡露西的反馈
  • 不幸的是,这没有运气。和以前一样,范围提出了一个问题。我会看看其他地方是否存在可能导致问题的问题,但非常感谢您的帮助!
  • 哪一行引发了问题,错误描述是什么?
【解决方案2】:

尝试以这种方式写入单元格。您需要先激活工作表和单元格。

Dim myArr As Variant

myArr = Array(BusinessArea1.Value, _
              LPSContact1.Value, _
              ProjectedFTE1.Value, _
              DateOfMostRecentMeeting1.Value, _
              FTEComment1.Value, _
              ProposedMove1.Value, _
              DeskUtilisation1.Value, _
              OtherComment1.Value, _
              Actions1.Value)

sheet1.activate
sheet1.range("A2").activate
for I = 0 to ubound(myArr)
    activecell.value = myArr(I)
    activecell.Offset(1,0).activate
Next I

【讨论】:

  • 很高兴看到这样的答案停止传播这样一种想法,即在您不需要时使用.Activate 并依赖ActiveCell(和Selection) i> 几乎是一个好主意。
  • 我支持 Mat's Mug - 请参阅 How to avoid using Select in Excel VBA macros
猜你喜欢
  • 2013-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多