1
ファイルパス(ファイル名の最初の単語である「プロジェクト名」)を追跡するグローバル辞書オブジェクトを設定しました。このプログラムの仕組みは、ユーザーがファイルダイアログボックスを開いてファイルをリストボックスに追加できるフォームが開きます。これが完了したら、辞書に名前とパスを追加する必要があります。ユーザフォームに表示されないグローバル変数
プライマリコード:
Public project_dict As Scripting.Dictionary
Public Sub excelToPPT()
Set project_dict = New Scripting.Dictionary
...
Dim u As UserForm1
Set u = New UserForm1
u.Show
...
End Sub
ユーザーフォームのコード:project_dictがIオブジェクトではありませんので、
Private Sub cmdAddProject_Click()
Dim project_fd As FileDialog
Set project_fd = Application.FileDialog(msoFileDialogFilePicker)
Dim it As Variant
Dim path_split() As String
Dim f_split() As String
Dim f As String
With project_fd
.AllowMultiSelect = True
.Title = "Select project excel file(s)"
.Filters.Clear
If .Show = -1 Then
For Each it In .SelectedItems
path_split = Split(it, "\")
f_split = Split(path_split(UBound(path_split)))
f = f_split(0)
' WHERE ERROR OCCURS
project_dict.Add f, it
Me.ListBox1.AddItem f
Next it
End If
End With
End Sub
これを実行すると、エラーが
project_dict.Add f, it
を言っているには良いではありませんこの場合、スコープの問題があるとします。何か案は?
なぜユーザーフォームにプロパティを追加し、グローバルフォームを使用する代わりに明示的に渡すのはなぜですか。 – Comintern
あなたは何のエラーも言及していません。それを推測する必要がありますか?興味深い。 –
私はプロジェクトを(PowerPoint 2016 PCで)設定し、メインのサブを実行し、ボタンをクリックしてファイルダイアログを開き、2つのExcelファイルを選択し、ListBoxに表示されたことを確認した後、フォームのXをクリックしてディクショナリ内の項目は2として出力されます(Debug.Print行を追加しました)。どこにもエラーはありません! –