我正在 try catch 从另一个工作簿复制到一个工作簿的工作表。
从另一个工作簿复制工作表时,不会触发 Workbook_NewSheet
事件。
仅当用户通过(插入->工作表菜单选项)手动插入它们,或者通过 VBA 添加新工作表作为 ThisWorkbook.Worksheets.Add
时,才会触发它。
我试图捕获的基本上是一个粘贴操作,该操作会生成一个新工作表。
这可能来自以下任何用户操作:
- 用户通过按住 Control 键拖动现有工作表来复制现有工作表(这会添加新工作表)
- 用户从另一个工作簿复制工作表
- 用户从另一个工作簿中移动了工作表
或以下任意 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/