アプリ版:「スタンプのみでお礼する」機能のリリースについて

こんにちは。
VB初心者です。

実はVBではなく、Excel VBAで行なっているのですが。
ここに質問していいかもよく分かってないのですが。
プログラムの処理としては、あるBookのシートの内容を
別のCSVファイルとして生成したいのです。マクロを組んだのですが、一つ問題があって困っています。

問題:
生成したCSVファイルが一度Window上に表示されて
(それはいいのですが、あとで閉じますから)
以下の確認メッセージがでてしまいます。

「outFile.csvはExcel97のファイル形式では、ありません。変更を保存しますか?」

要はプログラムがここで、一旦ユーザアクションを要求してしまうのです。
アクションなしに普通に終了させたいのですが。

マクロではなくVBだったらこんなことはならないのでしょうか?
初心なのでよく分かりません。
もしくはもっとほかの簡単なコードできるのでしょうか。

以下にコードを記述します。

Sub OutFile()

Dim myWBpath As String

myWBpath = ActiveWorkbook.Path

Workbooks.Open FileName:=myWBpath & "\testData1.xls"
Sheets("sheet1").Select
ActiveWorkbook.SaveAs FileName:="C:\outFile.csv", _
FileFormat:=xlCSV, CreateBackup:=False
ActiveWorkbook.Close

End Sub

A 回答 (2件)

Saved を使用すると回避できます。

。。

Sub OutFile()
  Dim myWBpath As String
  Dim xlBook As Excel.Workbook
  
  Const outCsvFile  As String = "C:\outFile.csv"
  
  'CSVファイルの削除
  On Error Resume Next
  Kill outCsvFile
  On Error GoTo 0
  
  
  '画面描画停止
  Application.ScreenUpdating = False
  
  'ブックパス取得
  myWBpath = ActiveWorkbook.Path
  
  'ブックオープン
  Workbooks.Open Filename:=myWBpath & "\testData1.xls"
  Set xlBook = ActiveWorkbook
  With xlBook
    'シート1を出力
    .Sheets(1).Select
    .SaveAs Filename:=outCsvFile, FileFormat:=xlCSV, CreateBackup:=False
    
    '擬似的に保存したようにする
    .Saved = True
    
    .Close
  End With
  
  '画面描画再開
  Application.ScreenUpdating = True
  
  MsgBox "終了"
End Sub
    • good
    • 0

Application.DisplayAlertsをFalseにすることでSaveAsでの警告の表示を停止することができます。



Closeでの変更保存のメッセージは、SaveChangesをFalseにすればOKです。

この修正を含めてちょっと手を入れてみました。

Sub OutFile()

Dim myWBpath As String
Dim objBook As Workbook

Err.Clear
On Error GoTo OutFile_Err

'画面の更新を停止してい処理を高速化
Application.ScreenUpdating = False

'パス名の取得
myWBpath = ActiveWorkbook.Path

If Right(myWBpath, 1) <> "\" Then
myWBpath = myWBpath & "\"
End If

'ワークブックをオープン
Set objBook = Workbooks.Open(Filename:=myWBpath & "testData1.xls")

'警告の表示を停止
Application.DisplayAlerts = False

'開いたワークブックのSheet1をCSVで保存
objBook.Worksheets("sheet1").SaveAs Filename:="C:\outFile.csv", _
FileFormat:=xlCSV, CreateBackup:=False

'開いたワークブックを閉じる
objBook.Close SaveChanges:=False

'変数の開放
Set objBook = Nothing

OutFile_Err:
'エラー発生時の処理
If Err.Number <> 0 Then
MsgBox Err.Description, vbExclamation, "エラーの報告"
End If
'警告の表示の再開
Application.DisplayAlerts = True
'画面更新の再開
Application.ScreenUpdating = True
Exit Sub
End Sub
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!