4

フォームを使用して、ディレクトリ、親フォルダー名を入力し、一連のチェックボックスを使用して、親フォルダー内で機能するサブフォルダーをタブで選択しようとしています。

私のユーザーフォーム

ドライブ、プロジェクト名、プロジェクト番号を入力すると、最初に親フォルダーが存在するかどうかがチェックされ、存在しない場合は作成されます。

次に、[Use Online] チェックボックスがアクティブかどうかを確認し、アクティブな場合は、[Online] タブ内の他のすべてのチェックボックスの名前の配列を作成します。各チェックボックス名をループして、それぞれがアクティブかどうかを確認し、そうであれば、各チェックボックスの「キャプション」を取得して、それを使用して親ディレクトリ内にサブフォルダーを作成するため、注意が必要です。 (まだ存在しない場合)。

現在のコードを実行すると、「実行時エラー '424' オブジェクトが必要です」という行が表示されます

    If itm.Value = True Then

黄色で強調表示されました。

このユーザー フォームの「フォルダーの作成」部分に使用されるすべてのコードは、次のとおりです。

Private Sub create_folders_button_Click()

'Create a variable for the drive letter
Dim driveLetter As String
driveLetter = drive_list.Value

'Create a variable for the project name
Dim projectName As String
projectName = p_name_textbox.Value

'Create a variable for the project number
Dim projectNumber As String
projectNumber = p_number_textbox.Value

'Create a variable for the constructed BasePath
Dim BasePath As String

'Create a new file system object for handling filesystem manipulation
  Set fs = CreateObject("Scripting.FileSystemObject")

'Populate an array with the online subfolders
  Dim onlineSubfolders As Variant
  onlineSubfolders = Array("online_progCosts", "online_exports")

'Compile the basePath

  BasePath = driveLetter & projectName & " (" & projectNumber & ")"

'Check if the project folder already exists and if so, raise an error and exit
    If Dir(BasePath, vbDirectory) <> "" Then
        MsgBox BasePath & " already exists", , "Error"
    Else
        'Create the project folder
        MkDir BasePath
        MsgBox "Parent folder creation complete"

        If online_toggle.Value = True Then
            Dim online As String
            online = "Online"
            MkDir BasePath & "\" & online

            Dim itm As Variant
            For Each itm In onlineSubfolders
                If folder_creator_window.Controls(itm).Value = True Then
                    Dim createFolder As String
                    createFolder = folder_creator_window.Controls(itm).Caption
                    NewFolder = BasePath & "\" & online & "\" & createFolder
                    If fs.folderexists(NewFolder) Then
                        'do nothing
                    Else
                        MkDir NewFolder
                    End If

                Else
                    'do nothing
                End If

            Next itm

        Else
            MsgBox "The online folder was not created because it was not checked"

        End If

    End If

End Sub
4

1 に答える 1

7
...
onlineSubfolders = Array("online_progCosts", "online_exports")
...
For Each itm In onlineSubfolders
            If itm.Value = True Then
...

配列の各要素は文字列です。.Value文字列にはプロパティがありません。

これらはチェックボックスの名前だと思うので、コントロール自体を参照して値を取得する必要があります。あなたのフォームが何と呼ばれているかわかりません。

If FormName.Controls(itm).Value = True
于 2012-07-03T10:19:03.320 に答える