66555
**前提・実現したいこと**  
VBAで転換マクロツールを創っています。  
いま、画像に示すようにVBAでシート1のA7、C7、シート2のA2の3つのセルの数値を合算させて、  
シート2のA2のセルに"20200301"と表示するVBAを組んでいます。

40行目に`str = FormatYYYYMMDD(Sheets(Sheet1).Range("A7"),
Sheets(Sheet1).Range("C7"), Range("A2"))`というコードを追加した所、  
38行目の`sh.SaveAs Filename:="C:\Work\出力先\test.csv",
FileFormat:=xlCSV`のコードで、1004エラーが出ます。

原因・改善法などおわかりになれば教えてください。

[![イメージ\[!\[画像の説明をここに入力](https://i.stack.imgur.com/tlqIP.png)](https://i.stack.imgur.com/tlqIP.png)[VBA]  
![画像の説明をここに入力](https://i.stack.imgur.com/808Go.png)[シート１]  
![画像の説明をここに入力](https://i.stack.imgur.com/GjYHq.png)[シート２]

**発生している問題・エラーメッセージ**

```

    実行時エラー'1004'
    'SaveAs'メソッドは失敗しました:_'Worksheet'オブジェクト
    
```

**該当のソースコード**

```

    Public Sub FileUpload() 'ファイル選択ダイアログモジュール
    
        Dim fType As Variant
        Dim fPath As Variant
        Dim str As String 'yyyymmdd出力用
    
    '※選択できるファイルの種類はエクセルファイルのみ
        fType = "Microsoft Excelブック,*.xls?" '※
    
    'ファイル参照ダイアログの表示
        fPath = Application.GetOpenFilename(fType, , "") 'fType = fPath。
        Debug.Print fPath
        If fPath = False Then
    'ダイアログでキャンセルボタンが押された場合は処理を終了します
           Exit Sub 'Endで強制終了はよろしくない
        End If
    
        Dim Target As Workbook 'コンバートモジュール
        Set Target = Workbooks.Open(fPath)
    
        'これをセル抜き出しから数値抜出に変更⇔循環小数エラーの解決｡
        Target.Sheets(1).Range("G2").Copy ThisWorkbook.Sheets(2).Range("A2")
        Target.Sheets(1).Range("H2").Copy ThisWorkbook.Sheets(2).Range("A3")
    
        'ThisWorkbook.Sheets(2).Range("A2") = FormatYYYYMMDD(Sheet1!A7, Sheet1!C7, A2)
        'ThisWorkbook.Sheets(2).Range("A3") = FormatYYYYMMDD(Sheet1!A7, Sheet1!C7, A3)
    
        ThisWorkbook.Sheets(2).Range("A2:A3").Value = ThisWorkbook.Sheets(2).Range("A2:A3").Value '数式→数値変換
        ThisWorkbook.Sheets(2).Range("A2:A3").NumberFormatLocal = "yyyymmdd"
    
        'yyyymmdd変換、半早のスケジュール登録すれば完成。
    
         Target.Close '※開いたブックは閉じておく
         Set Target = Nothing '念のため、変数開放
    
    Dim sh As Worksheet 'csv保存モジュール
    Set sh = Worksheets(2)
    sh.SaveAs Filename:="C:\Work\出力先\test.csv", FileFormat:=xlCSV
    
    str = FormatYYYYMMDD(Worksheets("Sheet1").Range("A7").Value, Worksheets("Sheet1").Range("C7").Value, Worksheets("Sheet2").Range("A2").Value)
    
    MsgBox (str) 'yyyymmdd出力用
    
    End Sub
    
    Public Function FormatYYYYMMDD(ByVal yyyy As Variant, ByVal mm As Variant, ByVal dd As Variant) As String
        FormatYYYYMMDD = Format(yyyy * 10000 + mm * 100 + dd, "00000000")
    End Function
    
    
```

**試したこと**  
別サイトで回答を貰い、40行目のstrのコードを、`"str = FormatYYYYMMDD(Sheets(Sheet1).Range("A7"),
Sheets(Sheet1).Range("C7"), Range("A2"))"`と、  
`"str = FormatYYYYMMDD(Worksheets("Sheet1").Range("A7").Value,
Worksheets("Sheet1").Range("C7").Value,
Worksheets("Sheet2").Range("A2").Value)"`  
の、2通り試したのですが、  
どちらも同じように38行目のSaveAsメソッドで1004エラーを吐いてしまします。

もしおわかりになればお教え頂けると助かります。  
よろしくお願いします。

**補足情報（FW/ツールのバージョンなど）**  
Excle2016,Windows10
CC BY-SA 4.0
2020-05-07T09:01:32.137
66385
2020-05-13T05:01:06.510
2020-05-08T01:50:29.523
32986
38336
question
windows-10 vba excel
VBA　シート1のA7、C7、シート2のA2の"2020"03"01"の数値を合算させyyyymmddの"20200301"と数値でセルに表示する手法
一応解決しました。  
VBAをスリム化して書き直し再現性をチェックして試行錯誤した所、  
csv上書き処理をキャンセルする際に1004エラーが出るということを突き止めました。  
上書きすればエラーは出ず、またcsvファイルを削除して保存する際もエラーが出ません。

根本的な原因、上書き処理をキャンセルする際に何故エラーが出るのか、エラーが出なくなる為の対処法はまだ未解決ですが、全体の開発を進めてから後程この仕様を解決することにしました。  
ご協力ありがとうございます。
CC BY-SA 4.0
2020-05-13T05:01:06.510
66555
2020-05-13T05:01:06.510
38336
66385
answer