我已经看到了其他一些与我的问题类似的问题,并且尝试了几种不同的解决方案,但结果仍然很奇怪。我的代码在AA列的另一个工作簿中找到了一个值,然后我想将该行从C列复制到BC列并粘贴到当前工作簿中。除了从C列复制到BC之外,所有代码均有效。由于某种原因,它开始复制AC列中的行。我尝试了一个标准范围,但我认为它是相对于活动单元格而言的相对范围,我不知道是否有一种方法可以处理负列字母,因此我尝试了Offset和.Cells,但都没有选择正确的范围。这是我尝试过的代码的几个示例:
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
您会认为所有这些都可以使用,但是它们都在活动单元格右侧的几列中开始了选择。
答案 0 :(得分:1)
问题是此行:.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
之类的字样,它应该可以工作。
答案 1 :(得分:1)
问题是,正如user3561813提到的那样,您在With
语句的末尾有一个Range对象。也许最简单的解决方案是使用:
Intersect(Rng.Entirerow, .Worksheet.Range("C:BC")).Copy
答案 2 :(得分:1)
.find之后的内容如何?
Rng.offset(0,3-rng.column).resize(1,53).copy
Rng是对具有所需校验数的单元格的引用,将零行偏移并返回C列,然后将其大小调整为1列乘53列(C到BC)并复制它。
在复制之前,您应该检查发现是否可行:
如果不是rng则为空
您不需要选择