2017-03-01 156 views
0

我在Workbook_Open上运行只读模板文件,该文件将被重新用于新客户端。我在Name = .Range("L2")这一行发现错误:“运行时错误'91':对象变量或块变量未设置”,我不完全确定它为什么会这样。我相信我只是简单地忽略了一些非常简单的东西,但任何帮助都将不胜感激,如果有更高效的编写此代码的方式,请告诉我。我渴望学习。Excel VBA - 不将数据写入单元格的输入框

Private Sub Workbook_Open() 
Dim tB As Workbook 
Dim ws As Worksheet 
Dim DailyWS As Worksheet 
Dim Client As String 
Dim Name As Range 

Set tB = ThisWorkbook 
With tB 
    Set DailyWS = .Sheets("Daily Tracker") 
End With 'tB 
With DailyWS 
    Name = .Range("L2") 
End With 'DailyWS 


If Len(Name.Value) = 0 Then 
    Client = InputBox("Enter your name :", "Client's Name Please.") 
    If Len(Client) = 0 Then 'Checking if Length of name is 0 characters 
     MsgBox "Please enter a valid name!", vbCritical 
     Goto Tryagain 
    End If 
    Name.Value = Client 
    If Client = vbNullString Then 
    MsgBox ("DO NOT CONTINUE!" & _ 
    "" & vbCrLf & _ 
    "DO NOT SAVE THIS FILE! " & vbCrLf & _ 
    "" & vbCrLf & _ 
    "AT PROMPT PLEASE ENTER A NAME!" & vbCrLf & _ 
    ""), vbOKOnly + vbCritical, "!! Name Required !!" 
    Goto Tryagain 
    End If 
Else 
MsgBox "Not Empty (Test)" 
End 
End If 
end sub 
+1

做错误说的是什么:'Set Name = .Range(“L2”)' –

+0

我觉得自己像个白痴。我以为我尝试过。显然不是。谢谢。 – BetaOp9

+0

如果你想提交作为答案,我会为你做。 :-) – BetaOp9

回答

4

Name是一个范围对象和所需要的所有对象设置:

Set Name = .Range("L2") 

一个说明,我会小心使用在VBA中使用的词语。 Name在很多地方都有使用。我会使用一个不会取代现有命令的变量,如Nme

+3

'Name'实际上是一个* type *,在Excel对象模型中。考虑到VBA期望指定类型名称的上下文(例如“AsTypeClause”),我认为VBA不会有任何问题告诉来自“Excel.Name”类型的局部变量“Name” –

+0

@ Mat'sMug与你相比,我是一个黑客,所以我会推迟你的知识。但是,我个人仍然会避免它,只是因为我的ocd会需要它。 –

+0

Pffft ..你太谦虚了!我只是擅长*使它看起来像*我知道我的东西哈哈 - 我真的看着你,和其他几个VBA常客!我不是MVP! ;-) –

相关问题