Excel-VBA新增内容:运行时错误“91”:对象变量或未设置块变量

时间:2017-12-06 03:18:48

标签: excel vba excel-vba

我是Excel-VBA的新手,请原谅我的无知。 ;)

我实际上是尝试从UserForm上运行选定工作表上的程序。 然后,程序将从所选工作表中获取一个值,该值将导入到新创建的工作表。 Sheet18是一个工作表模板,它将被复制到新工作表中。

这是代码:

Private Sub CommandButton1_Click()
UserForm1.Hide
  Dim wsUserSel As Worksheet
  Dim ws As Worksheet
  Dim ExFund As Variant

    On Error Resume Next
    Set wsUserSel = ListBox1.Value
    Set ws = Sheets.Add(after:=Sheets(Sheets.Count))
    On Error GoTo 0
        With wsUserSel
            ExFund = .Cells(107, 4).Value
        End With
        Sheet18.Range("A1:K126").Copy
        ws.Name = InputBox("Please input the name of new worksheet.", ThisWorkbook.Name)
        ws.Activate
        Range("A1").Select
        ActiveSheet.Paste
        ActiveSheet.Cells(29, 2) = ExFund
        ActiveSheet.Cells.EntireColumn.AutoFit
        Application.CutCopyMode = False
End Sub

此代码返回错误

  

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

因为这部分代码:

    With wsUserSel
        ExFund = .Cells(107, 4).Value
    End With

我已尝试将其放入或直接使用wsUserSel,但我似乎无法使其正常工作。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

您的On Error Resume Next声明掩盖了您在线上说

的错误
Set wsUserSel = ListBox1.Value

该行将失败,因为ListBox1.Value将不是Worksheet对象。我假设它是String,指定您要使用的工作表。

所以改变一节说:

On Error Resume Next
Set wsUserSel = ListBox1.Value
Set ws = Sheets.Add(after:=Sheets(Sheets.Count))
On Error GoTo 0

是:

Set wsUserSel = Worksheets(ListBox1.Value)
Set ws = Sheets.Add(after:=Sheets(Sheets.Count))