2016-03-15 220 views
1

我在Excel上遇到VBA错误很难,有人可以帮我理解这个错误的含义吗?VBA对象变量或With块变量未设置错误

“VBA对象变量或带块变量未设置错误”

我的函数应该检查是否纸张存在,如果不能创造新的工作表,将其重命名并返回到主函数。 代码工作,但错误总是抛出..

Function GetWorksheetFromName(Name As String) As Worksheet 
    Dim WS As Worksheet 
    For Each WS In ThisWorkbook.Worksheets 
     If StrComp(WS.Name, Name, vbTextCompare) = 0 Then 
      Set GetWorksheetFromName = WS 
      Exit Function 
     End If 
    Next WS 

    With ThisWorkbook 
     Set WS = Worksheets.Add(After:=Sheets(.Sheets.Count)) 
     WS.Name = Name 
    End With 

    Set GetWorksheetFromName = WS 

End Function 

PS:this可能有帮助,但我仍然没有固定的我的代码

+0

什么是不工作?对于我来说,使用GetWorksheetFromName(“ABC”):.Range(“A1”)= 123:End With'。首先传递它创建新的工作表,第二次传递它使用相同的工作表。 – Jeeped

+0

代码有效,但是会抛出这个错误 – miguelmpn

+1

你打算怎么调用它? –

回答

1
Set WS = .Worksheets.Add(After:=.Sheets(.Sheets.Count)) 

注意添加时期Sheets前和Worksheets - 您当前的代码将处理Active工作簿的Sheets集合,而不是ThisWorkbook。

+0

谢谢,这确实是一个错字,但错误仍然存​​在... – miguelmpn

+0

看到我的更新,包括'工作表'# –

+0

仍然一样...即使我评论底部我仍然得到错误 – miguelmpn

0

错误实际上是上市MSDN link

您试图使用已被设置为Nothing的对象变量。

设置为MyObject =无                     “发行对象。

mycount的= MyObject.Count          “制作到释放对象的引用。

重新指定对象变量的引用。例如,使用新的Set语句来设置对该对象的新引用。

Dim WS As Worksheet 

Sheets("Config").Select 
WS = GetWorksheetFromName(Range("B8").Value) 

我的错误是在最后一行,我错过了SET

Set WS = GetWorksheetFromName(Range("B8").Value) 

谢谢蒂姆·威廉姆斯和斯科特·克拉纳您快速帮助

相关问题