如何将VBA代码限制为特定的工作表?

时间:2018-11-02 19:10:33

标签: excel vba excel-vba

我试图将宏限制为特定的测试!工作表当我激活下面粘贴的宏并且我处于测试范围内时!工作表,宏工作。但是,当我尝试在另一张纸上激活宏时,收到错误消息。我需要做什么来修改VBA代码,以便使其在工作簿中的任何其他工作表上起作用,您是否有任何想法?谢谢

Sub Test ()
' Test Macro
'
' Keyboard Shortcut: Ctrl+Shift+B
'
  Range ("Test!B1").Select 
  Selection.ClearContents
  Range ("Test!B2").Select
  Selection.ClearContents
  Range ("Test!B3").Select
  Selection.ClearContents
End Sub

3 个答案:

答案 0 :(得分:5)

您必须直接参考工作表:

<table>
   <thead>
     <tr>
     <th ng-click="sortData('id')">ID <i ng-class="getSortClass('id')"></i></th>
     <th ng-click="sortData('name')">Name <i ng-     class="getSortClass('name')"></i></th>
     <th ng-click="sortData('age')">Age <i ng- class="getSortClass('age')"></i></th>
     <th>....</th>
   </tr>
  </thead>
  <tbody>
    <tr ng-repeat="row in elem.data | orderBy:sortColumn:reverseSort">
     <td>...</td>
     ....
    </tr>
  </tbody>
</table>

其他说明: 请勿使用Dim ws as worksheet set ws = Thisworkbook.Worksheets("Test") with ws .Range("B1:B3").ClearContents end with .Select。只需直接在对象上进行操作即可。 您的原始代码中有字符串问题,可能会导致编译时错误(已在我的代码中修复) 您可以在一行代码中清除整个范围,而不是逐个单元格

答案 1 :(得分:3)

如果工作表在编译时位于ThisWorkbook中(即,承载VBA代码的同一文件),那么您根本不需要检索工作表-不用名称,不用索引。

VBA已经为该工作表(以及Worksheet中的每个工作表)声明了一个全局ThisWorkbook对象变量。验证工作表的(Name)属性;将其更改为TestSheet,然后可以在代码中的任何位置使用TestSheet作为标识符来引用该工作表。

TestSheet.Range("B1:B3").ClearContents

无论用户将工作表移动到工作簿中的另一个索引/位置,还是用户将工作表的“选项卡”重命名为其他名称,此代码都将起作用。

ThisWorkbook.Worksheets(1).Range("B1:B3").ClearContents ' breaks if sheet is moved
ThisWorkbook.Worksheets("Test").Range("B1:B3").ClearContents ' breaks if sheet/tab is renamed

答案 2 :(得分:0)

基础

如果您想学习一些东西,则应该学习版本1和2,它们分别是版本3和4的详尽版本。

使用Option Explicit快速发现错误。
使用常量可以快速更改值。
使用对象引用不必输入名称。

假定您将这些代码复制到工作表“测试”所在的工作簿的任何模块中。

Option Explicit

Sub Test1()

  Const cStrWs As String = "Test" 'Worksheet Name
  Const cStrRng As String = "B1:B3" 'Range to 'DEL'

  Dim oWs As Worksheet 'Worksheet Object
  Dim oRng As Range 'Range Object

  Set oWs = ThisWorkbook.Worksheets(cStrWs) 'Create a reference to the worksheet
  Set oRng = oWs.Range(cStrRng) 'Create a reference to the range

  oRng.ClearContents

End Sub

Sub Test2()

  Const cStrWs As String = "Test" 'Worksheet Name
  Const cStrCell As String = "B1" 'Cell to 'DEL'
  Const cLngCells As Long = 3 'Number of cells

  Dim oWs As Worksheet 'Worksheet Object
  Dim oRng As Range 'Range Object

  Set oWs = ThisWorkbook.Worksheets(cStrWs) 'Create a reference to the worksheet
  Set oRng = oWs.Range(cStrCell) 'Create a reference to the cell range

  oRng.Resize(3, 1).ClearContents

End Sub

Sub Test3()
  ThisWorkbook.Worksheets("Test").Range("B1:B3").ClearContents
End Sub

Sub Test4()
  ThisWorkbook.Worksheets("Test").Range("B1").Resize(3, 1).ClearContents
End Sub