当前位置:编程学习 > VB >>

奇怪的问题,菜单做深了,调用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
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,