'对象范围'_Worksheet失败 - Userform

时间:2016-06-27 22:28:19

标签: excel vba range userform

我在VBA工作 - Excel 2016

我正在尝试从一个工作表调用的用户窗体中获取输入,找到另一个工作表上的下一个空行并插入该值。但是我不断收到运行时错误 - “对象范围”_Worksheet失败。表格是从另一种形式中调用的。

我尝试了各种解决方案,但似乎没有任何效果。

我在其他地方使用几乎相同的代码,当调用表单并将值插入同一张表时,该代码有效,因此得出结论,必须将其放在访问另一张表中。

这条线失败了:

ActiveWorkbook.Worksheets("Suppliers").Range("A" & NextRow) = SupplierName

我正在使用的代码如下。

Private Sub addSupplierConfirm_Click()

'Initialise variables
Dim SupplierName As String

'Assign variables
SupplierName = addSupplierName.Value

If (SupplierName = "") Then
    MsgBox ("Please enter a supplier name")
    Exit Sub
End If

'Find next row on supplier sheet add supplier name

NextRow = ActiveWorkbook.Worksheets("Suppliers").Range("A" & Rows.Count).End(xlUp).Row + 1
ActiveWorkbook.Worksheets("Suppliers").Range("A" & NextRow) = SupplierName

Application.ScreenUpdating = False

'Sort Suppliers
ActiveWorkbook.Worksheets("Suppliers").ListObjects("tbl_suppliers").Sort.SortFields. _
    Clear
ActiveWorkbook.Worksheets("Suppliers").ListObjects("tbl_suppliers").Sort.SortFields. _
    Add Key:=Range("tbl_suppliers[[#All],[Suppliers]]"), SortOn:=xlSortOnValues, _
    Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Suppliers").ListObjects("tbl_suppliers").Sort
    .Header = xlYes
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With

'Activate home page
Sheets("Expenses").Activate
Range("A1").Select

Application.ScreenUpdating = True

'Unload form
addSupplierName.Value = ""
UfAddSupplier.Hide

End Sub

提前致谢!

1 个答案:

答案 0 :(得分:0)

在表单仍在显示时,您无法访问工作表。在访问工作表之前,UfAddSupplier.Hide再次向sub移动Private Sub addSupplierConfirm_Click() 'Initialise variables Dim SupplierName As String 'Assign variables SupplierName = addSupplierName.Value If (SupplierName = "") Then MsgBox ("Please enter a supplier name") Exit Sub End If UfAddSupplier.Hide 'Find next row on supplier sheet add supplier name NextRow = ActiveWorkbook.Worksheets("Suppliers").Range("A" & Rows.Count).End(xlUp).Row + 1 ActiveWorkbook.Worksheets("Suppliers").Range("A" & NextRow) = SupplierName ... ... ... ,一切都应按预期工作:

{{1}}