[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『フォルダーのコピー』(habsburg) コピーするフォルダー(フォルダーの中身は40個くらいのフォルダーがあります)を 選んで違うサーバーを(バックアップサーバー)選んで コピーをするマクロを作りたいのですが教えてください。
マクロボタンを押したらコピーをするフォルダーを選んで コピー先(違うサーバー)を選んでコピーをし、 コピーしたフォルダーに名前をつけるといった感じです。
フォルダのコピーは、FSO(File System Object)のCopyFolder メソッドを使えば可能です。 まず、このFSOについてHelpやサイト検索を行って良く調べてください。
ユーザーインターフェースは、以下の仕様でいかがですか?
新規ブックにて、ユーザ-フォームを一つ作成してください(UserForm1)。 中のコントロールは、コードで配置しますから、何も配置しないでください。
標準モジュールに当該ユーザーフォームを表示するコード
'==================================================================== Sub sample() UserForm1.Show End Sub
作成したUserForm1のモジュールに
'==================================================================== Option Explicit Private lblcpynm As MSForms.Label Private txtcpynm As MSForms.TextBox Private WithEvents cmdref1 As MSForms.CommandButton Private WithEvents cmdref2 As MSForms.CommandButton Private WithEvents cmdexec As MSForms.CommandButton '==================================================================== Private Sub UserForm_Initialize() With Me .Width = 516 .Height = 189.75 .Caption = "フォルダのコピー" Set lblcpynm = .Controls.Add("Forms.Label.1", , True) With lblcpynm .Caption = "" .Left = 126 .Top = 36 .Width = 324 .Height = 18 .BackColor = &H80000009 .SpecialEffect = 2 .Font.Size = 14 End With Set cmdref1 = .Controls.Add("Forms.CommandButton.1", , True) With cmdref1 .Caption = "参照" .Left = 450 .Top = 36 .Width = 48 .Height = 18 .Font.Size = 9 .TabStop = False End With Set txtcpynm = .Controls.Add("Forms.TextBox.1", , True) With txtcpynm .Left = 126 .Top = 84 .Width = 324 .Height = 18 .Font.Size = 14 .TabStop = False .SelectionMargin = False End With Set cmdref2 = .Controls.Add("Forms.CommandButton.1", , True) With cmdref2 .Caption = "参照" .Left = 450 .Top = 84 .Width = 48 .Height = 18 .Font.Size = 9 .TabStop = False End With Set cmdexec = .Controls.Add("Forms.CommandButton.1", , True) With cmdexec .Caption = "コピー実行" .Left = 18 .Top = 126 .Width = 84 .Height = 30 .Font.Size = 9 .TabStop = False End With With .Controls.Add("Forms.Label.1", , True) .Left = 18 .Top = 36 .Width = 108 .Height = 18 .BackColor = &HFFFF00 .SpecialEffect = 2 .Caption = "コピー元フォルダ" .Font.Size = 14 End With With .Controls.Add("Forms.Label.1", , True) .Left = 18 .Top = 84 .Width = 108 .Height = 18 .BackColor = &HFFFF00 .SpecialEffect = 2 .Caption = "コピー先フォルダ" .Font.Size = 14 End With End With End Sub '==================================================================== Private Sub cmdref1_Click() Dim ffname As Variant ffname = get_folder_path("コピー元フォルダを選択して下さい") If TypeName(ffname) <> "Boolean" Then lblcpynm.Caption = ffname End If End Sub '==================================================================== Private Sub cmdref2_Click() Dim ffname As Variant Dim cpynm As Variant ffname = get_folder_path("コピー先フォルダを選択して下さい") If TypeName(ffname) <> "Boolean" Then cpynm = Split(lblcpynm, "\") If Right(ffname, 1) <> "\" Then ffname = ffname & "\" txtcpynm.Value = ffname & cpynm(UBound(cpynm)) End If End Sub '==================================================================== Function get_folder_path(mes, Optional ByVal opt As Variant = 1) Dim fld As Object Set fld = CreateObject("Shell.Application").BrowseForFolder(0, mes, opt, 0) On Error Resume Next If Not fld Is Nothing Then get_folder_path = fld.items.Item.Path If Err.Number <> 0 Then get_folder_path = False End If Else get_folder_path = False End If End Function '==================================================================== '==================================================================== '==================================================================== Private Sub cmdexec_Click() ' ここにフォルダのコピー処理を記述する End Sub '==================================================================== '====================================================================
これで、sampleを実行してみてください。
ユーザーフォームが表示されます。 コピー元フォルダの右端にある参照ボタンをクリックしてください。 フォルダ選択ダイアログが表示されますので、コピー元のフォルダを選択して下さい。 OKボタンで左隣のボックス(実際はラベル)にフォルダ名が表示されます。 この時、フォルダパスが長すぎて表示し切れなくてもデータは正しく設定されています。
次にコピー先フォルダの右端にある参照ボタンをクリックしてください。 コピー元フォルダの右端にある参照ボタンをクリックしてください。 同じようにフォルダ選択ダイアログが表示されますので、コピー先のフォルダを選択して下さい。 OKボタンで左隣のテキストボックスには、
選択されたフォルダ名+コピー元のフォルダ名の最後の構成要素
が表示されます。 コピー先のフォルダパスに変更があるなら直接変更も可能です。
コピー元フォルダ及び、コピー先フォルダが決定したら、コピー実行ボタンをクリックしてください。 フォルダコピーが行なわれます。 (実際のコピーのコードは記述していませんから、御自分で調べてみてください)
ファイルI/Oは、FSOでかなりのことができますが、使い方を間違えると データを消してしまう可能性もありますから、十分にFSOについてテストを行なった後、運用してください。
ichinose
ichinoseさん、ありがとうございました。 がんばって試してみます。 (habsburg)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.