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
我已经看到了其他几个与我类似的问题,并且尝试了几种不同的解决方案,但我仍然得到奇怪的结果。我的代码在另一个工作簿的 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