我试图将宏限制为特定的测试!工作表当我激活下面粘贴的宏并且我处于测试范围内时!工作表,宏工作。但是,当我尝试在另一张纸上激活宏时,收到错误消息。我需要做什么来修改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
答案 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