ユーザーフォームを利用した①ファイルを開いて、②指定したシートを自分自身にコピーさせる処理の自動化のサンプル
ワークシートの指定を簡単化するため、リストボックスを利用している。
このサンプルコードを実行するには、ユーザーフォームにリストボックスを張り付ければOK
UserForm1
Private m_OpenFileName As String
Private m_OpenWorkBook As Workbook
Private m_OpenWorksheet As Worksheet
Private Const COPY_SHEET As String = "コピー先シート"‘①ファイルを開いて、②指定したシートを自分自身にコピーさせる処理
Private Sub ListBox1_Click()
Dim TmpWrokSheet As Worksheet
Application.DisplayAlerts = False
If ListBox1.ListIndex = -1 Then Exit Sub
Set m_OpenWorkBook = Workbooks.Open(m_OpenFileName)
Set m_OpenWorksheet = m_OpenWorkBook.Worksheets(ListBox1.Text)
‘ MsgBox m_OpenWorksheet.Name
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
If ws.Name = COPY_SHEET Then ws.Delete
Next ws
Set TmpWrokSheet = ThisWorkbook.Worksheets.Add
TmpWrokSheet.Name = COPY_SHEET
m_OpenWorksheet.Cells.Copy TmpWrokSheet.Cells
GoTo FINALLY
EXCEPTION:FINALLY:
If Not m_OpenWorkBook Is Nothing Then
m_OpenWorkBook.Close
Set m_OpenWorkBook = Nothing
End If
Application.DisplayAlerts = True
Me.Hide
End Sub‘①フォーム初期化でファイルを開き、シート名一覧を取得する。
Private Sub UserForm_Initialize()
On Error GoTo EXCEPTION
Dim ws As Worksheet
m_OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls?")
Set m_OpenWorkBook = Workbooks.Open(m_OpenFileName)
ListBox1.Clear
For Each ws In m_OpenWorkBook.Worksheets
ListBox1.AddItem ws.Name
Next ws
GoTo FINALLY
EXCEPTION:FINALLY:
If Not m_OpenWorkBook Is Nothing Then
m_OpenWorkBook.Close SaveChanges:=False
Set m_OpenWorkBook = Nothing
End If
End Sub
標準モジュール側(サンプル)
Sub test1()
UserForm1.Show
End Sub
コメント