Сохранение подпапки вызывает ошибку переменной не определено, но это в моей первой подпапке? - PullRequest
0 голосов
/ 16 мая 2019

У меня есть отдельная подпрограмма, которая сохраняет последний файл в моем массиве, но он все равно не работает, когда я переопределяю переменные в этой второй подпрограмме. Как я могу реализовать переменные во втором подпрограмме, чтобы сохранить окончательный вырез файла в его подпапке?

Sub SaveCopy(Wb As Workbook, Last)

Wb.SaveCopyAs strNewPath & _
              ValidFileName(Last & " - Shift Differential Roster_New Hire.xlsx")
End Sub

получаю ошибку в переменной strNewPath, но она определена выше в верхней части скрипта?

Option Explicit

Sub Main()
Dim Wb As Workbook
Dim Data, Last
Dim i As Long, j As Long, k As Long, a As Long
Dim Dest As Range
Dim BASEPATH As String, strNewPath As String, strFileName As String

Dim strHRBP As String
Dim strEC As String

Dim colEC As Long
colEC = 1
Dim colHRBP As Long
colHRBP = 3
Set Wb = Workbooks("JNav Template.xlsx")

Set Dest = Wb.Sheets("New Hires_Internal&External").Range("A2")

With ThisWorkbook.Sheets("Cuts")
    Data = .Range("L2", .Range("A" & Rows.Count).End(xlUp))
End With
Wb.Activate

BASEPATH = "C:\Users\pp87255\Desktop\JNav Rest\"

Application.ScreenUpdating = False

For i = 1 To UBound(Data)

    If Data(i, 4) <> Last Then

        If i > 1 Then

            Dest.Select

            With Wb.Worksheets("New Hires_Internal&External")
                .Cells.EntireColumn.AutoFit
            End With

            strNewPath = BASEPATH & strEC & "\"
            If Len(Dir(strNewPath, vbDirectory)) = 0 Then
                MkDir strNewPath
            End If
            strNewPath = strNewPath & strHRBP & "\"
            If Len(Dir(strNewPath, vbDirectory)) = 0 Then
                MkDir strNewPath
            End If

            Wb.SaveCopyAs strNewPath & _
                          ValidFileName(Last & " - Shift Differential Roster_New Hire.xlsx")

        End If

        With Wb.Sheets("New Hires_Internal&External")
            .Rows(2 & ":" & .Rows.Count).ClearContents
        End With

        strEC = Data(i, 1)
        strHRBP = Data(i, 3)
        Last = Data(i, 4)

        j = 0
    End If

    a = 0
    For k = 1 To UBound(Data, 2)
        Dest.Offset(j, a) = Data(i, k)
        a = a + 1
    Next

    j = j + 1

Next

SaveCopy Wb, Last                            '<< save the last report


End Sub

Sub SaveCopy(Wb As Workbook, Last)

Wb.SaveCopyAs strNewPath & _
              ValidFileName(Last & " - Shift Differential Roster_New Hire.xlsx")
End Sub

Ответы [ 2 ]

0 голосов
/ 17 мая 2019

Это простой вопрос объема.

SaveCopy не знает, что такое strNewPath. Переменная strNewPath определена в Main и, следовательно, не видна за ее пределами.

Добавить параметр пути к файлу SaveCopy:

Sub SaveCopy(Wb as Workbook, strNewPath as String, Last as Variant)
    ...
End Sub

И позвоните SaveCopy так:

SaveCopy Wb, strNewPath, Last
0 голосов
/ 17 мая 2019

Ваша проблема может заключаться в том, что strEC и strHRBP, а Last определены в конце цикла for. попробуйте переназначить эти переменные в начало. По сути, вы пытаетесь перейти к своему последнему назначению, но ваш код закончен. Другой вариант: Для i = 1 до Ubound (данные) + 1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...