奇怪的问题,菜单做深了,调用sheet拷贝函数就出错,请高手帮忙解决,非常感谢!
如果菜单简单,就不会出错比如MyTest下有A、B两个子项,其中B下面又有子项,调用了ToPR这个函数,运行不出错
如果我把注释去掉,MyTest下多了一个选项C,变成A、B、C三个子项,B有子项调用ToPR,则会出现错误,我在其它人电脑测试了也有这个问题
ToPR的代码
Sub ToePR()
Sheet2.Copy
sFn = Sheet2.Cells(3, 3).Value
If Application.Dialogs(5).Show(sFn) = True Then
ActiveWorkbook.Close SaveChanges:=True
Else
ActiveWorkbook.Close SaveChanges:=False
End If
End Sub
Public Sub CreateMyMenu()
Dim MenuObject As CommandBarPopup
Dim MenuItem As Object
Dim SubMenuItem As Object
'删除可能存在的自定义菜单控
Call DeleteMyMenu
'创建自定义菜单控件
Set MenuObject = Application.CommandBars(1).Controls.Add( _
Type:=msoControlPopup, Before:=11, temporary:=True)
MenuObject.Caption = "MyTest"
'为自定义菜单控件添加一级菜单项“打开导出的DBF文件”
Set MenuItem = MenuObject.Controls.Add(Type:=msoControlButton)
MenuItem.Caption = "AAA"
MenuItem.OnAction = "ToPR"
MenuItem.DescriptionText = "打开导出的DBF文件"
'为自定义菜单控件添加一级菜单项“打开导出的DBF文件”
Set MenuItem = MenuObject.Controls.Add(Type:=msoControlButton)
MenuItem.Caption = "CCC"
MenuItem.OnAction = "ToPR"
MenuItem.DescriptionText = "打开导出的DBF文件"
'创建“手工选取”菜单控件
Set MenuItem = MenuObject.Controls.Add(Type:=msoControlPopup)
MenuItem.Caption = "BBB"
'MenuItem.BeginGroup = True
'为“手工选取”菜单控件添加二级菜单项“选取Item”
Set SubMenuItem = MenuItem.Controls.Add(Type:=msoControlButton)
SubMenuItem.Caption = "选取"
SubMenuItem.OnAction = "ManualSelection"
Set SubMenuItem = MenuItem.Controls.Add(Type:=msoControlButton)
SubMenuItem.Caption = "输出"
SubMenuItem.OnAction = "ToPR"
Set MenuObject = Nothing
Set MenuItem = Nothing
Set SubMenuItem = Nothing
End Sub --------------------编程问答-------------------- 颜色没设置好,创建菜单的代码如下,去掉红色部分就正常了
Public Sub CreateMyMenu()
Dim MenuObject As CommandBarPopup
Dim MenuItem As Object
Dim SubMenuItem As Object
'删除可能存在的自定义菜单控
Call DeleteMyMenu
'创建自定义菜单控件
Set MenuObject = Application.CommandBars(1).Controls.Add( _
Type:=msoControlPopup, Before:=11, temporary:=True)
MenuObject.Caption = "MyTest"
'为自定义菜单控件添加一级菜单项“打开导出的DBF文件”
Set MenuItem = MenuObject.Controls.Add(Type:=msoControlButton)
MenuItem.Caption = "AAA"
MenuItem.OnAction = "ToPR"
MenuItem.DescriptionText = "打开导出的DBF文件"
'为自定义菜单控件添加一级菜单项“打开导出的DBF文件”
Set MenuItem = MenuObject.Controls.Add(Type:=msoControlButton)
MenuItem.Caption = "CCC"
MenuItem.OnAction = "ToPR"
MenuItem.DescriptionText = "打开导出的DBF文件"
'创建“手工选取”菜单控件
Set MenuItem = MenuObject.Controls.Add(Type:=msoControlPopup)
MenuItem.Caption = "BBB"
'MenuItem.BeginGroup = True
'为“手工选取”菜单控件添加二级菜单项“选取Item”
Set SubMenuItem = MenuItem.Controls.Add(Type:=msoControlButton)
SubMenuItem.Caption = "选取"
SubMenuItem.OnAction = "ManualSelection"
Set SubMenuItem = MenuItem.Controls.Add(Type:=msoControlButton)
SubMenuItem.Caption = "输出"
SubMenuItem.OnAction = "ToPR"
Set MenuObject = Nothing
Set MenuItem = Nothing
Set SubMenuItem = Nothing
End Sub --------------------编程问答-------------------- 楼主的错误是什么,我试了一下,“AAA”,“CCC”,“BBB->输出”都正常调用了ToPR函数啊。 --------------------编程问答-------------------- 在调用ToPR函数中“Sheet2.Copy”的地方就出错了,
我和一个同事都有这个问题,但是有个同事电脑可以正常运行
而且如果我把断点设置在“Sheet2.Copy ”,运行到这里在再按F5运行,
这时就不报错,Sheet可以正常被拷贝,然后出现保存的对话框
否则的话直接出现发送Excel错误报告的对话框了
--------------------编程问答-------------------- 楼主这段代码本来就不规范,Sheet2是代表什么都不太明确,
猜想可能的情况如下:
如果缺省情况下,新建的Excel文件中都是有“Sheet2”名称的工作表,所以执行起来没有问题。
但如果是当前文件没有“Sheet2”名称的工作就会出错了,
不过也解释不了为什么断点后可以继续执行。
要正确执行“复制第2个工作表”,应该这样写,要养成变量使用前先定义的习惯:
Option Explicit
Sub ToPR()
Dim sh As Worksheet
Dim sFn 'As String
If ActiveWorkbook.Worksheets.Count > 2 Then
Set sh = ActiveWorkbook.Worksheets(2)
sh.Copy
sFn = sh.Cells(3, 3).Value
If Application.Dialogs(5).Show(sFn) = True Then
ActiveWorkbook.Close SaveChanges:=True
Else
ActiveWorkbook.Close SaveChanges:=False
End If
End If
End Sub
--------------------编程问答-------------------- 谢谢大河马啊
不过我这段只是特意拷出来的一个示例,所以没有定义变量
这里还有奇特的现象:用按钮调用这个函数是不会出错的
我特意找不少同事测试了一下,应该是和我们公司自己开发的一个软件冲突造成的
只要没装那个软件的,就可以正常运行
补充:VB , VBA