Select 活动单元格行内的范围

Select Range within Row of Active Cell

我已经看到了其他几个与我类似的问题,并且尝试了几种不同的解决方案,但我仍然得到奇怪的结果。我的代码在另一个工作簿的 AA 列中找到一个值,然后我想将该行从 C 列复制到 BC 列并粘贴到当前工作簿中。除了从 C 列复制到 BC 之外,所有代码都有效。由于某种原因,它开始从 AC 列复制行。我已经尝试了一个标准范围,但我认为它是相对于活动单元格的,我不知道是否有办法做负列字母,所以我尝试了 Offset,我尝试了 .Cells 但 none select 正确的范围。这是我尝试过的几个代码示例:

Private Sub ComboBox1_Change()

Dim checknum As String
Dim chkrow As String
Dim Rng As Range

prfile1 = Worksheets("setup").Range("B10").Value
prfile2 = Worksheets("setup").Range("B7").Value
filepath = Worksheets("setup").Range("e10").Value

checknum = ComboBox1.Value

'Workbooks.Open filepath & prfile2
Windows(prfile2).Activate
Worksheets("MRegister").Select

With Worksheets("MRegister").Range("AA:AA")
    Set Rng = .Find(What:=checknum, _
                        After:=.Cells(.Cells.Count), _
                        LookIn:=xlFormulas, _
                        LookAt:=xlWhole, _
                        SearchOrder:=xlByRows, _
                        SearchDirection:=xlNext, _
                        MatchCase:=False)
            Rng.Select
            .Range(.Cells(ActiveCell.Row, -24), .Cells(ActiveCell.Row, 28)).Select
            Selection.Copy
End With

Windows(prfile1).Activate
Sheets("ReprintOld").Range("M203:BM203").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

Application.CutCopyMode = False
Windows(prfile2).Activate
Sheets("MRegister").Range("A1").Select
ActiveWorkbook.Saved = True
ActiveWorkbook.Close
Sheets("ReprintOld").Range("A1").Select

End Sub

偏移量:

.Range(ActiveCell.Offset(0, -24), ActiveCell.Offset(0, 28)).Select

对于标准范围:

.Range("C" & ActiveCell.Row & ":BC" & ActiveCell.Row).Select

您可能认为所有这些都行得通,但它们都开始 selection 活动单元格右侧的几列。

问题是这一行:.Range(.Cells(ActiveCell.Row, -24), .Cells(ActiveCell.Row, 28)).Select

因为 With 语句引用 With Worksheets("MRegister").Range("AA:AA"),它试图找到列 "AA".

.Range 属性

如果您将其重写为 Worksheets("MRegister").Range(.Cells(ActiveCell.Row, -24), .Cells(ActiveCell.Row, 28)).Select 之类的内容,它应该可以工作。

正如 user3561813 所提到的,问题是 With 语句末尾有一个 Range 对象。也许最简单的解决方案是使用:

Intersect(Rng.Entirerow, .Worksheet.Range("C:BC")).Copy

在 .Find:

之后这样的东西怎么样?

Rng.offset(0,3-rng.column).resize(1,53).copy

Rng 是对具有所需校验码的单元格的引用,将零行偏移并返回到 C 列,然后将其大小调整为 1 行乘 53 列(C 到 BC)并复制它。

您应该在复制之前检查查找是否有效:

如果不是rng就什么都不是

你不需要select