2015-11-19 5 views
-2

Не в сети с vba, и поэтому я уверен, что это глупая ошибка. Был бы очень полезно, если бы кто-то могли бы указать, что изVBA Неверное количество аргументов или недопустимое присвоение свойств

Код:

Private Function generate() As Integer 

Dim source_size As Long 
Dim target_size As Long 
Dim i As Long 
Dim j As Long 
Dim count As Long 
Dim source1 As Range 
Dim target1 As Range 

Set source1 = Worksheets("Filter").Range(C4, C6498) 
Set target1 = Worksheets("30").Range(A2, AP95787) 


source_size = source1.Height 
target_size = target1.Height 

For i = 1 To source_size Step 1 
    For j = 1 To target_size Step 1 
     If Application.source1.Cells(i, 1).Value = target1.Cells(j, 5).Value Then 
      target1.Row(j).Select 
      'Selection.Copy 
      Worksheet("result").Range("A1").Rows("1:1").Insert Shift:=xlDown 
     End If 
    Next j 
Next i 
generate = 0 


End Function 
+1

Откуда у вас ошибка? Каково желаемое поведение этого кода? Прочтите эту ссылку, прежде чем редактировать сообщение, чтобы улучшить его: http://stackoverflow.com/help/how-to-ask – R3uK

+0

см. Http://stackoverflow.com/questions/2237873/how-to-get -the-size-of-a-range-in-excel, чтобы понять, что такое .Height properties – Fabrizio

+1

Вероятно, '' 'Range (d, C6498)' '' недействителен таким образом. Вы можете использовать, например. '' 'Диапазон (« A1: C3 »)' '' или '' 'Диапазон (ячейки (...), ячейки (...))' ''. Возможно, вам нужен '' 'Range (" C4: C6498 ")' ''? – dee

ответ

1

Первого ты вопрос об объявлении своих диапазонов, C4, как он сам в VBA считается переменным, вам нужно использовать один их:

[C4] или Range("C4") или Cells(4,3) или Cells(4,"C")

Так что ваши линии или определяющие диапазоны ш ульд выглядеть следующим образом:

Set source1 = Worksheets("Filter").Range([C4], [C6498]) 
Set target1 = Worksheets("30").Range(Range("A2"), Range("AP95787")) 

Во-вторых, то .Height свойство даст вам размер диапазона, а не количество строк, чтобы получить количество строк, вам нужно использовать Range(...).Rows.Count

source_size = source1.Rows.count 
target_size = target1.Rows.count 

Вот ваш полный код:

Option Explicit 
Public Function generate() As Integer 
Dim source_size As Long 
Dim target_size As Long 
Dim i As Long 
Dim j As Long 
Dim count As Long 
Dim source1 As Range 
Dim target1 As Range 

Set source1 = Worksheets("Filter").Range("C4:C6498") 
Set target1 = Worksheets("30").Range("A2:AP95787") 
source_size = source1.Rows.count 
target_size = target1.Rows.count 

For i = 1 To source_size Step 1 
    For j = 1 To target_size Step 1 
     If Application.source1.Cells(i, 1).Value = target1.Cells(j, 5).Value Then 
      target1.Rows(j).Select 
      'Selection.Copy 
      Worksheets("result").Range("A1").Rows("1:1").Insert Shift:=xlDown 
     End If 
    Next j 
Next i 
generate = 0 
End Function 
Смежные вопросы

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