2017-10-24 1 views
0

안녕하세요. 다음 VBA 코드가 있는데 한 번에 하나씩 실패합니다.자동 필터가 범위를 벗어났습니다.

Sub theathersplitmacro() 

Dim SDrv As String 
Dim DDrv As String 
Dim Sfname As String 
Dim Dfname As String 
Dim wkbSrc As Workbook 
Dim wkbDst As Workbook 
Dim shtname(1 To 16) As Variant 
Dim i As Integer 
Dim Lastrow As Variant 
Dim destination_file As String 
'Dim regions As String 
Dim theater As String 
Dim j As Integer 


For j = 2 To 9 

destination_file = Workbooks("VBA Master 
Copy.xlsb").Sheets("Data").Range("A" & j).Value & ".xlsb" 
'regions = Workbooks("VBA Master Copy.xlsb").Sheets("Data").Range("C" & 
j).Value 
theater = Workbooks("VBA Master Copy.xlsb").Sheets("Data").Range("D" & 
j).Value 



shtname(1) = "DataQTR" 
shtname(2) = "DataSWDriver" 
shtname(3) = "DataMTD" 
shtname(4) = "DataWeekly" 
shtname(5) = "DataSoftware" 
shtname(6) = "DataCloud" 
shtname(7) = "DataServices" 
shtname(8) = "TopCustomer" 
shtname(9) = "TopDeals" 
shtname(10) = "TopPartners" 
shtname(11) = "DataForecast" 
shtname(12) = "DataFcstCloud" 
shtname(13) = "DataFcstSoftware" 
shtname(14) = "DataFcstServices" 
shtname(15) = "DataServicesSW" 
shtname(16) = "TopCustomerDebooking" 

SDrv = "C:\Users\skumawat\Documents\Explore\" 
Sfname = "Theater_Bookings - New Format with formulae.xlsb" 

DDrv = "C:\Users\skumawat\Documents\Explore\" 
    Dfname = destination_file 



    With Application 
    .EnableEvents = False 
    .ScreenUpdating = False 
    .DisplayAlerts = False 
    .Calculation = xlCalculationManual 
    End With 


    Set wkbSrc = Workbooks.Open(SDrv & Sfname) 
    Set wkbDst = Workbooks.Open(DDrv & Dfname) 



For i = 1 To 15 

    wkbSrc.Worksheets(shtname(i)).Activate 
    Lastrow = wkbSrc.Worksheets(shtname(i)).Range("k" & 
    Rows.Count).End(xlUp).Row 
wkbSrc.Worksheets(shtname(i)).Range("A1:BZ" & Lastrow).Select 


If Worksheets(shtname(i)).AutoFilterMode = True Then 
wkbSrc.Worksheets(shtname(i)).AutoFilter.Sort.SortFields.Clear 
End If 

wkbSrc.Worksheets(shtname(i)).Range("A1:BZ" & Lastrow).Select 
Selection.AutoFilter 




wkbSrc.Worksheets(shtname(i)).Range("$k$1:$k$" & Lastrow).AutoFilter 
Field:=11, Criteria1:=theater 



Range("$A$1:$BZ$" & Lastrow).SpecialCells(xlCellTypeVisible).Copy 

wkbDst.Worksheets(shtname(i)).Range("A1").PasteSpecial 
xlPasteValuesAndNumberFormats 

Application.CutCopyMode = False 



Next i 

wkbDst.Worksheets("aMapping").Activate 

Range("A2").Select 

Range(Selection, Selection.End(xlDown)).Select 
Selection.ClearContents 

Workbooks("VBA Master Copy.xlsb").Sheets("Data").Activate 

Range("G" & j).Select 

Range(Selection, Selection.End(xlToRight)).Select 
Selection.Copy 

wkbDst.Worksheets("aMapping").Activate 
Range("A2").Select 

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks 
    _ 
    :=False, Transpose:=True 

    Application.CutCopyMode = False 



    With wkbDst 
    .Save 
    .Close 
    End With 

    Workbooks("VBA Master Copy.xlsb").Sheets("Data").Range("E" & j).Value = 
    "Completed" 


    Next j 


    With wkbSrc 
     .Close 
    End With 

    With Application 
    .EnableEvents = True 
    .ScreenUpdating = True 
    .DisplayAlerts = True 
    .Calculation = xlCalculationAutomatic 
    End With 

    Workbooks("VBA Master Copy.xlsb").Activate 


    End Sub 

내가 오류는 다음 줄

wkbSrc.Worksheets(shtname(i)).Range("$k$1:$k$" & Lastrow).AutoFilter 
    Field:=11, Criteria1:=theater 
+0

나는이 범위에서 약간의 오류가 있다고 생각한다. $ k $ 1 : $ k $ – Mohit

+0

전체 K col을 선택하려면 $ K를 사용한다. $ K – Mohit

답변

2

당신은 잘못된 범위를 사용 중입니다. 자동 필터 사용자를 범위 "A1:BZ" & lastrow 범위로 다시 설정하십시오. $ K 만 사용하는 경우 기준에 대한 열 11이 없습니다.

+0

! 그것을 지적 해 주셔서 감사합니다, 나는 이것을 놓치지 말았어야했지만 많은 감사를, 다시 한번 감사드립니다! –

+0

당신을 진심으로 환영합니다. 문제가 해결되면 대답을 수락하십시오. – Jochen

관련 문제