Создание папки из ввода в пользовательской форме - PullRequest
0 голосов
/ 04 июня 2018

Я буквально новичок в VBA, поэтому не очень разбираюсь в этом, но мне было поручено создавать папки на основе пользовательского ввода в пользовательскую форму VBA, которые выводятся на лист Excel.

У меня есть три столбца, в которые пользователь может вводить значения: Год, Тип и Имя файла

Год - это текстовое поле, в которое можно ввести год.Тип представляет собой список.Имя файла - это текстовое поле

У меня нет проблем с отображением пользовательского ввода на листе Excel, но я не могу понять, как создать папку.Вот мой код:

'create functions for checking if folder exists and creating folder
Function FolderExists(ByVal path As String) As Boolean

    FolderExists = False
    Dim fso As New FileSystemObject

    If fso.FolderExists(path) Then FolderExists = True

End Function

Function FolderCreate(ByVal path As String) As Boolean

    FolderCreate = True
    Dim fso As New FileSystemObject

    If Functions.FolderExists(path) Then
        Exit Function
    Else
        On Error GoTo DeadInTheWater
        fso.CreateFolder path
        Exit Function
    End If

DeadInTheWater:
    MsgBox "A folder could not be created for the following path: " & path & ". Check the path name and try again."
    FolderCreate = False
    Exit Function

End Function

Function CleanName(strName As String) As String
    'will clean part # name so it can be made into valid folder name
    'may need to add more lines to get rid of other characters

    CleanName = Replace(strName, "/", "")
    CleanName = Replace(CleanName, "*", "")

End Function

Private Sub Label1_Click()
End Sub

Private Sub Label2_Click()
End Sub

Private Sub TotMktSeg_Click()
End Sub

Private Sub Label3_Click()
End Sub

Private Sub TextBox_Filename_Change()
End Sub

'create dropdown options in the listbox
Private Sub UserForm_Initialize()

    'Me.ListBox_TotMktSeg.AddItem "Market"
    'Me.ListBox_TotMktSeg.AddItem "Segment"
    'Me.ListBox_TotMktSeg.AddItem "Total"

    With Me.ListBox_TotMktSeg
        .AddItem "Market"
        .AddItem "Segment"
        .AddItem "Total"
    End With

End Sub

Private Sub Year_Change()
End Sub

'when button is clicked, output user input to excel sheet and create a folder
Private Sub Run_Click()

    'Copy input values to sheet.
    Dim lRow As Long
    Dim ws As Worksheet
    Dim strType As String
    Dim strYear As String
    Dim strPath As String
    Dim strFile As String

    Set ws = Worksheets("Sheet1")
    lRow = ws.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row

    With ws
        .Cells(lRow, 1).value = Me.TextBox_Year.value
        .Cells(lRow, 2).value = Me.ListBox_TotMktSeg.value
        .Cells(lRow, 3).value = Me.TextBox_Filename.value
    End With

    strType = Me.TextBox_Year.value
    strYear = Me.ListBox_TotMktSeg.value
    strFile = Me.TextBox_Filename.value
    strPath = "C:\Users\siope1kd\Documents\HD VB stuff\"

    If Not FolderExists(strPath & strType) Then
        FolderCreate (strPath & "\" & strType & "\" & strYear)
    Else
        If Not FolderExists(strPath & strType & "\" & strYear) Then
            FolderCreate (strPath & strType & "\" & strYear)
        End If
    End If

    'Clear input controls.
    Me.TextBox_Year.value = ""
    Me.ListBox_TotMktSeg.value = ""
    Me.TextBox_Filename.value = ""

End Sub

Основная проблема заключается в том, что я получаю

ошибка времени выполнения 424 с указанием «Требуется объект»

для FolderExists Функция.

Я буквально собрал этот код воедино из других источников и не могу выяснить проблему здесь.

Большое спасибо за помощь.

Кит

...