2014-05-06 199 views
-1

我对VBA相当陌生,所以我想知道是否有人能对我一直在努力的东西伸出援助之手。这是一个相当简单的概念,我相信其中大部分工作除了我似乎无法工作的一项功能之外完成。Excel中的宏VBA

到目前为止,我已经创建了一个书签功能,其中当前选定的一个或多个单元格被突出显示,并在第一次调用VBA脚本时将该范围命名为“书签”。通过使用VBA脚本,用户周围的第二次被从先前高亮显示的单元格中取出,范围名称以及高亮区被删除。但是,此功能仅适用于一个工作簿及其中的相应工作表。

我希望能够将此功能用于当前打开的所有工作簿,或者可能是所有特定文件夹中的Excel文档。我的代码如下:

Sub setBookmark() 

    Dim rRangeCheck As Range 
    Dim myName As Name 

    On Error Resume Next 
    Set rRangeCheck = Range("bookmark") 
    On Error GoTo 0 
    If rRangeCheck Is Nothing Then 

     ThisWorkbook.Names.Add "bookmark", Selection 
     With Selection.Interior 
      .Pattern = xlSolid 
      .PatternColorIndex = xlAutomatic 
      .Color = 65535 
      .TintAndShade = 0 
      .PatternTintAndShade = 0 
     End With 
    Else 
     Application.Goto Range("bookmark") 

     With Selection.Interior 
      .Pattern = xlNone 
      .TintAndShade = 0 
      .PatternTintAndShade = 0 
     End With 

     For Each myName In ThisWorkbook.Names 
      If myName.NameLocal = "bookmark" Then myName.Delete 
     Next 
    End If 

End Sub 

回答

0

修改这样的:

Dim rRangeCheck 
Dim myName As Name 

On Error Resume Next 
rRangeCheck = "" 
rRangeCheck = Application.Names("bookmark") 
On Error GoTo 0 
If rRangeCheck = "" Then 

    ActiveWorkbook.Names.Add "bookmark", Selection 
    With Selection.Interior 
     .Pattern = xlSolid 
     .PatternColorIndex = xlAutomatic 
     .Color = 65535 
     .TintAndShade = 0 
     .PatternTintAndShade = 0 
    End With 
Else 
    Application.Goto Range("bookmark") 
    Application.Goto Range("bookmark") 

    With Selection.Interior 
     .Pattern = xlNone 
     .TintAndShade = 0 
     .PatternTintAndShade = 0 
    End With 

    For Each myName In ActiveWorkbook.Names 
     If myName.NameLocal = "bookmark" Then myName.Delete 
    Next 
End If 

双Applicatio.Goto这是必须的工作簿的选择+床单和细胞...
如果删除,只有它被选中的工作簿。