excel - VBA 错误 1004 选择工作表范围失败
问题描述
当在“M”列中写入“X”时,我想将我的工作表的一部分复制到另一张工作表:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim triggercells As Range
Dim lastrow As Long
Set triggercells = Range("M1:M100")
If Not Application.Intersect(triggercells, Range(Target.Address)) Is Nothing Then
If Target.Value = "X" Or Target.Value = "x" Then
ThisWorkbook.Worksheets("Offen").Range(Cells(Target.Row, 1), Cells(Target.Row, 13)).Select ' select part of changed row
Selection.Copy
ThisWorkbook.Worksheets("Erledigt").Visible = True 'unhide sheet
ThisWorkbook.Worksheets("Erledigt").Select
lastrow = (ThisWorkbook.Sheets("Erledigt").Cells(Rows.Count, 1).End(xlUp).Row) + 1 'get last emty row
但把我扔在这里:
ThisWorkbook.Worksheets("Erledigt").Range(Cells(lastrow, 1), Cells(lastrow, 13)).Select ' select part of row to paste to
Selection.Paste
ThisWorkbook.Worksheets("Offen").Select 'select sheet
ThisWorkbook.Worksheets("Erledigt").Visible = False 'hide sheet
Application.CutCopyMode = False
End If
End If
End Sub
与所述运行时错误。
解决方案
该错误是因为Cells(lastrow, 1)
没有将 ActiveSheet“Erledigt”作为父级,而是将事件代码所在的工作表作为父级。所以 theRange
和 theCells
有不同的父母......要拥有相同的父母工作表,应该通过重写这部分来明确指出:
Range(Cells(lastrow, 1), Cells(lastrow, 13)).Select
对此:
With ThisWorkbook.Worksheets("Erledigt")
.Range(.Cells(lastrow, 1), .Cells(lastrow, 13)).Select
End With
一般来说,如何避免在 Excel VBA 中使用 Select是一个好主意,但这是下一个级别。
推荐阅读
- python - 如何将数字与输入分开以添加它们?
- xml - 覆盖视图:website_sign/static/src/xml/website_sign_common.xml
- typescript - WARN [middleware:karma]: 文件类型无效,默认为 js。ts
- c - Why does running C code in Vim skip scanf()?
- django - django-rest-swagger==2.1.1 查询参数
- sql - SQL Oracle XML 空标签和属性
- rabbitmq - 如何恢复 RabbitMQ 队列?
- swift - 如果所有文本字段为空,如何返回上一个文本字段?
- python-3.x - “PDF 文件尚未解密”问题仍然存在于 PyPDF2
- spring - 我可以在 KotlinTest 中使用 @WithMockUser 吗?