2015-02-24 3 views
1

Я довольно новичок в VBA и не могу получить работу loop.Excel VBA, Loop

Колонка J содержит определенные Идентификационные номера. Для каждого Идентификационный номер У меня есть несколько строк, отображаемых в моей базе данных. Я отсортировал свою базу данных по столбцу J (по возрастанию). Я хотел бы отфильтровать все значения в столбцах J и скопировать все строки для каждого Идентификационный номер в новый лист, который я хочу переименовать как Идентификационный номер. Вот макро, но loop не работает (Run-time error 13, Type mismatch, error in the following code row: For i = 45 To LastEmpNo)

Любая помощь будет приветствоваться. Спасибо

Sub Macro3() 

Dim MyDataFirstCell 
Dim MyDataLastCell 
Dim EmpNoStart 
Dim EmpNoFinish 
Dim i As Integer 

Range("A1").Select 
MyDataFirstCell = ActiveCell.Address 
Selection.End(xlDown).Select 
Selection.End(xlToRight).Select 
MyDataLastCell = ActiveCell.Address 

Range("J2").Select 
EmpNoStart = ActiveCell.Address 
Selection.End(xlDown).Select 
EmpNoFinish = ActiveCell.Address 

Range(EmpNoStart & ":" & EmpNoFinish).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Columns _ 
    ("K:K"), Unique:=True 

Dim FirstEmpNo 
Dim LastEmpNo 

Range("K2").Select 
FirstEmpNo = ActiveCell.Address 
Selection.End(xlDown).Select 
LastEmpNo = ActiveCell.Address 

For i = FirstEmpNo To LastEmpNo 

    Range("J1").Select 
    Selection.AutoFilter 
    ActiveSheet.Range(MyDataFirstCell & ":" & MyDataLastCell).AutoFilter Field:=10, Criteria1:=i 
    Rows("1:1").Select 
    Range("C1").Activate 
    Range(Selection, Selection.End(xlDown)).Select 
    Selection.Copy 
    Sheets.Add After:=Sheets(Sheets.Count) 
    ActiveSheet.Paste 
    Columns("B:B").EntireColumn.AutoFit 
    Cells.Select 
    Cells.EntireColumn.AutoFit 
    Sheets("Sheet1").Select 
    Sheets("Sheet1").Name = i 

Next i 


End Sub 

ответ

1

Вы не можете перебирать одно значение строки в другое. Цикл «For» ожидает два числовых значения.

?activecell.Address 
$C$9 
?activecell.Row 
9 

Поэтому:

FirstEmpNo = ActiveCell.Row 
Selection.End(xlDown).Select 
LastEmpNo = ActiveCell.Row