繁体   English   中英

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

[英]How to restrict VBA code to a specific worksheet?

我试图将宏限制为特定的测试! 工作表 当我激活下面粘贴的宏并且我在测试中时! 工作表,宏有效。 但是,当我尝试在不同的工作表上激活宏时,我收到一个错误。 关于我需要做什么来修改 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

您必须直接引用工作表:

Dim ws as worksheet
set ws = Thisworkbook.Worksheets("Test")

with ws
  .Range("B1:B3").ClearContents  
end with

其他注意事项:不要使用.SelectSelection 只需直接对对象进行操作。 您的原始代码中有字符串问题会导致编译时错误(已在我的代码中修复)您可以在一行代码中清除整个范围,而不是逐个单元格

如果工作表在编译时存在于ThisWorkbook (即托管 VBA 代码的同一个文件),那么您根本不需要检索工作表 - 不是按名称,不是按索引。

VBA 已经为该Worksheet表(以及ThisWorkbook每个Worksheet声明了一个全局Worksheet对象变量。 验证工作表的(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

基础知识

如果你想学习一些东西,你应该学习版本 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM