我正在使用通过尝试命名并重定向错误直到找到有效名称来创建唯一表名的子文件夹。错误处理完成后出现奇怪的错误行为
子的作品,但在离开子,并试图在OLEOBJECT复选框来测试值后,它给了我,我以前被重定向错误 - 那就是除非我执行一些其他呼叫如ws.Activate
或application.screenupdating = false
。我曾尝试在代码中的各个位置放置Err.Clear
,但没有成功。
我很新的VBA(不到一个月的使用它),所以原谅我的明显错误。
我用Excel 2013年
运行此首先创建在Sheet1中的复选框,并与一个指定名称的新表:
Private Sub runfirst()
Dim cb1 As OLEObject
Dim ws As Worksheet
Sheet1.OLEObjects.Delete
Set cb1 = Sheet1.OLEObjects.Add(ClassType:="Forms.CheckBox.1")
cb1.Name = "CheckBox1"
cb1.Object.Caption = "Checkbox1"
Set ws = ThisWorkbook.Sheets.Add
ws.Name = "mysheet"
End Sub
主要代码:
Private Sub test1()
'This throws an error
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets.Add
NameWS rootname:="mysheet", ws:=ws
'ws.Activate
If Sheet1.CheckBox1.Value = True Then MsgBox "true" Else MsgBox "false"
End Sub
Private Sub test2()
' This works fine
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets.Add
NameWS rootname:="mysheet", ws:=ws
ws.Activate
If Sheet1.CheckBox1.Value = True Then MsgBox "true" Else MsgBox "false"
End Sub
Private Sub NameWS(rootname As String, ws As Worksheet)
' This sub tries to name the WS as rootname, if it fails, it increments a counter in the name.
Dim ctr As Long
ctr = 0
On Error GoTo Err1:
ws.Name = rootname
Exit Sub
BaseNameTaken:
ctr = ctr + 1
On Error GoTo Err1:
ws.Name = rootname & " (" & ctr & ")"
' If execution makes it to here it means that a valid name has been found
On Error GoTo 0
Exit Sub
Err1:
If ctr > 99 Then Resume Fail ' Just to ensure we haven't created an infinite loop
Resume BaseNameTaken
Fail:
' Leave sub. Inability to name WS is not a critical error.
MsgBox "Failed to name worksheet after " & ctr & " tries. Excel default name used."
End Sub
它给你什么错误?我刚测试过。如果我先运行第一个程序,然后运行Test1,只要NameWS在同一模块中,它就可以正常运行。 – Niclas
我得到运行时错误1004:“该名称已被占用,请尝试使用其他名称。”这是我在NameWS函数中重定向的错误。我只是在家用电脑上试过它(在我工作之前),并且出现同样的错误,因此对我来说是可重现的。 –