2017-07-05 12 views
0

ユーザーがブックのバックアップを特定の場所に保存するようにマクロを作成しようとしています。私は以下のコードを試しましたが、エラー13のメッセージがあります。マクロ対応のブックとして保存する必要はありませんが、もっと簡単にできると思いました。VBA excel Application.getsaveasfilename error 13

Sub openSaveDialog() 
' 
' gives error 13 message when clicking save 
' 
Dim saveSuccess As Boolean 
Dim fNameRec As String 
Dim dateNow As String 
Dim saveToDir As String 
saveToDir = "Z:\location of save\Old Archive spreadsheets\" 
dateNow = Format(Now(), "mmddyyyy") 
fNameRec = saveToDir & "BinderArchiveBackup_" & dateNow 
Sheets(3).Range("E25") = fNameRec 
'check if backed up today 
If (Sheets(3).Range("E22") = Date) Then 
    MsgBox "backup already saved today no need to save again" 
    Exit Sub 
End If 

'open save as window 
saveSuccess = Application.GetSaveAsFilename(InitialFileName:=fNameRec, FileFilter:= _ 
"Excel Files (*.xlsx)," & "*.xlsx, Macro Enabled" & _ 
"Workbook (*.xlsm), *xlsm") 
'if backup saved, update date of last backup 
If saveSuccess Then 
    Sheets(3).Range "E22" = Date 
    MsgBox "save successful" 
End If 
'if backup not saved, inform user 
If Not saveSuccess Then 
    MsgBox "save canceled, please save backup before adding new items to the archive today" 
End If 
End Sub 

私はちょうどマクロに

  • ファイルフィルタを微調整しようとした事は、ちょうどすべてのファイル
  • と空のファイルフィルタを型として保存ワークブック
  • ブランクファイルフィルタを得意とする
  • ファイルフィルタを有効に.xlsxという名前の末尾に
  • ディレクトリがない初期のファイル名ですが、ChDirがあるので、右のsavで開きますどこにでも位置しています

助けがあれば助かります。

[1]

答えて

0

GetSaveAsFilenameを開き


ウィンドウとして保存は、ユーザーが名前を付けて保存]ダイアログボックスをキャンセルした場合、または、彼らが選択したファイル名を含む文字列ならば、ブールFalseなりますVariantを返します彼らはダイアログをキャンセルしませんでした。

非ブール値が返された場合

Dim saveSuccess As Boolean 

は問題が発生しますと言ってあなたのライン。代わりに

Dim saveSuccess As Variant 

を代わりに使用してください。


これはまだかかわらず、他の問題であなたを残します:

  1. Sheets(3).Range "E22" = Dateが無効で、おそらくいない時点でSheets(3).Range("E22") = Date
  2. *xlsmおそらくあるべき*.xlsm
  3. されていることを意味しています実際にファイルを保存しています。助けのための

    If saveSuccess = False Then 
        'if backup not saved, inform user 
        MsgBox "save canceled, please save backup before adding new items to the archive today" 
    Else 
        If UCase(Right(saveSuccess, 5)) = ".XLSM" Then 
         ActiveWorkbook.SaveAs saveSuccess, xlOpenXMLWorkbookMacroEnabled 
         'if backup saved, update date of last backup 
         Sheets(3).Range("E22") = Date 
         MsgBox "save successful" 
        ElseIf UCase(Right(saveSuccess, 5)) = ".XLSX" Then 
         ActiveWorkbook.SaveAs saveSuccess, xlOpenXMLWorkbook 
         'if backup saved, update date of last backup 
         Sheets(3).Range("E22") = Date 
         MsgBox "save successful" 
        Else 
         MsgBox "Unrecognised file extension chosen - backup not created" 
        End If 
    End If 
    
+0

ありがとう:コードのあなたの最後のビットは、おそらくのようなものでなければなりません。私は問題がdateNow文字列の書式設定であることを発見しました。 MsgBox(dateNow)を入れた後に、文字列にスラッシュ(月/日/年)を区切った数字がリストされていることが示されました。ファイル名に渡されたときに、save as関数は存在しなかったフォルダを検索しました。 dateNow =月(日付)と日(日付)&年(日付) と交換しました。現在は – NoNels

+0

@NoNels本当に奇妙に聞こえます。私はファイル名に無効な文字があると思っていたので、何が起こるかをテストしたところ、ダイアログを表示する前に名前が空白になっていました。(そして、エラーを出さないにもかかわらず、私はあなたの 'dateNow'変数をチェックし、**スラッシュを入れていないことを保証しました - あなたは' 'mmddyyyy''フォーマットを使用していますそれはそうしないでしょう) – YowE3K

+0

あなたはそうです。私はあなたの修正を採用した後、それが昨日それを弄っていた間に、 'mmddyyyy'から引用符を削除してしまったに違いありません。私の悪い。私が掲示したコードを使って試してみると、あなたが説明したように動作します。私はまだコーディングにかなり新しいです、そして、これは私の最初の投稿でした、私はそれが私のせいだと推測しています。重要なことは、コードが今働くことです。 :) – NoNels

関連する問題