对象Var或With Block未设置VBA

现在写一个VBA代码复制活动行到一个新的表。 然后用文本框条目和列表条目拉起一个用户表单。 input时,会更新相应的单元格,并更新date。

我目前得到运行时错误“91”:对象变化或块variables未设置。 我无法弄清楚这个错误是从哪里来的,如果你能帮我解释一下,我将非常感激!

有两个文件一个调用userform这是我得到的错误。

Sub NewCange() ChangeUserForm.Show End Sub 

和用户表单代码

 Private Sub UserForm_Initialize() Dim i As Integer, M As Integer, Result As Integer Dim N As String Dim MasterRange As Range, CopyRange As Range, NextRow As Range Dim ActiveRow As Long 'Selects active row copies it and puts in empty row in the copy sheet ActiveRow = ActiveCell.Row With Worksheets("Master") .Activate .Cells(ActiveRow, 1).Select .Cells(ActiveRow, 1).EntireRow.Copy End With With Worksheets("Records") .Activate .Cells(ActiveRow, 1).Select Rows(ActiveRow).Select End With ActiveSheet.Paste Destination:=Worksheets("Records").Cells(ActiveRow, 1) 'Below here is the inserting new change into excel sheet Set MasterRange = Range(ActiveCell, ActiveCell) Worksheets("Master").Activate LocalListBox.Clear 'List of Locations for assets With LocalListBox .AddItem "TB01 " .AddItem "TB02 " .AddItem "TB03 " .AddItem "TB04 " .AddItem "TB05 " .AddItem "TB06 " .AddItem "TB07 " .AddItem "TB07XP " .AddItem "TB08 " .AddItem "TB09 " .AddItem "TB10 " .AddItem "TB11 " .AddItem "TB12 " .AddItem "TB13 " .AddItem "TB14 " .AddItem "TB15 " .AddItem "TB16 " .AddItem "TB17 " .AddItem "TB17XP " .AddItem "TB18 " .AddItem "TB19 " .AddItem "TB20 " .AddItem "TB21 " .AddItem "TB23 " .AddItem "TB24 " .AddItem "TB25 " .AddItem "TB26 " .AddItem "TB27 " .AddItem "TB27XP " .AddItem "TB28 " .AddItem "TB29 " .AddItem "TB30 " .AddItem "TB31 " .AddItem "TB32 " .AddItem "CAB3 " .AddItem "CAB4 " .AddItem "CAB5 " .AddItem "CAB6 " .AddItem "CAB7 " .AddItem "CAB8 " .AddItem "CAB9 " .AddItem "CAB10 " .AddItem "CAB12 " .AddItem "CAB16 " .AddItem "CAB17 " .AddItem "CAB18 " .AddItem "CAB19 " End With Set NameRange = ActiveCell MasterRange = LocalListBox.Value MasterRange.Offset(0, 2) = NameTextBox.Value MasterRange.Offset(0, 1) = Date Unload Me End Sub 

运行时错误“91”:对象变化或块variables未设置。

你正在得到这个错误,因为你正试图卸载正在初始化的东西。

所以基本上你不能这样做

 Private Sub UserForm_Initialize() Unload Me End Sub 

删除Unload Me并把它放在一个button单击。 这样你也将让用户从列表框中select一个值LocalListBox 🙂

实际上,在“button单击”中移动此代码块

 Private Sub CommandButton1_Click() MasterRange = LocalListBox.Value MasterRange.Offset(0, 2) = NameTextBox.Value MasterRange.Offset(0, 1) = Date Unload Me End Sub 

并在UserForm_Initialize()的顶部声明Dim MasterRange As Range ,而不是在UserForm_Initialize()

看起来你在With语句中错过了一段时间:

 With Worksheets("Records") .Activate .Cells(ActiveRow, 1).Select Rows(ActiveRow).Select End With 

应该

  With Worksheets("Records") .Activate .Cells(ActiveRow, 1).Select .Rows(ActiveRow).Select End With 

此外,要准确find错误的位置,请使用F8“遍历”macros。 另外,强烈build议避免使用 。在VBA中select。