2017-10-13 3 views
0

フォルダ内のx個のファイルを取り込み、それらをすべて同じブックの別々のシートに配置したいと考えています。テキストボックスに文字列を入力して再利用

このコードが動作しています。しかし

Public Sub consolWB() 
    Dim FSO As Object 
    Dim folder As Object, subfolder As Object 
    Dim wb As Object 



    Set FSO = CreateObject("Scripting.FileSystemObject") 
    folderPath = "C:\Users\patrickw\Desktop\exceltest" 
    Set folder = FSO.GetFolder(folderPath) 

    With Application 
     .DisplayAlerts = False 
     .ScreenUpdating = False 
     .EnableEvents = False 
     .AskToUpdateLinks = False 
    End With 

    For Each wb In folder.Files 
     If Right(wb.Name, 3) = "xls" Or Right(wb.Name, 4) = "xlsx" Or Right(wb.Name, 4) = "xlsm" Then 
      Set openWB = Workbooks.Open(wb) 
      For Each ws In openWB.Worksheets 
       ws.Copy after:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count) 


      Next ws 
      openWB.Close 
     End If 
    Next wb 

    With Application 
     .DisplayAlerts = True 
     .ScreenUpdating = True 
     .EnableEvents = True 
     .AskToUpdateLinks = True 
    End With 


End Sub 

、この唯一の作品、私はファイルパスをユーザに促し、ボタンを作成したい。

を、それが中に見えるするターゲットファイルパスを設定し、ファイルパスを持っていることを利用しているため、ファイル内にあります。

私は入力を文字列にして、上記のコードでこの変数を使用する必要があると思います。

これは可能ですか?

上記の例では、新しいシートは単に「sheet1 ...」と呼ばれていますが、これを自分自身で指定することは可能ですか?

おかげ

+0

ボックスに入力するか、セルに入力するか、フォルダを参照してフォルダを選択できるボックスを表示しますか?または、他の何か。 – QHarr

+0

私は当初、ドロップダウンボックスを使って正しいファイルを選択したいと思っていました。どちらの方法であれ、他のマクロの参照としてその文字列を使用できるようにする必要があります。 –

+0

ここに例がありますhttps://stackoverflow.com/questions/25153342/open-a-workbook-using-filedialog-and-manipulate-it-in-excel-vba – QHarr

答えて

1

は、あなたのbutton_clickイベント内で、次のを持って、あなたの他のコードでパス変数を使用します。

Dim path As String 
path = InputBox("Enter a file path") 

フォーム外の変数にアクセスする必要がある場合、あなたはモジュールレベルPublicフィールドとしてpathを宣言することができます。pathがない場合はプロパティでそれをカプセル化し、

Public path As String 

Private Sub CommandButton1_Click() 

path = InputBox("Enter a file path") 

End Sub 

Private Sub CommandButton2_Click() 
Debug.Print path 
End Sub 

またはそれ以上

Private path As String 

Public Property Get SelectedPath() As String 
    SelectedPath = path 
End Property 

Private Sub CommandButton1_Click() 
    path = InputBox("Enter a file path") 
End Sub 

そのように、フォーム外部コード缶R:フォーム外部から割り当て可能であると考えeadSelectedPathですが、をプライベートフィールドに書き込んだり、プロパティの値を変更することはできません。

InputBoxusing a FileDialog insteadは、ユーザーの利便性が向上し、入力の検証が容易になると考えられています。

+0

これは私が望んだものです!最初のボタンをクリックしてディレクトリを入力しますが、2番目のボタンをクリックすると実行時エラー5メッセージが表示されます 'consolidate'マクロに新しい行が追加されました。 folderPath = path –

+0

これは動作しています!ありがとうQHarr –

+0

素晴らしい。もしあなたが望むものを満たしていれば、答えとして受け入れてください。私はあなたのボタンを渡す方法を追加しました。 – QHarr

1

このようにして、ユーザーはクリック、クリック、クリックするだけです。入力フォルダのパスが正しいかどうかを確認する必要はありません。

Sub GetFolder() 
    Dim FD As Office.FileDialog 
    Dim FolderPath as string 
    Set FD = Application.FileDialog(msoFileDialogFolderPicker) 
    FD.Show 

    FolderPath = FD.SelectedItems(1) 
    Msgbox FolderPath 
End Sub 
+0

ありがとう、私はちょうどそれを試みたが、これを私の初期コードにどのように組み込むのですか? –

+0

最も簡単な方法は 'folderPath =" C:\ Users \ patrickw \ Desktop \ exceltest "を自分のコードに置き換えることです。 – newacc2240

+1

Upvotedですが、これは 'String'を返す' Private Function'でなければなりません。 –

関連する問題