Set tablesheet = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ActiveSheet.Index))
KodoveJmeno = ThisWorkbook.VBProject.VBComponents(tablesheet.CodeName).Properties("Codename")
ThisWorkbook.VBProject.VBComponents(KodoveJmeno).CodeModule.AddFromString _ "Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)" + Chr(10) _ + "Application.ScreenUpdating = False" + Chr(10) _ + "Call Trideni.Serad(Target, ActiveCell.ListObject.Name)" + Chr(10) _ + "Application.ScreenUpdating = True" + Chr(10) _ + "End Sub"
第二个命令以以下方式停止:
运行时错误"9":下标超出范围
但是在 F5 之后它继续没有问题 - 看起来 BUG 已经存在了很多年(Office 2003-2016(!!有什么解决方案吗?
有时它可以工作 - 在我删除工作表后,使用 alt+F11 打开和关闭 VBA,但有时它会损坏并且一直非常烦人,破坏生产性工作。
在某些计算机上一切正常,在某些计算机上我们收到错误。看起来像是内部 excel 过程与 VBA 通信同步或类似的东西的问题(VBA 中的睡眠、等待或 alt+f11 不起作用(。
感谢帮助
正如@jkpieterse建议的那样 - 使用隐藏的工作表。
创建一个模板工作表并为其指定代号 shtTemplate
。
将此代码添加到工作表中(注意键范围选择可能会更好(:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
With ActiveSheet
.Sort.SortFields.Clear
.Sort.SortFields.Add Key:= _
Range(Selection.CurrentRegion.Offset(, Selection.Column - Selection.CurrentRegion.Resize(, 1).Column).Resize(, 1).Address) _
, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With .Sort
.SetRange Range(Selection.CurrentRegion.Address)
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End With
End Sub
添加一个普通代码模块并添加以下代码:
Public Sub CreateSheet()
Dim wrkSht As Worksheet
shtTemplate.Visible = xlSheetVisible
shtTemplate.Copy ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
Set wrkSht = ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
shtTemplate.Visible = xlSheetVeryHidden 'Hide the template sheet so only VBA can unhide it.
wrkSht.Name = "Copied Sheet"
End Sub
您需要添加一些内容才能为新工作表提供正确的唯一名称。 双击时的排序将适用于您创建的每个工作表。