[[20140921164721]] 『セルの値をブックの名前にして保存』(たいしょー) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『セルの値をブックの名前にして保存』(たいしょー)

セルB13とセルC13の値を繋げてファイル名とし、指定のフォルダに保存するマクロを作りたいのですが、うまくいきません。
どこが悪いのか、どうかご教示くださいませ。

・作業中のファイルは テスト請求書管理 フォルダにあります。
・B13は  ="Q"&TEXT(E1,"yymm")
・C13は別のマクロの命令で 1 を 00001 と表示させています。
 C13は 00002、00003、00004… のように変動します。
・新しく保存するファイル名は
 Q140900001.xlsm
 としたいのです。

Sub 保存()
 ThisWorkbook.SaveAs Filename:="C:\Users\ユーザー名\Documents\テスト請求書管理\請求書個別フォルダ\" & Range("B13") & Range("C13") & ".xlsm"
End Sub

< 使用 Excel:Excel2013、使用 OS:Windows7 >


こちらのマクロに関しても助言いただけたら幸いです。
エラーが発生し、対処法がわかりません。

Option Explicit

Sub スタート()
'
' スタートMacro

'ここから初期化作業

    Dim rc As Integer
    Range("B14:B20,E15:E35,G15:G35,J15:J35").Select

    If Application.CountA(Range("B14:B20,E15:E35,G15:G35,J15:J35")) > 0 Then
        '入力があればTrueでこのメッセージがでます
        rc = MsgBox("入力があります。初期化すると元に戻せません。初期化しますか?", vbYesNo + vbDefaultButton2)

        If rc = vbYes Then
            Range("B14:B20,E15:E35,G15:G35,J15:J35").ClearContents
         'ここから新規管理ナンバーを振る作業

            Dim range1 As Range

            Windows("管理用ファイル.xlsx").Activate

            Set range1 = Range("A1").End(xlDown)

            Windows("請求書フォーム.xlsm").Activate

            Range("c13").NumberFormatLocal = "00000"

            Range("C13").Value = range1 + 1

        Else

            Range("B15").Select

        End If

    Else
      'ここから新規管理ナンバーを振る作業

        Windows("管理用ファイル.xlsx").Activate

        Set range1 = Range("A1").End(xlDown)

        Windows("請求書フォーム.xlsm").Activate

        Range("c13").NumberFormatLocal = "00000"

        Range("C13").Value = range1 + 1       ←ここで「型が一致しません」とエラーが出てしまいます。

    End If

End Sub
(たいしょー) 2014/09/21(日) 17:50


 >指定のフォルダに保存するマクロを作りたいのですが、うまくいきません。 
 どのようにうまくいかないのか、書いておかれると良いと思いますが。

 Q140900001.xlsmとしたいのにQ14091.xlsmになってしまう
 と言う事であれば、
 Range("C13") の値を「00000」の形にしてからくっつけるか、
   Range("B13").Value & Format(Range("C13").Value, "00000")
 Textで取得する様にしてはどうでしょう?
   Range("B13").Text & Range("C13").Text

 >Range("C13").Value = range1 + 1←ここで「型が一致しません」とエラーが出てしまいます。

 >Dim range1 As Range
 >Set range1 = Range("A1").End(xlDown)
 としてあるので、range1には 値が入っているのではなく
 Range("A1").End(xlDown)のセルがセットされています。

 range1の値に+1 するか
   range1.Value + 1
 そもそも、値を入力する様にしてはどうですか?
   Dim range1  As Long
   range1 = Range("A1").End(xlDown).Value
  
(HANA) 2014/09/21(日) 18:37

HANA 様

コメントいただきましてありがとうございます。

>Sub 保存()
> ThisWorkbook.SaveAs Filename:="C:\Users\ユーザー名\Documents\テスト請求書管理\請求書個別フォルダ\" & Range("B13") & Range("C13") & ".xlsm"
> End Sub

こちらに関してましては、実行すると

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

とメッセージが表示されます。

>Range("C13").Value = range1 + 1←ここで「型が一致しません」とエラーが出てしまいます

こちらに関しましては、
 Set range1 = Range("A1").End(xlDown).Value
とすることで回避できました。

ただ、

      'ここから新規管理ナンバーを振る作業
        Workbooks.Open "C:\Users\qinos.fukuda\Documents\テスト請求書管理\管理用ファイル.xlsx"

        Windows("管理用ファイル.xlsx").Activate

        Set range1 = Range("A1").End(xlDown).Value  ←ここでエラーがでます。

        Windows("請求書フォーム.xlsm").Activate

        Range("c8").NumberFormatLocal = "00000"

        Range("C8").Value = range1 + 1

と記述しなおしたところ、

実行時エラー'424':
オブジェクトが必要です。

とエラーメッセージが出てしまいました。
これを回避するにはどのようにしたらよいでしょうか?
(たいしょー) 2014/09/21(日) 20:12


 >こちらに関してましては、実行すると 
 実行したコードを載せてもらえますか?

 >Set range1 = Range("A1").End(xlDown).Value  ←ここでエラーがでます。
 よく見て下さい。

 >>  Dim range1  As Long
 >>  range1 = Range("A1").End(xlDown).Value
  
(HANA) 2014/09/21(日) 20:19

HANA 様

>実行したコード
は以下です↓↓↓

Sub 請求書を印刷()
'
' 請求書を印刷 Macro
'

    Range("C13").Select
    Selection.Copy
    Windows("管理用ファイル.xlsx").Activate
    Columns("A:A").Select
    Selection.End(xlDown).Offset(1, 0).Select
    Selection.PasteSpecial Paste:=xlPasteAllExceptBorders, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

    Windows("請求書フォーム.xlsm").Activate

    Range("B15").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("管理用ファイル.xlsx").Activate
    Columns("B:B").Select
    Selection.End(xlDown).Offset(1, 0).Select
    Selection.PasteSpecial Paste:=xlPasteAllExceptBorders, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

    Windows("請求書フォーム.xlsm").Activate

    Range("B16").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("管理用ファイル.xlsx").Activate
    Columns("C:C").Select
    Selection.End(xlDown).Offset(1, 0).Select
    Selection.PasteSpecial Paste:=xlPasteAllExceptBorders, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

    Windows("請求書フォーム.xlsm").Activate

    Range("B20").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("管理用ファイル.xlsx").Activate
    Columns("D:D").Select
    Selection.End(xlDown).Offset(1, 0).Select
    Selection.PasteSpecial Paste:=xlPasteAllExceptBorders, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

    Windows("請求書フォーム.xlsm").Activate

    Range("K36").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("管理用ファイル.xlsx").Activate
    Columns("E:E").Select
    Selection.End(xlDown).Offset(1, 0).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

    Windows("請求書フォーム.xlsm").Activate

    Sheets("請求書").Select
    ActiveWindow.SelectedSheets.PrintOut copies:=1, collate:=True, _
        ignoreprintareas:=False

    MsgBox "印刷しました。管理用ファイルに保存します。", vbOKOnly

    '新しいブックに名前をつけて保存
    ThisWorkbook.SaveAs Filename:="C:\Users\qinos.fukuda\Documents\テスト請求書管理\請求書個別フォルダ\" & Range("B13") & Range("C13") & ".xlsm"

End Sub

の中の最後の過程としてファイルを作って保存しようとしています。
 
 
 
 
 
 
 
> >>  Dim range1 As Long
> >>  range1 = Range("A1").End(xlDown).Value

見逃していました。.valueだけつければいいと思っていました。
ありがとうございます。

しかし、また新たなエラーがでてしまいました。

Sub スタート()
'
' スタートMacro

'ここから初期化作業

    Dim rc As Integer
    Range("B9:B14,E8:E28,G8:G28,J8:J28").Select

    If Application.CountA(Range("B9:B14,E8:E28,G8:G28,J8:J28")) > 0 Then
        '入力があればTrueでこのメッセージがでます
        rc = MsgBox("入力があります。初期化すると元に戻せません。初期化しますか?", vbYesNo + vbDefaultButton2)

        If rc = vbYes Then
            Range("B9:B14,E8:E28,G8:G28,J8:J28").ClearContents
         'ここから新規管理ナンバーを振る作業

            Dim range1 As Long

            Workbooks.Open "C:\Users\qinos.fukuda\Documents\テスト請求書管理\管理用ファイル.xlsx"

            Windows("管理用ファイル.xlsx").Activate

            range1 = Range("A1").End(xlDown).Value    ★

            Windows("請求書フォーム.xlsm").Activate

            Range("c8").NumberFormatLocal = "00000"

            Range("C8").Value = range1 + 1

        Else

            Range("B15").Select

        End If

    Else
      'ここから新規管理ナンバーを振る作業
        Workbooks.Open "C:\Users\qinos.fukuda\Documents\テスト請求書管理\管理用ファイル.xlsx"

        Windows("管理用ファイル.xlsx").Activate

        range1 = Range("A1").End(xlDown).Value   ←ここでエラーが出ます。

        Windows("請求書フォーム.xlsm").Activate

        Range("c8").NumberFormatLocal = "00000"

        Range("C8").Value = range1 + 1

    End If

End Sub

エラーメッセージ

実行時エラー'13':
型が一致しません。

★のところでエラーがでないのはなぜでしょうか?

(たいしょー) 2014/09/21(日) 22:08


 >    ThisWorkbook.SaveAs Filename:="C:\Users\qinos.fukuda\Documents\テスト請求書管理\請求書個別フォルダ\" & Range("B13") & Range("C13") & ".xlsm"
 最初のコードと同じ様ですが?

 >range1 = Range("A1").End(xlDown).Value   ←ここでエラーが出ます。
 >エラーメッセージ 
 >実行時エラー'13': 
 >型が一致しません。 
  Range("A1").End(xlDown)のセルの値は何ですか?

 MsgBox Range("A1").End(xlDown).Value
 等を入れて確認してみて下さい。
 数以外が入っていたら、「型が一致しません。」のエラーになります。
  
(HANA) 2014/09/21(日) 22:17

 ちなみに、保存の方ですが
   実行時エラー'1004': 
   'SaveAs'メソッドは失敗しました':_Workbook'オブジェクト 
 は、他に何もメッセージがなく いきなり表示されるのでしょうか?

 また、念のため メッセージボックス等で
 Range("B13") と Range("C13") の値がどうなっているか
 確認してみてもらえますか?
  
(HANA) 2014/09/21(日) 23:11

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.