我正在使用一个sub来创建唯一的工作表名称,方法是尝试使用名称并重定向错误,直到找到有效的名称。
子工作,但在退出sub后,并尝试在oleobject复选框中测试值时,它给出了我之前重定向的错误 - 除非我执行其他调用,例如{{1} }或ws.Activate
。我尝试在代码中的不同位置放置application.screenupdating = false
但没有成功。
我对VBA很新(使用它不到一个月)所以请原谅我明显的错误。
我正在使用excel 2013。
首先运行此选项以在Sheet1中创建复选框,并创建一个具有指定名称的新工作表:
Err.Clear
主要代码:
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
答案 0 :(得分:0)
我不喜欢On Error Goto Label
。我发现难以理解且难以理解的代码。
下面的宏是我如何编写例如例程。
首先,有几点可能会有所帮助。
我有一个名为Resources的文件夹,包含子文件夹" VBA"," VBA Excel"和" VBA Outlook"。如果我使用VBA Word或VBA Access,我也会为它们提供子文件夹。每当我完成开发时,我会查看我的代码以查找可能再次使用的例程。如果例程是通用VBA,则将其保存为" VBA"中的文本文件。按照惯例,我将保存为" NameWS .txt"在“VBA Excel”文件夹中。
宏开始解释它的作用。如果宏很复杂,那么它也会概述它如何实现其目标。当我在六个月或十二个月或五年内观察宏观时,这对我有帮助。我有几年前写过的宏,快速浏览一下它是否对今天的问题有所帮助。
最后,宏的历史的第一行。每次我更新宏时,我都会添加一两句话来说明原因和原因。
Private Sub NameWS(rootname As String, ws As Worksheet)
' Attempt to rename worksheet ws as rootname. If successful, exit.
' If unsuccessful, rename worksheet as rootname (N) where
' N is the first number in the sequence 1, 2, 3 and so on such
' that rootname (N) did not previously exist.
' 7Nov16 Coded.
Dim ctr As Long
Dim NameCrnt As String
' Try rootname first
On Error Resume Next
ws.Name = rootname
On Error GoTo 0
If ws.Name = rootname Then
' Rename successful
Exit Sub
End If
' rootnamne is use. Try rootname (1), rootname(2), etc, until
' get successful rename.
ctr = 1
Do While True
NameCrnt = rootname & " (" & ctr & ")"
On Error Resume Next
ws.Name = NameCrnt
On Error GoTo 0
If ws.Name = NameCrnt Then
' Rename successful
Exit Sub
End If
ctr = ctr + 1
Loop
End Sub
答案 1 :(得分:0)
这是设置Application.DisplayAlerts
您可能想要使用此功能
Private Sub NameWS(rootname As String, ws As Worksheet)
Dim ctr As Long
Application.DisplayAlerts = False
Do
On Error Resume Next
ws.name = rootname & IIf(ctr = 0, "", " (" & ctr & ")")
ctr = ctr + 1
Loop While Err > 0
Application.DisplayAlerts = True
End Sub
此外,行:
If Sheet1.CheckBox1.Value = True Then MsgBox "true" Else MsgBox "false"
可以简化为:
MsgBox Sheet1.CheckBox1.Value