选择除标题之外的已使用范围的列,但使用特定标题作为目标

问题描述 投票:0回答:2

我正在尝试使用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
excel vba excel-vba
2个回答
1
投票

你的代码对我来说真的很好用。那就是说,我把它清理了一下:

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。


0
投票

“应用程序定义或对象定义的错误”表示对象存在错误。在你的代码中你有这个:

Dim TargetCell, FirstCell, LastCell, ColToCopy As Range

这意味着TargetCellFirstCellLastCell被声明为Variant类型的变量而不是Range Objects。要将它们声明为范围对象,请执行以下操作:

Dim TargetCell As Range
Dim FirstCell As Range
Dim LastCell As Range
Dim ColToCopy As Range
© www.soinside.com 2019 - 2024. All rights reserved.