2016-10-19 6 views
0

이것은 나를 미치게합니다. VBA를 처음 사용하고 코드를 한 줄씩 컴파일하고 F8을 사용하여 동일한 통합 문서 내에서 모두 작동하는지 확인했습니다. 추가해야 할 마지막 비트는 별도의 통합 문서를 여는 것입니다. 이제는 매번 오류가 발생합니다. 내 코드는 다음과 같습니다.런타임 오류 438 : 개체가이 속성 또는 메서드 (VBA)를 지원하지 않습니다

Sub MasterXfer() 
Dim mystring As String, wbName As String, dt As String, sdt As String, ldt As String 
Dim wb1 As Workbook, wb2 As Workbook, mypath As String 

wbNam = "Productivity " 
dt = Sheet1.Range("B1").Value 
sdt = Format(CStr(dt), "m.d.yy") & ".xlsx" 
ldt = Format(CStr(dt), "yyyy") & "\" & Format(CStr(dt), "mm") & "_" & MonthName(Month(dt)) & "_" & Year(dt) 

mypath = "S:\" & ldt & "\" & wbNam & sdt 

Set wb1 = ThisWorkbook 
Set wb2 = Workbooks.Open(mypath) 'HERE'S WHERE IT ERRORS OUT 

With wb1 
lastrow = Worksheets(1).Range("A" & Rows.Count).End(xlUp).Row 
For x = 2 To lastrow Step 16 
mystring = .Range("A" & x) 

이 단계를 거치면 정상적으로 작동합니다. 그런 다음 Set wb2 = Workbooks.Open 행에 도달하고 대상 통합 문서가 성공적으로 열립니다. 코드를 열면 즉시 문제가 해결됩니다.

내가 어떤 실수를 저지르면 누구든지 내 첫 번째 아들의 이름을 지을 것입니다.

+0

또한 레코드의 경우 이것은 오류가 발생한 곳의 코드가 전부는 아닙니다. – mrbusto71

+0

그 시점에서'debug.print mypath'는 무엇을 보여줍니까? (직접 실행 창에서 [Ctrl] + G로보세요)? 'Format (date, "mmm")'또는'Format (date, "mmmm")'을 사용할 수있을 때 왜'MonthName'과 같은 '도우미'함수를 사용합니까? 마침표가 포함 된 통합 문서 이름에 문제가 있음을 기억하는 것 같습니다. 그들없이 시험을 할 수 있니? – Jeeped

+2

'lastrow = Worksheets (1) .Range ("A"& Rows.Count) .End (xlUp) .Row' 여기서, 'Worksheets (1)'은 앞선 기간이 없기 때문에 wb1에 묶이지 않습니다. 당신이 그런 식으로 말하지 않는 한. –

답변

1

이 줄로 인한 오류가 발생했습니다. mystring = .Range("A" & x). Workbook에는 Range 방법이 없습니다. 이 파일을 wb1.Worksheets(1)으로 변경해야합니다.

파일을 열기 전에 파일이 존재하는지 테스트해야합니다.

Format 함수 Format 매개 변수의 백 슬래시 문자를 이스케이프 문자로 사용하여 파일 문자열을 만드는 다른 방법이 포함되었습니다.

Sub MasterXfer() 
    Dim wb2 As Workbook 
    Dim mypath As String 

    mypath = Format(Sheet1.Range("B1").Value, "\S:\\YYYY\\MM_MMMM_YYYY\\Pro\du\ctivit\y MM.DD.YY.xl\sx") 

    If Len(Dir(mypath)) = 0 Then 
     MsgBox "File not found" & vbCrLf & mypath 
     Stop 
     Exit Sub 
    End If 

    Set wb2 = Workbooks.Open(mypath) 

    With ThisWorkbook.Worksheets(1) 

     LastRow = .Range("A" & .Rows.Count).End(xlUp).Row 
     For x = 2 To LastRow Step 16 
      mystring = .Range("A" & x) 
     Next 

    End With 

End Sub 
+0

내 아이 토마스의 이름을 짓는 것 같습니다. 도움을 주셔서 감사합니다, 나는 지금 쉬기 쉽습니다! – mrbusto71

+0

@ YowE3K 좋은 점 –