vba - 如何捕获通过 Excel VBA 中的复制/粘贴添加的工作表

标签 vba excel excel-2003

我正在 try catch 从另一个工作簿复制到一个工作簿的工作表。
从另一个工作簿复制工作表时,不会触发 Workbook_NewSheet 事件。 仅当用户通过(插入->工作表菜单选项)手动插入它们,或者通过 VBA 添加新工作表作为 ThisWorkbook.Worksheets.Add 时,才会触发它。

我试图捕获的基本上是一个粘贴操作,该操作会生成一个新工作表。

这可能来自以下任何用户操作:

  1. 用户通过按住 Control 键拖动现有工作表来复制现有工作表(这会添加新工作表)
  2. 用户从另一个工作簿复制工作表
  3. 用户从另一个工作簿中移动了工作表

或以下任意 VBA 代码:

SourceWorkbook.Sheets(“SourceSheet”).Copy Before:=TargetWorkbook.worksheets(“SheetNameIn Target”) 'copy across workbook'  
SourceWorkbook.Sheets(“SourceSheet”).Move Before:=TargetWorkbook.worksheets(“SheetNameIn Target”) 'move across workbook'  
ThisWorkbook. Sheets(“SheetName”).Copy 'copy within workbook'  

如果您知道在 VBA 中捕获此操作/宏结果的任何方法,那将会非常有帮助。

请注意,我不想避免这样的用户操作(所以我不想保护工作簿),但我想以编程方式处理粘贴的工作表以验证数据,如果类似的工作表已存在,则更新现有工作表而不是在两个工作表中具有相同的数据。

最佳答案

复制工作表时,其名称始终以“(2)”或至少“)”结尾。你可以这样检查

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    If Sh.Name Like "*(2)" Then
        Application.DisplayAlerts = False
        Sh.Delete
        Application.DisplayAlerts = True
    End If
End Sub

关于vba - 如何捕获通过 Excel VBA 中的复制/粘贴添加的工作表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/722409/

相关文章:

sql - 在 MS Access 中从 VB 运行查询

vba - 使用反向索引+匹配向上查找值

excel - Access/Excel VBA - 跳过每个循环

vba - 数组、匹配、排序

vsto - Excel 2003 文档级自定义和 Excel 2010 兼容性

vba - 在所有逗号后插入空格(如果缺少),千位分隔符除外

python - VBA 中的表达式语句

mysql - 在不单击每个单元格的情况下更改标准格式的数字 - Excel

forms - VBA 表单最多可以容纳多少个控件?

vba - Excel VBA - 如何插入没有公式的普通值?