Выберите диапазон в строке активной ячейки - PullRequest
0 голосов
/ 23 октября 2018

Я видел несколько других вопросов, похожих на мой, и я пробовал несколько разных решений, но я все еще получаю странные результаты.Мой код находит значение в другой книге в столбце AA, затем я хочу скопировать эту строку из столбца C в столбец BC и вставить ее в текущую книгу.Весь код работает, кроме копирования из столбца C в BC.По какой-то причине он начинает копировать строку из столбца AC.Я пробовал стандартный диапазон, но я думаю, что он относителен к активной ячейке, и я не знаю, есть ли способ сделать отрицательные буквы столбцов, поэтому я попытался сместить и попытался. Ячейки, но ни один не выбрал правильный диапазон.Вот несколько примеров кода, который я пробовал:

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

Вы быдумаю, что все это будет работать, но все они начнут выделять несколько столбцов справа от активной ячейки.

Ответы [ 3 ]

0 голосов
/ 24 октября 2018

Проблема, как было упомянуто пользователем 3561813, в том, что у вас есть объект Range в конце вашего оператора With.Возможно, самым простым решением было бы использовать:

Intersect(Rng.Entirerow, .Worksheet.Range("C:BC")).Copy
0 голосов
/ 25 октября 2018

Как насчет того, что-то вроде этого после .Find:

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

Rng является ссылкойв ячейку с нужным контрольным числом, сместите эти нулевые строки и верните в столбец C, затем измените его размер на 1 строку на 53 столбца (от C до BC) и скопируйте его.

Необходимо проверить, что поиск работал докопия:

Если не rng - ничто, тогда

Вам не нужно выбирать

0 голосов
/ 23 октября 2018

Проблема заключается в следующей строке: .Range(.Cells(ActiveCell.Row, -24), .Cells(ActiveCell.Row, 28)).Select

Поскольку оператор With ссылается на With Worksheets("MRegister").Range("AA:AA"), он пытается найти свойство .Range столбца "AA".

Если вы переписываете что-то вроде Worksheets("MRegister").Range(.Cells(ActiveCell.Row, -24), .Cells(ActiveCell.Row, 28)).Select, оно должно работать.

...