2012-05-14 3 views
0

Я пытаюсь выбрать целую строку на другом листе, а затем скопировать строку на лист, в котором я сейчас находится, с макросом. Код отлично работает, если Sub() подчиняется целым целым жестко закодированным, но когда я помещаю переменную, я получаю ошибку «Выбрать метод диапазона с ошибкой». вот код у меня есть:Выбор целой строки на основе переменной excel vba

Sheets("BOM").Select 
Rows(copyFromRow & ":" & copyFromRow).Select 
Selection.Copy 
Sheets("Proposal").Select 
Rows(copyToRow & ":" & copyToRow).Select 
ActiveSheet.Paste 
copyToRow = copyToRow + 1 
Rows(copyToRow & ":" & copyToRow).Select 
Application.CutCopyMode = False 
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove 

, если вместо того, чтобы я использовал:

Rows("52:52").Select 
Selection.Copy 

это работает отлично, но когда переменная существует, возникает ошибка.

Thanks

+0

Вы проверили значение 'copyFromRow' в режиме отладки? Это 52? Также, если 'copyFromRow' является числом, вы можете просто использовать' Rows (copyFromRow) '. – assylias

+0

да, это правильное значение, и я пробовал оба способа, ни работает – thebiglebowski11

ответ

3

Я просто проверял код на дне и печатает 16384 дважды (я на Excel 2010) и выбирается первая строка. Ваша проблема, кажется, где-то в другом месте.

Вы пытались избавиться от выбирает:

Sheets("BOM").Rows(copyFromRow).Copy 
With Sheets("Proposal") 
    .Paste Destination:=.Rows(copyToRow) 
    copyToRow = copyToRow + 1 
    Application.CutCopyMode = False 
    .Rows(copyToRow).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove 
End With 

Тест-код, чтобы получить убежден, что проблема не кажется, что вы думаете.

Sub test() 

    Dim r 
    Dim i As Long 

    i = 1 

    r = Rows(i & ":" & i) 
    Debug.Print UBound(r, 2) 
    r = Rows(i) 
    Debug.Print UBound(r, 2) 
    Rows(i).Select 

End Sub 
0

Вам необходимо добавить котировки. VBA является перевод

Rows(copyToRow & ":" & copyToRow).Select` 

в

Rows(52:52).Select 

Попробуйте изменить

Rows(""" & copyToRow & ":" & copyToRow & """).Select 
+0

Это не компилируется – thebiglebowski11

+0

Нет, 'copyToRow &": "& copyToRow' уже является строкой. То, что вы предлагаете, вызовет ошибку. – assylias

1

Пила этот ответ на другом сайте, и он работает и для меня!

Опубликовано Shawn 14 октября 2001 1:24 вечера

var1 = 1

var2 = 5

Rows(var1 & ":" & var2).Select

Это работает для меня, похоже, вы просто должны держать переменные за пределами котировок и добавить оператор и (&)

-Shawn

1

Ключ в кавычки ободочной и &, то есть строки (переменная & ":" & переменная) .Select

Адаптировать это:

Rows(x & ":" & y).select 

где x и y - ваши переменные.

Некоторые другие примеры, которые могут помочь вам понять

Rows(x & ":" & x).select 

Или

Rows((x+1) & ":" (x*3)).select 

Или

Rows((x+2) & ":" & (y-3)).select 

Надеюсь, вы поняли идею.

Смежные вопросы