Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 23834|回复: 10

[已解决]VBA打开指定的EXCEL文件

[复制链接]
发表于 2011-3-9 14:03 | 显示全部楼层 |阅读模式
本帖最后由 事后诸葛亮 于 2011-3-10 10:32 编辑

有项工作需要我做。可是我不会。
就是工作表中 A列是一个文件夹中所有文件的名字。(都在同一文件夹下,如“D:\desktop”)
如图所示:
QQ截图未命名.jpg
我想达到一个目的,就是单击A列相应单元格右键的时候,
就打开“D:\desktop”路径下对应的EXCEL文件。可能是.xls格式也可能是.xlsx格式(但肯定是EXCEL文件)
如何写代码?

注意:
如果选择的是A列右键,则需屏蔽系统的右键菜单。
如果是选择的多个单元格,则不打开文件,而是正常弹出系统的右键菜单。
这两个问题我目前的想到的解决方式就是
sub aa()
if target.count>1 then exit sub
if target.column=1 and target.row>=2 then
     打开对应的EXCEL文件代码
end if
end sub
当然可能思路或想法不对。还麻烦大家帮忙写一下代码。
谢谢了
求助.rar (306.85 KB, 下载次数: 15)
发表于 2011-3-9 14:48 | 显示全部楼层
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
    Dim s$
    If Target.Column = 1 And Target.Rows.Count = 1 Then
        Cancel = True
        If Len(Target) Then
            s = IIf(Right(Target.Value, 4) = ".xls", Target.Value, Target.Value & ".xls")
            Workbooks.Open (ThisWorkbook.Path & "\" & s)
        End If
    Else
        Cancel = False
    End If
End Sub
回复

使用道具 举报

 楼主| 发表于 2011-3-9 14:51 | 显示全部楼层
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
On Error Resume Next '防出错处理
   
    If Target.Count = 1 Then
        If Target.Row > 2 And Target.Column = 4 And Len(Target) > 0 Then
            Cancel = True '防止出现右键后弹出的系统菜单
回复

使用道具 举报

 楼主| 发表于 2011-3-9 14:57 | 显示全部楼层
回复 dongqing1998 的帖子

你的代码我用起来有错误。。
QQ截图未命名.jpg
我上传附件了,麻烦你在附件中帮我修改一下吧?
谢谢了
回复

使用道具 举报

发表于 2011-3-9 14:58 | 显示全部楼层
附件是按你的文件做的。

求助(事后诸葛).rar

312.35 KB, 下载次数: 37

回复

使用道具 举报

发表于 2011-3-9 15:08 | 显示全部楼层    本楼为最佳答案   
把里面的代码改成下面这样(附件是按2003版本做的,既然你已经有文件扩展名,就不用再加判断了):

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
    Dim s$
    If Target.Column = 1 And Target.Row > 1 And Target.Rows.Count = 1 And Len(Target) Then
        Cancel = True
        Workbooks.Open (ThisWorkbook.Path & "\评优汇总\" & Target.Value)
    Else
        Cancel = False
    End If
End Sub
回复

使用道具 举报

 楼主| 发表于 2011-3-10 08:31 | 显示全部楼层
本帖最后由 事后诸葛亮 于 2011-3-10 09:19 编辑

QQ截图未命名.jpg
当选择 两列数据时,如A4:C4弹出错误
原因是少了个If Target.Count > 1 Or Target = "" Then Exit Sub
Target = "" 是考虑到点击空白单元格时的防出错处理

但是 当我选择某一整行(如第5行)右键时也出现上面的错误。
这个防出错处理代码我就不会写了。
请帮忙修改一下。

回复

使用道具 举报

发表于 2011-3-10 10:27 | 显示全部楼层
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
    Dim s$
    On Error GoTo 100
    If Target.Column = 1 And Target.Row > 1 And Target.Rows.Count = 1 And Len(Target) Then
        Cancel = True
        Workbooks.Open (ThisWorkbook.Path & "\评优汇总\" & Target.Value)
    Else
        Cancel = False
    End If
100:
    Cancel = False
End Sub
回复

使用道具 举报

 楼主| 发表于 2011-3-10 10:29 | 显示全部楼层
楼上的代码可行。
不过我想到更好的一个办法。那就是把代码放到一个IF语句里去,就是if target.count=1 时

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
    Dim s$
if target.count=1 then
    If Target.Column = 1 And Target.Row > 1 And Target.Rows.Count = 1 And Len(Target) Then
        Cancel = True
        Workbooks.Open (ThisWorkbook.Path & "\评优汇总\" & Target.Value)
    Else
        Cancel = False
    End If
end if
End Sub
这个代码也可以。
回复

使用道具 举报

发表于 2011-3-10 10:31 | 显示全部楼层
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
    Dim s$
    On Error GoTo 100
    If Target.Column = 1 And Target.Row > 1 And Target.Rows.Count = 1 And Len(Target) Then
        Cancel = True
        Workbooks.Open (ThisWorkbook.Path & "\评优汇总\" & Target.Value)
    Else
100:
        Cancel = False
    End If
End Sub
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-19 03:51 , Processed in 0.336576 second(s), 9 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表