[[20230823105420]] 『VBAが、xls形式からxlsm形式に変えてから上手く動』(VBA初心者) ページの最後に飛ぶ

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

 

『VBAが、xls形式からxlsm形式に変えてから上手く動作しなくなりました。』(VBA初心者)

別の方が作ったVBAでその方はもういらっしゃらないのですが
xls形式からxlsm形式に変えたら動作はしているのですが、
該当処理をしてくれなくなりました。
4つのExcel1セットのデータなのですが他3つは正常動作しております。
VBAのおかしな点を見つけられていないのでお力を貸していただければと思います。
動作は、デバッグ等が起こらず終了します。
各ファイル名、フォルダ名、シート名等は合っています。

以下該当VBA貼り付けます
Sub AA()
'
' AA Macro
'

'

    ActiveWindow.SelectedSheets.PrintOut Copies:=1
    Sheets("研究").Select
    ActiveWindow.SelectedSheets.PrintOut Copies:=1
    Sheets("総務").Select
    ActiveWindow.SelectedSheets.PrintOut Copies:=1
    Sheets("第二").Select
    ActiveWindow.SelectedSheets.PrintOut Copies:=1
    Sheets("品証").Select
    ActiveWindow.SelectedSheets.PrintOut Copies:=1
    Sheets("業務").Select
    ActiveWindow.SelectedSheets.PrintOut Copies:=1
    Sheets("物流").Select
    ActiveWindow.SelectedSheets.PrintOut Copies:=1
    Sheets("営業").Select
    ActiveWindow.SelectedSheets.PrintOut Copies:=1
    Sheets("製造").Select
    Range("A1").Select
End Sub

Sub auto_open()

    Sheets("製造").Select
    Range("A1").Select
End Sub

Sub 試算表取込()
'

        ChDir "Z:\F\data\会計\会計xlsm"
    Workbooks.Open Filename:="Z:\F\data\会計\会計xlsm\74th月次報告書.XLSM"

'月をコピー

    Sheets("月次報告").Select
    Range("MONTH").Select
    Selection.Copy

    Windows("74th部門別経費.xlsm").Activate
    Sheets("製造").Select
    Range("Tsuki").Select
    Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=False

'試算表データのコピー

    Windows("74th月次報告書.xlsm").Activate
    Sheets("当期TB").Select
        If Range("month").Value = 1 Then
            Range("Rng1").Select
        ElseIf Range("MONTH") = 2 Then
            Range("Rng2").Select
        ElseIf Range("MONTH") = 3 Then
            Range("Rng3").Select
        ElseIf Range("MONTH") = 4 Then
            Range("Rng4").Select
        ElseIf Range("MONTH") = 5 Then
            Range("Rng5").Select
        ElseIf Range("MONTH") = 6 Then
            Range("Rng6").Select
        ElseIf Range("MONTH") = 7 Then
            Range("Rng7").Select
        ElseIf Range("MONTH") = 8 Then
            Range("Rng8").Select
        ElseIf Range("MONTH") = 9 Then
            Range("Rng9").Select
        ElseIf Range("MONTH") = 10 Then
            Range("Rng10").Select
        ElseIf Range("MONTH") = 11 Then
            Range("Rng11").Select
        ElseIf Range("MONTH") = 12 Then
            Range("Rng12").Select
        ElseIf Range("MONTH") = 13 Then
            Range("Rng13").Select
    End If
    Selection.Copy

    Windows("74th部門別経費.xlsm").Activate
    Sheets("試算表").Select
    Range("当期Top").Select
    Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=False

' クリップボードの情報をクリアする

    Application.CutCopyMode = False
    前期試算表取込
End Sub

Sub 前期試算表取込()
'前期試算表データのコピー

    Windows("74th月次報告書.xlsm").Activate
    Sheets("前期TB").Select
        If Range("month").Value = 1 Then
            Range("bRng1").Select
        ElseIf Range("MONTH") = 2 Then
            Range("bRng2").Select
        ElseIf Range("MONTH") = 3 Then
            Range("bRng3").Select
        ElseIf Range("MONTH") = 4 Then
            Range("bRng4").Select
        ElseIf Range("MONTH") = 5 Then
            Range("bRng5").Select
        ElseIf Range("MONTH") = 6 Then
            Range("bRng6").Select
        ElseIf Range("MONTH") = 7 Then
            Range("bRng7").Select
        ElseIf Range("MONTH") = 8 Then
            Range("bRng8").Select
        ElseIf Range("MONTH") = 9 Then
            Range("bRng9").Select
        ElseIf Range("MONTH") = 10 Then
            Range("bRng10").Select
        ElseIf Range("MONTH") = 11 Then
            Range("bRng11").Select
        ElseIf Range("MONTH") = 12 Then
            Range("bRng12").Select
        ElseIf Range("MONTH") = 13 Then
            Range("bRng13").Select
    End If
    Selection.Copy

    Windows("74th部門別経費.xlsm").Activate
    Sheets("試算表").Select
    Range("前期Top").Select
    Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=False

' クリップボードの情報をクリアする

    Application.CutCopyMode = False

    Workbooks("74th月次報告書.xlsm").Close SaveChanges:=False

    Sheets("製造").Select
    Range("A1").Select

End Sub

Sub 全社経費の貼付()
'
' 全社経費の貼付 Macro
'

'

    Application.Goto Reference:="全社経費"
    Selection.Copy
    ChDir "F:\data\会計\会計xlsm"
    Workbooks.Open(Filename:="F:\data\会計\会計xlsm\74th月次報告書.xlsm").RunAutoMacros Which:= _
        xlAutoOpen
    Application.Goto Reference:="全体経費照合"
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    ActiveWorkbook.Save
    ActiveWorkbook.Close
    Application.CutCopyMode = False
    ActiveWindow.SmallScroll Down:=-36
    Range("A1").Select
End Sub
以上となります。
お気づきの点あれば教えていただければと思います。
宜しくお願い致します。

< 使用 Excel:Excel2010、使用 OS:Windows10 >


 >該当処理をしてくれなくなりました。

 該当処理とはどんな処理なんですか?

 そちらは、色んな材料に囲まれていますが、こっちはコードだけなんですけど。

 >4つのExcel1セットのデータなのですが他3つは正常動作しております。
 他の3つも、今回提示されている中に何か含まれているんですか?
 それとも、そちらで合点した事を述べただけで、こっちには無縁の話なんですか?

(半平太) 2023/08/23(水) 12:15:50


 細々見てないですけど、ざっと見で気づいたのは、

 この行エラーになりますよね?

 ChDir "Z:\F\data\会計\会計xlsm"

 Workbooks.Open でフルパス指定するなら、ChDir不要と思いますが、
 どうしてもカレントフォルダを変更したいなら、
 ・ChDirする前に ChDrive する
 ・ChDirの引数は、ファイル名ではなくてフォルダ名
 としないといけないです
(´・ω・`) 2023/08/23(水) 12:40:39

とりあえず、どのVBAを実行するのかだけでも教えて。

あと、>動作は、デバッグ等が起こらず終了します。
ということはエラーでもないような・・・。

(材料不足) 2023/08/23(水) 12:48:42


 >ChDir "Z:\F\data\会計\会計xlsm"
 会計.xlsm
 ではなく
 会計xlsm

 あとその行の下に
 >Workbooks.Open Filename:="Z:\F\data\会計\会計xlsm\74th月次報告書.XLSM"
 とあり
 会計xlsm
 はフォルダ名のようだ。 
(ねむねむ) 2023/08/23(水) 12:55:43

auto_openプロシージャがあるところから、質問者さんはブックを開いたら自動で処理が行われるのだと思っていると想像します。

ブックを開くことはできて、「製造」シートのA1セルにカーソルがある状態から何も起こらないことで
「前任者がいなくて何もわからない」と困っているのかもしれません。

もしかしたらブックのパスやブックの名前も変更しなければいけないかもしれませんが
想像をたくましくしすぎると脱線してしまいそうなので、質問者さんの補足待ちにします。
(火災報知器) 2023/08/23(水) 13:10:40


 >会計xlsm
 >はフォルダ名のようだ。 
 なるほど〜・・・・ です
(´・ω・`) 2023/08/23(水) 13:42:53

話が進んでいますが、書いてしまったので投稿しておきます。

■1
VBAの世界では基本的にブックやシート、セルなど(オブジェクトといいます)はきちんと明示すれば、いちいちアクティブにしたり選択したりする必要はありません。
また、【標準モジュール】に記述しているのであれば、対象シートの指定を省略した場合、ActiveSheetを指定したものとみなされるルールです。

したがって、可読性向上の観点や想定外のオブジェクトを処理対象にしないためにもActive○○やSelection○○に依存しないコードを推奨します。

■2
>動作は、デバッグ等が起こらず終了します。
細かい話ですが、【デバッグ】とは"プログラム修正作業"のことを言います。
おそらく、仰る状況は【実行時エラーが発生】したときに、すぐにデバッグ作業をするか、とりあえずプログラムを終了するかエクセル君から聞かれる状態のことと思われます。

なので、正しく表現するならば【実行時エラーは発生しませんが想定された動作が実行されません】といった表現になろうかと思います。
なお、「終了します」というのがどういう意味かわかりませんが、いきなりExcelが終了してしまう(いわゆる"落ちる"状態)ならば、実は実行時エラーが原因であることも考えられます。

したがって、"希望する動作はしないがプログラムは正常終了する"or"プログラムが正常終了せずExcelがいきなり落ちてしまう"のどちらかわかりませんが、どちらの場合でも【ステップ実行】を行いどの部分が想定どおりにいってないのか検証することが重要と思われます。

■3
「■1」を踏まえつつ、提示のコードを私なりに整理すると↓のようになります。

    Option Explicit
    Sub AA()
        'たぶん、●●は"製造"と予想
        ThisWorkbook.Worksheets(Array("●●", "研究", "総務", "第二", "品証", "業務", "物流", "営業")).PrintOut Copies:=1
    End Sub
    '=========================================
    Sub auto_open()
        Application.Goto ThisWorkbook.Sheets("製造").Range("A1")
    End Sub
    '=========================================
    Sub 試算表取込()
        Dim dstWB As Workbook
        Set dstWB = Workbooks("74th部門別経費.xlsm") '多分自ブック

        With Workbooks.Open(Filename:="Z:\F\data\会計\会計xlsm\74th月次報告書.XLSM")
            .Sheets("月次報告").Range("MONTH").Copy
            dstWB.Sheets("製造").Range("Tsuki").PasteSpecial Paste:=xlValues

            Select Case .Sheets("当期TB").Range("month").Value
                Case 1 To 13
                    .Sheets("当期TB").Range("Rng" & .Sheets("当期TB").Range("month").Value).Copy
                    dstWB.Sheets("試算表").Range("当期Top").PasteSpecial Paste:=xlValues
                    ' ▼【誤】クリップボードの情報をクリアする 【正】コピーカットモードを解除する
                    Application.CutCopyMode = False
                Case Else
                    MsgBox .Sheets("当期TB").Range("month").Address(RowAbsolute:=False, ColumnAbsolute:=False, External:=True) & vbLf & "↑の値が適切ではありません"
                    Exit Sub
            End Select

            Select Case .Sheets("前期TB").Range("month").Value
                Case 1 To 13
                    .Sheets("前期TB").Range("bRng" & .Sheets("前期TB").Range("month").Value).Copy
                    dstWB.Sheets("試算表").Range("前期Top").PasteSpecial Paste:=xlValues
                    ' ▼【誤】クリップボードの情報をクリアする 【正】コピーカットモードを解除する
                    Application.CutCopyMode = False
                Case Else
                    MsgBox .Sheets("前期TB").Range("month").Address(RowAbsolute:=False, ColumnAbsolute:=False, External:=True) & vbLf & "↑の値が適切ではありません"
                    Exit Sub
            End Select
        End With

        Application.Goto dstWB.Sheets("製造").Range("A1")
    End Sub
    '=========================================
    Sub 全社経費の貼付()
        With ActiveSheet
            .Range("全社経費").Copy

            With Workbooks.Open(Filename:="F:\data\会計\会計xlsm\74th月次報告書.xlsm")
                .Sheets("製造").Range("全体経費照合").PasteSpecial Paste:=xlPasteValues
                .Save
                .Close
            End With

            Application.CutCopyMode = False
            Application.Goto .Range("A1")
        End With
    End Sub

まずは上記を参考にコードを修正しつつ、ステップ実行で自己検証されてみてはどうでしょうか?

(もこな2) 2023/08/23(水) 13:57:09


> 会計xlsm
このフォルダは存在しているのか?

ソース内の識別子を xls→xlsm に
一括変換した際に変えられたものならば、
本来のフォルダ名は「会計xls」の筈。

しっかりと、実際のフォルダ名も変えて
あるのならば良いのだが?
(AddinBox_角田) 2023/08/23(水) 14:26:29


火災報知器さんの内容にお答えします。

作成者の方は亡くなっており、その後私の間に3名ぐらいおり
マクロ頼りで仕組みはわからないまま引き継いでおります。

私もおおまかにどういう処理をしているかはマクロ後の結果からある程度推察できる程度に留まります。
xlsファイルのままでは今後怖いということもあり、まだxlsファイルが動いているうちにxlsmファイルとして保存し、動作確認を行っている次第です。

他の方が間違えてしまわないように会計xlsmというフォルダを作りその中に移動しパス等をそれらに合わせて変更し動作確認を行っているのが今です。

マクロ処理が終わった後は、特にエラー等が発生していないが始まる前とどこも変わっていない状況になります。

その他の質問に関しては、私がVBAに詳しくない点と通常業務もある為まだ読み砕けておらずご回答ができかねます。
宜しくお願い致します。
(VBA初心者) 2023/08/24(木) 11:27:23


>マクロ処理が終わった後は、特にエラー等が発生していないが始まる前とどこも変わっていない状況になります。

だからどのマクロ? 挙動はデータの中身にもよるし。
これでは全く進展ないのと同じ。

(材料不足) 2023/08/24(木) 11:52:59


 変更前のVBAは載せられないだろうか?
(ねむねむ) 2023/08/24(木) 12:20:21

 >その他の質問に関しては、私がVBAに詳しくない点と通常業務もある為まだ読み砕けておらずご回答ができかねます。
 えぇ...
 正気の沙汰とは思えない。
 これで大半の人は付き合う気が失せたと思うわ。

 もうちょっと本気の姿勢を見せないと貰える回答も貰えないよ? 他人なめ過ぎでしょ...
(白茶) 2023/08/24(木) 12:37:06

■4
>マクロ頼りで仕組みはわからないまま引き継いで〜どういう処理をしているかはマクロ後の結果からある程度推察できる程度に留まります。
状況はお察ししますが、マクロを解析するうえで【普通に実行して結果を見る】だけでは不十分です。
【ステップ実行】等を行い、どのような処理(命令)をしているのかきちんと把握されることが重要です。
 ※ステップ実行という言葉がわからなければ↓を読んでみてください。

 【ステップ実行】
https://www.239-programing.com/excel-vba/basic/basic023.html
http://plus1excel.web.fc2.com/learning/l301/t405.html

 また、↓も覚えておいて損はないと思います。

 【ブレークポイント】
https://www.239-programing.com/excel-vba/basic/basic022.html
https://www.tipsfound.com/vba/01010

 【イミディエイトウィンドウ】
https://www.239-programing.com/excel-vba/basic/basic024.html
https://excel-ubara.com/excelvba1/EXCELVBA486.html

 【ローカルウィンドウ】
https://excel-ubara.com/excelvba4/EXCEL266.html
http://excelvba.pc-users.net/fol8/8_2.html

無論、そんなこと言われてもよくわからないし、そもそも問題が解決すればそれでよいといったことも考えられますので、そうした場合には身元のしっかりとした会社に外注することも有効だとおもいます。

 ※提示されたコードを拝見しての感想ですが↓くらいしかしてませんから外注費がべらぼうに高くなるとも思えません。
      ・複数のシートをプリントアウトする処理
      ・(製造部の)部門別経費を月次報告書に転記する処理
      ・(製造部の)全社経費を同じシートの、全体経費照合欄に転記する処理

■5
>xlsファイルのままでは今後怖いということもあり
どのようなことを懸念されているのかわかりかねますが、基本的にExcelは下位(バージョン)との互換がありますから、よほどのことがなければ問題は出ないと思います。

むしろ、コードを拝見する限りでは【フォルダパス】【ブック名】【シート名】【セルの名前(セル番地のことではありません))】等々がダイレクトに指定されていますので部門名が変わったりとかセルの名前を変えられたりするほうがよっぽどダメージが大きいと思います。

(もこな2) 2023/08/24(木) 12:58:09


 >Workbooks("74th月次報告書.xlsm").Close SaveChanges:=False
                            ↑ 
                        これをTrueにしないからじゃないですか?

 Falseにしてしまったら、変更を保存しない指定なので、
 74th月次報告書.xlsmは「始まる前とどこも変わっていない状況」になりますよ。

 そもそも、何故「74th月次」と決め打ちなんですかね?
 普通は、処理する時期によって74th部分は動的に変更させるもんなんですが・・

(半平太) 2023/08/24(木) 19:45:22


コメント返信:

[ 一覧(最新更新順) ]


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