【问题标题】:New to Excel-VBA: Run Time Error "91": Object Variable or With block variable not setExcel-VBA 的新手:运行时错误“91”:对象变量或未设置块变量
【发布时间】:2017-12-06 11:35:24
【问题描述】:

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

我实际上是在尝试在用户窗体中的选定工作表上运行程序。 然后程序将从选定的工作表中获取一个值,该值会将其导入到新创建的工作表中。 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

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

我做错了什么?

【问题讨论】:

    标签: vba excel


    【解决方案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))
    

    【讨论】:

    • 谢谢YowE3k。你的答案是正确的!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多