|
こんばんわ。
タイトルの事をやろうとしていますが、行き詰っております。
少し量が多いのですが・・・・
もし、ご助力いただけましたら宜しくお願いいたします。
もう少し詳しく、やりたいことを書かせていただきますと
1.ユーザーフォームを使用し、マクロを使用しているExcelファイルとは別のExcelファイルを開く
2.新しく開いたExcelファイルからコピー元となるシートを選択する。
3.シートをコピーし、名前を変更
4.もし、同名シートがあった場合は元々あったシートを削除し、コピーしたシートにその名前を使う。
5.1で開いたExcelファイルのみを閉じる。
6.次のユーザーフォームを開く。
7.次のユーザーフォームでこの作業をやり直すコマンドを作成し、ファイルを開く作業からやり直す。
困ってる点は
*2でシートを選択しようとクリックするとエラーが出る。(Excel2003のみ)
*4の作業が行われない。(Excel2003のみ)
*5の作業が行われない、もしくはエラーがでる(2003.2007両方)
*7の作業を行った際、ファイルを開く作業を終了させたと同時に次で開いたユーザーフォームまで一緒に消えてしまう(Excel2007のみ)
2003と2007両方で行おうとしているため、より難しくなってしまっています・・・。
二つでVBAの内容が若干変わっているのは知っていたのですが。。。まさかここまで違うとは思いませんでした・・・。
下記に私の作ったプログラムを記述します。
Private Sub CommandButton1_Click()
On Error Resume Next
Dim Worksheet As String
Dim MyFileName, MyFileName2 As String
Dim MyWSName, MyWSName2 As String
Dim MyWS As Worksheet
MyFileName = Application.GetOpenFilename _
(Filefilter:="2003Excelファイル(*.xls), *.xls,2007Excelファイル(*.xlsx), *.xlsx", _
Title:="Excelファイルの読み込み")
If MyFileName = "False" Then Exit Sub
Workbooks.Open MyFileName
MsgBox "今開いたExcelファイルのシートの中からコピーするシートを選び、アクティブ状態にしてください。" & vbNewLine & _
"もしよろしければOKを押してください。", vbExclamation
MyWSName = ActiveSheet.Name
Worksheets(MyWSName).Copy after:=ThisWorkbook.ActiveSheet
MyWSName2 = "AAA"
For Each MyWS In Worksheets
If MyWSName = MyWSName2 Then
Application.DisplayAlerts = False
Worksheets("AAA").Delete
Applicarion.DisplayAlerts = True
End If
Next
ActiveSheet.Name = MyWSName2
If vbYes = MsgBox("今開いたファイルを閉じますか?", vbQuestion + vbYesNo) Then
Workbooks(MyFileName).Close
End If
Unload Me
'次のユーザーフォーム.Show
UserForm1.Show
End Sub
宜しくお願いいたします。
|
|