Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


7255 / 13645 ツリー ←次へ | 前へ→

【40069】ファイルエクスポートの分岐処理 an 06/7/6(木) 16:23 質問[未読]
【40074】Re:ファイルエクスポートの分岐処理 Jaka 06/7/6(木) 17:15 発言[未読]
【40078】Re:ファイルエクスポートの分岐処理 an 06/7/6(木) 17:37 質問[未読]
【40079】Re:ファイルエクスポートの分岐処理 Jaka 06/7/6(木) 17:52 発言[未読]
【40077】Re:ファイルエクスポートの分岐処理 Kein 06/7/6(木) 17:30 回答[未読]
【40081】Re:ファイルエクスポートの分岐処理 an 06/7/6(木) 19:15 質問[未読]
【40083】Re:ファイルエクスポートの分岐処理 Kein 06/7/6(木) 19:33 回答[未読]
【40084】Re:ファイルエクスポートの分岐処理 an 06/7/6(木) 19:56 質問[未読]
【40085】Re:ファイルエクスポートの分岐処理 Kein 06/7/6(木) 20:15 回答[未読]
【40106】Re:ファイルエクスポートの分岐処理 an 06/7/6(木) 22:46 質問[未読]
【40108】Re:ファイルエクスポートの分岐処理 Kein 06/7/6(木) 23:47 回答[未読]
【40113】Re:ファイルエクスポートの分岐処理 an 06/7/7(金) 8:43 質問[未読]
【40124】Re:ファイルエクスポートの分岐処理 Jaka 06/7/7(金) 11:04 発言[未読]
【40132】Re:ファイルエクスポートの分岐処理 an 06/7/7(金) 12:48 お礼[未読]
【40264】Re:ファイルエクスポートの分岐処理 Jaka 06/7/10(月) 11:48 発言[未読]
【40315】Re:ファイルエクスポートの分岐処理 an 06/7/11(火) 12:52 お礼[未読]

【40069】ファイルエクスポートの分岐処理
質問  an  - 06/7/6(木) 16:23 -

引用なし
パスワード
   いつもお世話になっております。

今回も大変困っておりますので、どなたかお助けください。

エクセルのデータを指定した場所にテキストファイルで
保存をするマクロをこちらの掲示板で教えて頂きました。
望んでいた結果はほぼ得られたのですが、保存ダイアログ
の画面で「キャンセル」または×ボタンで閉じた場合、
メッセージボックスだけを表示させ、画面は動かないように
したいのです。
下のコードですと、メッセージボックスが表示された後、
終了してしまいます。

保存ボタンを押したときは、データの1行目を削除した後
テキストに保存して、終了してほしいのですが、
キャンセルボタンを押したときは画面はそのままにしたいのです。
どの部分を修正すれば、結果が得られるでしょうか?

goto labelなどを使ってもだめでした。

--------------------------------------------------ここから
Sub エクスポート()

'[txtファイルへ書き出し]
  Dim C As Range
  Dim SAry As Variant
  Dim Buf As String
  
  MyF = Application.GetSaveAsFilename("telbook", "txt ファイル (*.txt), *.txt")
 
  If MyF = False Then
   MsgBox "保存がキャンセルされました。"
   Exit Sub
  
 Else
     
  Rows("1:1").Select
  Selection.Delete Shift:=xlUp
    If MyF <> "" Then
     Open MyF For Output Access Write As #1
     For Each C In Range("A1", Range("A65536").End(xlUp))
      With WorksheetFunction
        SAry = .Transpose(.Transpose(C.Resize(, 9).Value))
      End With
      Buf = Join(SAry, ",")
      Print #1, Buf
      Erase SAry
     Next
    
     End If
  Close #1

  End If

End Sub

-----------------------------------------------ここまで

【40074】Re:ファイルエクスポートの分岐処理
発言  Jaka  - 06/7/6(木) 17:15 -

引用なし
パスワード
   提示されたコードでもそのようになっていると思いますけど...。
こんな感じで良いんじゃないかと...。

 MyF = Application.GetSaveAsFilename("telbook", "txt ファイル (*.txt), *.txt")
 If MyF = False Then
   MsgBox "保存がキャンセルされました。"
 Else
   Rows(1).Delete Shift:=xlUp
   Open MyF For Output Access Write As #1
   For Each C In Range("A1", Range("A65536").End(xlUp))
     With WorksheetFunction
        SAry = .Transpose(.Transpose(C.Resize(, 9).Value))
     End With
     Buf = Join(SAry, ",")
     Print #1, Buf
     Erase SAry
   Next
   Close #1
 End If

【40077】Re:ファイルエクスポートの分岐処理
回答  Kein  - 06/7/6(木) 17:30 -

引用なし
パスワード
   Sub エクスポート()

'[txtファイルへ書き出し]
  Dim Ans As Integer
  Dim C As Range
  Dim SAry As Variant
  Dim Buf As String
  
  Do
   MyF = Application _
   .GetSaveAsFilename("telbook", "txt ファイル (*.txt), *.txt")
   If MyF = False Then
     Ans = MsgBox("テキストの保存を中止しますか", 36)
   End If
  Loop While Ans = 7
  If MyF <> "" Then
   Open MyF For Output Access Write As #1
   For Each C In Range("A2", Range("A65536").End(xlUp))
     With WorksheetFunction
      SAry = .Transpose(.Transpose(C.Resize(, 9).Value))
     End With
     Buf = Join(SAry, ","): Print #1, Buf: Erase SAry
   Next
   Close #1
  End If
End Sub

で、どうでしょーか ?

【40078】Re:ファイルエクスポートの分岐処理
質問  an  - 06/7/6(木) 17:37 -

引用なし
パスワード
   ▼Jaka さん:

早速、対応頂き有難うございました。

やはり、キャンセルを選択すると、ファイルが閉じてしまいます。
(保存はされておりません)

保存ボタンをクリックしたときのみ閉じるようにしたいのですが
無理でしょうか、、

【40079】Re:ファイルエクスポートの分岐処理
発言  Jaka  - 06/7/6(木) 17:52 -

引用なし
パスワード
   もしかしてクローズイベントとかに書いてませんか?
このコードの前後が解らないので特定するのは難しいです。
で、クローズイベントとかだったら、クローズをキャンセルするとか
Cancel = true
とか....。
もう帰るのでこれだけですみません。

【40081】Re:ファイルエクスポートの分岐処理
質問  an  - 06/7/6(木) 19:15 -

引用なし
パスワード
   ▼Kein さん:

有難うございます。大変助かります。

申し訳ないのですが、エクスポートを実行する
ときは、Excelファイルは保存せずに自動的に
閉じるようにしたいと思っています。

教えていただいたファイルですと、「キャンセル」
と「保存」どちらもExcelファイルが閉じなくなって
しまう様ですが、、

お手数お掛けしますが、宜しくお願いいたします。


>Sub エクスポート()
>
>'[txtファイルへ書き出し]
>  Dim Ans As Integer
>  Dim C As Range
>  Dim SAry As Variant
>  Dim Buf As String
>  
>  Do
>   MyF = Application _
>   .GetSaveAsFilename("telbook", "txt ファイル (*.txt), *.txt")
>   If MyF = False Then
>     Ans = MsgBox("テキストの保存を中止しますか", 36)
>   End If
>  Loop While Ans = 7
>  If MyF <> "" Then
>   Open MyF For Output Access Write As #1
>   For Each C In Range("A2", Range("A65536").End(xlUp))
>     With WorksheetFunction
>      SAry = .Transpose(.Transpose(C.Resize(, 9).Value))
>     End With
>     Buf = Join(SAry, ","): Print #1, Buf: Erase SAry
>   Next
>   Close #1
>  End If
>End Sub
>
>で、どうでしょーか ?

【40083】Re:ファイルエクスポートの分岐処理
回答  Kein  - 06/7/6(木) 19:33 -

引用なし
パスワード
   End Sub の直前に

ThisWorkbook.Close False

というコードを追加して下さい。

【40084】Re:ファイルエクスポートの分岐処理
質問  an  - 06/7/6(木) 19:56 -

引用なし
パスワード
   ▼Kein さん:

有難うございます。

>End Sub の直前に

直前に入れましたが、今度は「保存」・「キャンセル」
どちらも閉じてしまいます。
このコードはどうして分岐できないのでしょうか。。。

【40085】Re:ファイルエクスポートの分岐処理
回答  Kein  - 06/7/6(木) 20:15 -

引用なし
パスワード
   それならダイアログでキャンセルしたとき、保存を中止する選択をした場合は、
即座にエクセルを閉じて終了するようにすればいいのかな・・?
こんなコードになりますが・・。

Sub エクスポート()
'[txtファイルへ書き出し]
  Dim Ans As Integer
  Dim C As Range
  Dim SAry As Variant
  Dim Buf As String
  
  Do
   MyF = Application _
   .GetSaveAsFilename("telbook", "txt ファイル (*.txt), *.txt")
   If MyF = False Then
     Ans = MsgBox("テキストの保存を中止しますか", 36)
    If Ans = 6 Then GoTo ELine
   End If
  Loop While Ans = 7
  If MyF <> "" Then
   Open MyF For Output Access Write As #1
   For Each C In Range("A2", Range("A65536").End(xlUp))
     With WorksheetFunction
      SAry = .Transpose(.Transpose(C.Resize(, 9).Value))
     End With
     Buf = Join(SAry, ","): Print #1, Buf: Erase SAry
   Next
   Close #1
  End If
ELine:
  ThisWorkbook.Close False
End Sub

【40106】Re:ファイルエクスポートの分岐処理
質問  an  - 06/7/6(木) 22:46 -

引用なし
パスワード
   ▼Kein さん:
有難うございます。

>それならダイアログでキャンセルしたとき、保存を中止する選択をした場合は、
>即座にエクセルを閉じて終了するようにすればいいのかな・・?

いえ、分かり辛いのですが、下記のような結果が得られればと思います。

・ダイヤログで保存をクリック→テキストファイルは生成され、Excelファイルは 保存せずに閉じる。

・ダイヤログでキャンセルをクリック→テキストファイルは生成されず、Excelフ ァイルは閉じない。

今回教えていただいたコードですと、上記ともExcelが閉じてしまいます。
こちらに相談する前、Keinさんほど高度なコードは書けませんが、Goto LABELで分岐させたり、順序を変えたりいろいろ試してみました。
しかし、テキストファイルの生成分岐は出来ますが、Excelファイルを開いたままにするか、保存せずに終了するかの分岐が実現できません。


また、いろいろ試して見ます。

【40108】Re:ファイルエクスポートの分岐処理
回答  Kein  - 06/7/6(木) 23:47 -

引用なし
パスワード
   で、ダイアログでキャンセルしてもダイアログ自体は表示し続けたい、
ということでしたよね ? そーすると Do 〜 Loop のところを修正して

  Do
   MyF = Application _
   .GetSaveAsFilename("telbook", "txt ファイル (*.txt), *.txt")
   If MyF = "False" Then
     Ans = MsgBox("テキストの保存を中止しますか", 36)
   End If
  Loop While Ans = 6 '←ここを 7 から 6 へ

と、してみて下さい。
ちなみにMsgBox関数の戻り値は「はい」を押すと 6 が返り、
「いいえ」を押すと 7 が返ることになってます。

【40113】Re:ファイルエクスポートの分岐処理
質問  an  - 06/7/7(金) 8:43 -

引用なし
パスワード
   ▼Kein さん:
何度もすみません。

>で、ダイアログでキャンセルしてもダイアログ自体は表示し続けたい、

いえ、ダイヤログは消して、Excelファイルは閉じないようにしたいと思います。

ダイヤログで保存の場合は、ダイヤログは消して、Excelファイルも保存せずに閉じるようにしたいと思います。

【40124】Re:ファイルエクスポートの分岐処理
発言  Jaka  - 06/7/7(金) 11:04 -

引用なし
パスワード
   >やはり、キャンセルを選択すると、ファイルが閉じてしまいます。
>(保存はされておりません)
ではなく。

>MyF = Application.GetSaveAsFilename("telbook", "txt ファイル (*.txt), *.txt")
>If MyF = False Then
>  MsgBox "保存がキャンセルされました。"
>Else
>  Rows(1).Delete Shift:=xlUp
>  Open MyF For Output Access Write As #1
  この位置で開いているから、保存がキャンセルされると開かないのです。

で、どっちのファイルを閉じたくないのかいまいち解ってませんでしたが、
MyF ファイルの事なんですね?ブックのことだと思ってました。
>教えていただいたファイルですと、「キャンセル」
>と「保存」どちらもExcelファイルが閉じなくなって
このExcelファイルとは、どちらのファイルの事をさすのでしょうか?
エクセルファイルを閉じるコードはどこにも書いてないと思いますが...。
実際の処理をどのようにしたいのかよく解りません。
テキストファイルとごっちゃになっていませんか?

【40132】Re:ファイルエクスポートの分岐処理
お礼  an  - 06/7/7(金) 12:48 -

引用なし
パスワード
   ▼Keinさん、Jaka さん:
アドバイスいただきまして有難うございました。

>テキストファイルとごっちゃになっていませんか?

はい。整理して、要点をまとめてから、質問し直します。

取り急ぎ、お礼申し上げます。

【40264】Re:ファイルエクスポートの分岐処理
発言  Jaka  - 06/7/10(月) 11:48 -

引用なし
パスワード
   >・ダイヤログで保存をクリック→テキストファイルは生成され、Excelファイルは 保存せずに閉じる。
>・ダイヤログでキャンセルをクリック→テキストファイルは生成されず、Excelフ ァイルは閉じない。
これだとこんな感じになるんですけど、違うんですよね?

Sub エクスポート()
'[txtファイルへ書き出し]
  Dim C As Range
  Dim SAry As Variant
  Dim Buf As String
 
  MyF = Application.GetSaveAsFilename("telbook", "txt ファイル (*.txt), *.txt")
 
  If MyF = False Then
   MsgBox "保存がキャンセルされました。"
  Else
   Rows("1:1").Delete Shift:=xlUp
   Open MyF For Output Access Write As #1
   For Each C In Range("A1", Range("A65536").End(xlUp))
     With WorksheetFunction
        SAry = .Transpose(.Transpose(C.Resize(, 9).Value))
     End With
     Buf = Join(SAry, ",")
     Print #1, Buf
     Erase SAry
   Next
   Close #1
   ThisWorkbook.Close (False)
   'Workbooks("XXXXX").Close (False) '取りあえず
  End If
End Sub

【40315】Re:ファイルエクスポートの分岐処理
お礼  an  - 06/7/11(火) 12:52 -

引用なし
パスワード
   ▼Jaka さん:

有難うございました。
完璧に出来ました。

今後とも宜しくお願い致します。

7255 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free