获取运行时错误9激活特定工作簿时,下标超出范围

问题描述 投票:0回答:1

我尝试了之前问题的所有建议,但没有成功,耗费了大量时间,但没有找到正确的解决方法。

当我尝试激活Workbook1(Work.xlsm)的“Sheet1”表时,如图所示,我得到一个运行时错误(即使没有拼写错误)。但它运行时没有其他工作簿(Book1.xlsx)的问题,用于将Excel工作表(LS)数据填充到UserForm组合框和文本框。

现在我的问题是当我点击“添加”按钮时,用户表单数据填充在工作簿(Book1.xlsx)excel表(LS)上,而我希望它填充在Workbook1(Work.xlsm)的“Sheet1”表上。

为此,我试图调用我的主要“Sheet1”工作簿1(Work.xlsm),但在尝试激活时收到错误。你能帮我解决一下这个问题。图像在这里:Error in this line; Run time error; From range A8 it should start populating(desired ouput in workbook1)

下面是我的组合框更改和命令按钮(ADD)的代码:

Private Sub cboLs_Change()
Dim i As Long, LastRow As Long, ws As Worksheet
Dim wb As Workbook
Set wb = Workbooks.Open("C:\Users\Desktop\Book1.xlsx")
Set ws = wb.Worksheets("LS")
LastRow = ws.Range("A" & Rows.Count).End(xlUp).Row
For i = 2 To LastRow
If Val(Me.cboLs.Value) = ws.Cells(i, "A") Then
MsgBox Me.cboLs.Value
Me.txtProject = ws.Cells(i, "B").Value
End If
Next i
End Sub


Private Sub cmdadd_Click()
    Dim i As Integer
    Dim wb As Workbook
    Dim ws1 As Worksheet
    Set wb = Workbooks.Open("C:\Users\Desktop\Work.xlsm")
    wb.Activate
    Set ws1 = wb.Worksheets("Sheet1")
    Worksheets("Sheet1").Activate
    'position cursor in the correct cell A2.
    ActiveSheet.Range("A8").Select
    Do Until ActiveCell.Value = Empty
        ActiveCell.Offset(1, 0).Select 'move down 1 row
        i = i + 1 'keep a count of the ID for later use
    Loop
    'Populate the new data values into the 'Data' worksheet.
    ActiveCell.Value = i 'Next ID number
    'Populate the new data values into the 'Data' worksheet.
    ws1.Range("A6").Value = e 'Next ID number
    ws1.Range("B6").Value = Me.txtname.Text 'set col B
    ws1.Range("C6").Value = Me.txtbook.Text 'set col C
    ws1.Range("D6").Value = Me.cboLs.Text
 End Sub


 Private Sub UserForm_Initialize()
    Dim i As Long, LastRow As Long, ws As Worksheet
    Dim wb As Workbook
    Set wb = Workbooks.Open("C:\Users\Desktop\Book1.xlsx")
    Set ws = wb.Worksheets("LS")
    LastRow = ws.Range("A" & Rows.Count).End(xlUp).Row
    For i = 2 To LastRow
    Me.cboLs.AddItem ws.Cells(i, "A").Value
    Next i
 End Sub
excel vba excel-vba
1个回答
0
投票

非常简单:

Set ws1 = wb.Worksheets("Sheet1")抛出Subscript out of Range错误,因为文件“C:\ Users \ Desktop \ Work.xlsm”中没有包含名称“Sheet1”的工作表

您正在通过WorkSheet对象的Name引用,这是小标签上显示的内容。对象很可能是VBA中对象资源管理器中的“Sheet1”:

  • 在这种情况下,您可以使用Set ws1 = wb.Sheet1
  • 如果要使用该名称,请选中Excel GUI中的选项卡,然后使用Set ws1 = wb.Worksheets("Whatever is displayed on the little tab at the bottom of your screen")

有关如何参考表格的一些示例,请阅读this

© www.soinside.com 2019 - 2024. All rights reserved.