我是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,但我似乎无法使其正常工作。
我做错了什么?
答案 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))