我正在尝试使用Id Header作为Target来选择特定列。我不会使用列数,因为ID列可以在电子表格和其他之间进行更改。所以我使用了.find
功能。
最终目的是复制这个col
错误信息:
RunTime错误'1004':应用程序定义或对象定义错误。
非常感谢您的帮助,如果您有其他策略来实现目标,请分享。
Sub SelectCol ()
Dim WorkSH As Worksheet
Dim TargetCell As Range
Dim FirstCell As Range
Dim LastCell As Range
Dim ColToCopy As Range
Dim RowNbr As Long
Dim ColNbr As Long
Set WorkSh = ActiveSheet
Set TargetCell = WorkSh.UsedRange.Find ("Id")
TargetCell.Select
Set FirstCell = ActiveCell.Offset( 1,0 )
ColNbr = FirstCell.Column
' If Possible I want to remove "c" and replace it with rhe Var "ColNbr"
RowNbr = WorkSh.Cells( WorkSh.Rows.Count, "C"). End(XlUp).Row
'line doesn't work even if I set this cells basically like this Cells(5, 8957) 'Which is very bizzare
Set LastCell = Cells (RowNbr, ColNbr)
Set ColToCopy = Range ( FirstCell, LastCell )
ColToCopy.Copy
End Sub
你的代码对我来说真的很好用。那就是说,我把它清理了一下:
Sub SelectCol()
Dim TargetCell As Range
Dim RowNbr As Long
With ThisWorkbook.ActiveSheet
Set TargetCell = .UsedRange.Find("Id")
If Not TargetCell Is Nothing Then
RowNbr = .Cells(.Rows.Count, TargetCell.Column).End(xlUp).Row
.Range(TargetCell.Offset(1, 0), .Cells(RowNbr, TargetCell.Column)).Copy
End If
End With
End Sub
因为我尽量不使用单一使用变量,所以需要的变量较少。
With ThisWorkbook.ActiveSheet
确保您正在处理您认为自己的工作表。此外,它允许这个Set TargetCell = .UsedRange.Find("Id")
而不是更长
Set TargetCell = ThisWorkbook.ActiveSheet.UsedRange.Find("Id")
。
If Not TargetCell Is Nothing
测试是否已找到"Id"
因为如果它缺失RowNbr
将无法设置。 TargetCell.Column
= 0。
“应用程序定义或对象定义的错误”表示对象存在错误。在你的代码中你有这个:
Dim TargetCell, FirstCell, LastCell, ColToCopy As Range
这意味着TargetCell
,FirstCell
和LastCell
被声明为Variant类型的变量而不是Range Objects。要将它们声明为范围对象,请执行以下操作:
Dim TargetCell As Range
Dim FirstCell As Range
Dim LastCell As Range
Dim ColToCopy As Range