[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『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
あと、>動作は、デバッグ等が起こらず終了します。
ということはエラーでもないような・・・。
(材料不足) 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
ブックを開くことはできて、「製造」シートの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
ソース内の識別子を 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
※ステップ実行という言葉がわからなければ↓を読んでみてください。
【ステップ実行】 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.