2016-05-29 4 views
-1

Здесь я попытался случайным двоеточия, однако, сказать, мне не автозаполнения, и то же самое работает для моего randomRow()Почему автозаполнение не удалось?

Sub randomCol() 

Dim Line As Integer 
Line = LastRow + 1 
Range("N154").Select 
ActiveCell.FormulaR1C1 = "=RAND()" 

Dim randomRange As String 
randomRange = "N" & Line & ":BF" & Line 
MsgBox randomRange 
Selection.AutoFill Destination:=Range(randomRange), Type:=xlFillDefault 

Range("N2:BF" & Line).Select 
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear 
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add key:=Range("N" & LastRow + 1), _ 
    SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal 
With ActiveWorkbook.Worksheets("Sheet1").Sort 
    .SetRange Range("N1:BF" & Line) 
    .Header = xlGuess 
    .MatchCase = False 
    .Orientation = xlLeftToRight 
    .Apply 
End With 


End Sub 
+0

Функция LastRow As Integer LastRow = ActiveSheet.Cells (Rows.Count, "L") End (xlUp) .Row это функция End Function –

ответ

0

метод автозаполнения требует, чтобы адресат должен включать в себя исходный диапазон. Правильный синтаксис для автозаполнения, например, только для примера.

Set sourceRange = Worksheets("Sheet1").Range("A1:A2") 
Set fillRange = Worksheets("Sheet1").Range("A1:A20") 
sourceRange.AutoFill Destination:=fillRange 

Соответственно, я изменил вашу программу и надеюсь, что она должна работать нормально.

Sub randomCol() 
    Dim Line As Integer 
    Line = LastRow + 1 
    Range("N154").Select 
    ActiveCell.FormulaR1C1 = "=RAND()" 
    Set SourceRange = Worksheets("Sheet1").Range("N154") 'Changed you can set the range required by you. 
    Dim randomRange As String 
    randomRange = "N" & Line & ":BF" & Line 
    Set fillRange = Worksheets("Sheet1").Range("n1:BF154") 'Set fill range appropriately but should include source range 
    MsgBox randomRange 
    'changed  
    'Selection.AutoFill Destination:=Range(randomRange), Type:=xlFillDefault 

    SourceRange.AutoFill Destination:=fillRange 
    Range("N2:BF" & Line).Select 
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear 
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("N" & LastRow + 1), _ 
     SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal 
    With ActiveWorkbook.Worksheets("Sheet1").Sort 
     .SetRange Range("N1:BF" & Line) 
     .Header = xlGuess 
     .MatchCase = False 
     .Orientation = xlLeftToRight 
     .Apply 
    End With 
End Sub 
+0

. @Neo Zhang Рабочая копия была загружена в Dropbox для просмотра и настройки. Мой подход заключается в том, чтобы выяснить недостаток кода OP и попытаться его исправить. Для решения всегда существует несколько решений. [Автозаполнение Failure] (https://www.dropbox.com/s/bbnjykctx0fngtg/Auto%20fill%20failure%20VBA.xlsm?dl=0) – skkakkar

0

редактировать после уточнения OP, что LastRow является функция, возвращающая ActiveSheet.Cells(Rows.Count, "L").End(xlUp).Row

назначения должен включать в себя исходный диапазон, в то время как последний «N154» и первые являются клетки в ряду Line между колоннами " N»и„BF“, так что было бы работать только если Line является 154.

кроме того, лучше определить как Line и LastRow() как из Long типа в вместо Integer

так, что ваш код может измениться, как следует:

Sub randomCol()  
Dim Line As Long 

Line = Lastrow + 1 
Range("N" & Line).Select 
ActiveCell.FormulaR1C1 = "=RAND()" 

Dim randomRange As String 
randomRange = "N" & Line & ":BF" & Line 
MsgBox randomRange 
Selection.AutoFill Destination:=Range(randomRange), Type:=xlFillDefault 

Range("N2:BF" & Line).Select 
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear 
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("N" & Line), _ 
    SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal 
With ActiveWorkbook.Worksheets("Sheet1").Sort 
    .SetRange Range("N1:BF" & Line) 
    .Header = xlGuess 
    .MatchCase = False 
    .Orientation = xlLeftToRight 
    .Apply 
End With  

End Sub 

Function LastRow() As Long 
    LastRow = ActiveSheet.Cells(Rows.count, "L").End(xlUp).Row 
End Function 

но вы можете также рассмотреть следующие вопросы:

  • , чтобы избежать выбора и активации

  • нет необходимости Autofill Фактически, поскольку вы просто вставляете формулу

так что ваш код может стать:

Sub randomCol2() 
    Dim Line As Long 

    With ActiveWorkbook.Worksheets("Sheet1") 
     Line = .Cells(.Rows.count, "L").End(xlUp).Row + 1 
     .Columns("N:BF").Rows(Line).FormulaR1C1 = "=RAND()" 

     With .Sort 
      .SortFields.Clear 
      .SortFields.Add Key:=Range("N" & Line), _ 
       SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal 
      .SetRange Range("N1:BF" & Line) 
      .Header = xlGuess 
      .MatchCase = False 
      .Orientation = xlLeftToRight 
      .Apply 
     End With 
    End With 
End Sub 
+0

LastRow = ActiveSheet.Cells (Rows.Count, «L»). End (xlUp) .Row Это функция –

+0

Я вижу. Я отредактировал ответ, чтобы включить эту информацию. Но проблема остается прежней: _ «пункт назначения должен включать исходный диапазон» _, а последний - «N154», а первые - ячейки в строке «Линия» между столбцами «N» и «BF», поэтому работайте, только если 'Line' составляет 154. – user3598756

+0

@NeoZhang: вы прошли через это? – user3598756

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