|    | 
     丁寧にお答えいただき有り難うございます! 
 
▼よろずや さん: 
>▼ANTON さん: 
>>Private Sub CommandButton1_Click() 
>>On Error Resume Next 
>こんなこと書いてはいけません。 
>これは、エラーが発生することが分かっていて、 
>エラー原因によって処理を分岐させたい場合に使うものです。 
>これが書いてあるせいでデバッグができなくなっています。 
 
なるほど、ただ動作に問題ないエラーを飛ばしてくれるだけだと思ってました。 
 
>>Dim Worksheet As String 
>特別な意味のある単語を勝手に使うと、損をするのは自分自身ですよ。 
 
たしかにおっしゃるとおりです。。。 
 
>>Dim MyFileName, MyFileName2 As String 
>この書き方では、 
>Dim MyFileName AS Variant, MyFileName2 As String 
>と書いたのと同じです。 
 
これは知りませんでした。 
Dim MyFileName As String, 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 
>実際に Exit Sub が実行されるか試してみましたか? 
 
試してはいません・・・・。試そうと思いましたが試し方がわかりませんでした。。。 
 
>>Workbooks.Open MyFileName 
>> 
>>MsgBox "今開いたExcelファイルのシートの中からコピーするシートを選び、アクティブ状態にしてください。" & vbNewLine & _ 
>>      "もしよろしければOKを押してください。", vbExclamation 
>ユーザーフォームとメッセージボックスを開いた状態で 
>ワークシートを触らせるなんて無茶です。 
>メッセージはユーザーフォームのラベルにでも表示して 
>もう一つのコマンドボタンを押させるとかしましょう。 
 
2007ではできたので、できるものだと思っていました。 
別のユーザーフォームを起動するマクロを作りたいと思います。 
       
>>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 
 
 
その後、よろずやさんのコメントを参考にデバック等を繰り返し、 
*同名シートが存在した場合、シートを削除しコピーしたシートに削除した名前をつける。 
*アクティブシートの選択時のエラー発生 
は解決することができました! 
 
今一番の問題となっているのは最初に開いたExcelを閉じる作業です。。。 
未だにExcelを閉じることが出来ません。 
 
マクロを実行しているファイルもろとも開いているExcelを全て閉じる事はできたのですが、指定したExcelファイルのみを閉じるということができません・・・。 
 
エラーは「インデックスに有効範囲がありません」というのがでます。 
 
ようはExcelを開く際に使用した変数を閉じるでも使用しているため、変数内に入っている値が「C\***\***\***\〜〜〜.xls」となっており、閉じる場合は「〜〜〜」のみを指定してやらなければならないからエラーがでているのではと思うのですが、どうすればいいのかがわかりません・・・。 
 
もし、なにかいい方法がありましたらお教え願えると幸いです。 
宜しくお願いいたします。 
 | 
     
    
   |