質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

3回答

14628閲覧

エラーの表示がないのにプログラムが実行されない

seina

総合スコア12

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2017/09/25 06:31

プログラムを実行する際エラーの表示はなく実行できるのですが、下記のコードにあるようなファイル名の変更やシートのコピーなどの処理や変更ができておりません。ただプログラムを実行する際、ページが点滅?したりカーソルが更新中の状態にはなるのでプログラムは実行されているように思います。

同じような経験をされた方、また問題を引き起こしている要因に心当たりある方がいましたら、教えていただきたいです。よろしくお願いします。

Sub north_snow() Dim Mstr As String Dim filefolder As String Dim openname As String Dim orgShCnt As Long, iCnt As Long filefolder = "\rfs\EC_INTL\Common\IEC\DATA\TB\01_RDC\" Set WB = Workbooks.Open(Filename:=filefolder & "‚Ü‚Æ‚ß.xlsm") orgShCnt = WB.Sheets.Count openname = Dir(filefolder & "*.xls?") Do Until openname = "" If InStr(openname, "20") <> 0 Then openname = Dir() Else If openname <> ThisWorkbook.Name And openname <> "‚Ü‚Æ‚ß.xlsm" And openname Like "*-*" Then Set CB = Workbooks.Open(Filename:=filefolder & openname) CB.Worksheets(CB.Worksheets.Count).Copy after:=WB.Worksheets(WB.Worksheets.Count) CB.Close savechanges:=False Mstr = Replace(openname, ".xlsx", "") Mstr = Format(DateValue(Mid(Mstr, InStr(Mstr, "-") + 1, 3) & "/1"), "yyyy_mm") & openname Name filefolder & openname As filefolder & Mstr End If End If openname = Dir() Loop Application.DisplayAlerts = False WB.Sheets(1).Delet Application.DisplayAlerts = True WB.Save WB.Close Set CB = Nothing Set WB = Nothing End Sub

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

ファイルが存在するのに存在しないとエラーが発生する・特定の条件のときは処理をスキップしたいとはコードが少し違ってますね。
上記でコメントしたのと同様ですが、ループ内のif文中でopenname = Dir()で次のファイルを読み飛ばしているからじゃないでしょうか。

ところで、どっちで続けるのでしょうか?

投稿2017/09/25 15:51

sazi

総合スコア25184

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

seina

2017/09/26 00:07

特定の条件では処理をスキップしたいと思っています!
sazi

2017/09/26 00:20

はい。スキップは良いのですが、処理すべきものまでスキップしている、ループの中の内側のDir()の処理が不要だと。
seina

2017/09/26 00:55

今ループの1行上のDir()を削除しプログラムを実行しましたが、変化ありませんでした。
sazi

2017/09/26 01:09 編集

では、現状ほぼ、以下のようになっていますよね。 Do Until openname = "" If InStr(openname, "20") <> 0 Then ' openname = Dir() Else If openname <> ThisWorkbook.Name And openname <> "?U?A?s.xlsm" And openname Like "*-*" Then   ~略~ End If End If openname = Dir() Loop それを以下の様にしてみて、イミディエイトウインドウにどのように表示されるかで確認して見て下さい Do Until openname = "" If InStr(openname, "20") <> 0 Then Debug.Print "then:" & openname ' openname = Dir() Else If openname <> ThisWorkbook.Name And openname <> "?U?A?s.xlsm" And openname Like "*-*" Then Debug.Print "else:" & openname   ~略~ End If End If openname = Dir() Loop
seina

2017/09/26 01:40

コードを変更しイミディエイトウィンドウを開きプログラムを実行しましたが、何も表示がありません。ちなみにローカルウィンドウにも何も記載がない状態です。
sazi

2017/09/26 01:59

指定しているパスは、エクセルファイルの格納されているフォルダですよね? そうであれば、ネットワークドライブから、対象のフォルダをローカルにコピーして、そのフォルダのパスを指定して実行してみてください。 それでうまく行くなら、ネットワークドライブへの接続の問題になります。
seina

2017/09/26 04:59

デスクトップにファイルをコピーして実行しましたが、同様の結果に至りました...
sazi

2017/09/26 05:19

提示されているコードで、パスをローカルに変更し、ループや制御はそのままで、処理ロジックはコメントアウトした状態でDebug.Printを実行し、イミディエイトウインドウに表示されることは確認しています。 実行しているソースは提示のソースと同じものですよね? また、どのように実行していますか? その処理が起動されていないとしか思えないのですが。。
sazi

2017/09/26 05:25

因みに、そのエクセルファイルの属性は、「隠しファイル」にはなっていませんよね?
seina

2017/09/26 06:17

実行しているのは上記のコードです。実行の際はF5ボタンで行っています。隠しファイル確認しましたが、隠しファイルではありませんでした。
sazi

2017/09/26 06:24

デバッグするしかありませんね。 openname = Dir(filefolder & "*.xls?") 上記部分にブレークポイントを設定して、ステップ実行(F8)した後に、openname とfilefolder の内容を確認して見て下さい。どうなっていますか?
seina

2017/09/26 06:30

はじめのSubが黄色くなりました。ローカルウィンドウには openname : "" : Stringと filefolder : "" : Stringと表示されます。イミディエイトウィンドウでは反応なしです。
sazi

2017/09/26 06:47

はじめのsubって何ですか?north_snow()のことじゃなくて? ブレークポイントには到達していないってことですよね? north_snow()はどこからか呼び出しているんでしょうか? メニュー⇒デバッグ⇒VBAプロジェクトのコンパイル を行って見てください。 ※有効になっていない場合は、コードを動作に関係ない編集(改行を追加とか)すれば有効になります。 なお、質問にはそれぞれ答えてください。
seina

2017/09/28 00:17

north_snow()のことです。 ブレークポイントには達しませんでした。 呼び出しというのはどのような状況でしょうか?同じモジュール内に他のSubやFunctionはあります。 コンパイルを行いましたが、何も起こりませんでした。
seina

2017/09/28 00:19

ちなみにこちらがモジュール内の全内容です。他のコードやモジュールはこのファイルにありません。 Sub north_snow() Dim Mstr As String Dim filefolder As String Dim openname As String Dim orgShCnt As Long, iCnt As Long Dim WB As Workbook, CB As Workbook filefolder = "\rfs\EC_INTL\Common\IEC\DATA\TB\01_RDC\" Set WB = Workbooks.Open(Filename:=filefolder & "‚Ü‚Æ‚ß.xlsm") Set WB = ActiveWorkbook orgShCnt = WB.Sheets.Count openname = Dir(filefolder & "*.xls?") Do Until openname = "" If IsNumeric(Left(openname, 4)) Then Debug.Print "then:" & openname Else If openname <> ThisWorkbook.Name And openname <> "‚Ü‚Æ‚ß.xlsm" And openname Like "*-*" Then Set CB = Workbooks.Open(Filename:=filefolder & openname) CB.Worksheets(CB.Worksheets.Count).Copy after:=WB.Worksheets(WB.Worksheets.Count) CB.Close savechanges:=False Mstr = Replace(openname, ".xlsx", "") Mstr = Format(DateValue(Mid(Mstr, InStr(Mstr, "-") + 1, 3) & "/1"), "yyyy_mm") & openname Name filefolder & openname As filefolder & Mstr End If End If openname = Dir() Loop WB.Save WB.Close Set CB = Nothing Set WB = Nothing End Sub Function cellseparating(a2 As Variant) As Long '”’l‚ÌŽæ‚èo‚µ Dim ”’l As Long 'ƒZƒ‹‚ÉŠÜ‚Ü‚ê‚鐔’l‚ðLongŒ^‚̕ϐ”‚É Dim I As Integer '•¶Žš—ñ‚Ì‚P‚‚P‚‚̏‡”Ô Dim •¶Žš As String For I = 1 To Len(a2) '•¶Žš”•ª‚ðŒJ‚è•Ô‚· If IsNumeric(Mid(a2, I, 1)) Then 'Mid(—ñ,æ“ª,’·‚³) ”’l = ”’l & Mid(a2, I, 1) '•Ï””’l‚ɐ”’l‚ð’ljÁ‚·‚é End If Next I cellseparating = ”’l End Function Sub get_code() Dim I As Integer For I = 1 To Range("A13").SpecialCells(xlCellTypeLastCell).Row '—ñ‚̏I‚í‚è‚Ü‚Å Range("C13").Offset(I - 1, 0).Value = _ cellseparating(Range("A13").Offset(I - 1, 0).Value) Range("d13").Offset(I - 1, 0).Value = cellseparating2(Range("A13").Offset(I - 1, 0).Value) Next I End Sub Function cellseparating2(a2 As Variant) As String '•¶Žš‚ÌŽæ‚èo‚µ Dim ”’l As Long 'ƒZƒ‹‚ÉŠÜ‚Ü‚ê‚鐔’l‚ðLongŒ^‚̕ϐ”‚É Dim I As Integer '•¶Žš—ñ‚Ì‚P‚‚P‚‚̏‡”Ô Dim •¶Žš As String For I = 1 To Len(a2) '•¶Žš”•ª‚ðŒJ‚è•Ô‚· If IsNumeric(Mid(a2, I, 1)) Then 'Mid(—ñ,æ“ª,’·‚³) ”’l = ”’l & Mid(a2, I, 1) '•Ï””’l‚ɐ”’l‚ð’ljÁ‚·‚é Else •¶Žš = •¶Žš & Mid(a2, I, 1) End If Next I cellseparating2 = •¶Žš End Function Sub delete_space() Dim rng As Range Dim txt As String Range("D:D").Select For Each rng In Selection.Cells txt = rng.Value txt = Replace(txt, " ", "") txt = Replace(txt, " ", "") txt = Replace(txt, "-", "") rng.Value = txt Next End Sub
sazi

2017/09/28 00:40

>呼び出しというのはどのような状況でしょうか? north_snow()がどのようにして起動されているかです。 ブレークポイントまでに分岐はないので、そこに到達しないのはエラーが発生していることが考えられますが、エラーメッセージもないなら、呼び出し元でエラーハンドリングしているのでは?ということからの質問です。 取り敢えず、north_snow()の先頭の filefolder = "\rfs\EC_INTL\Common\IEC\DATA\TB\01_RDC\" あたりにブレークポイントを設定しステップ実行してみて下さい。 ところで、盛大に文字化けしていますが、フォントは何を使われていますか?
seina

2017/09/28 02:51

>north_snow()がどのようにして起動されているかです。 ブレークポイントまでに分岐はないので、そこに到達しないのはエラーが発生していることが考えられますが、エラーメッセージもないなら、呼び出し元でエラーハンドリングしているのでは?ということからの質問です。 おっしゃられていることの意味は分かるのですが、実際どのようにして起動の仕方を調べたらいいか分かりません。何から何まで分からなくて....ごめんなさい。 >取り敢えず、north_snow()の先頭の filefolder = "\rfs\EC_INTL\Common\IEC\DATA\TB\01_RDC\" あたりにブレークポイントを設定しステップ実行してみて下さい。 openname, filefolder共に=""と表示されました! コメントの部分は自分がどのようにコードを書いたかの覚書にするといいと聞いたので、ひらがなで書いていました。その部分がこちらに貼り付けるときに文字化けしたようです。
sazi

2017/09/28 02:59 編集

>実際どのようにして起動の仕方を調べたらいいか分かりません。 何をしたら(例えば登録しているマクロの実行だとか)その処理が動き始めるかです。 ブレークポイントを設定した後、実行を開始するのにあなたが行っている操作を聞いています。 >openname, filefolder共に=""と表示されました! いえ、そこで終わるのではなく、プレークポイントに止まったら、F8を押下してください。 1行ごとに処理が進んでいきます。 その際に意図している結果になっていないところを確認して下さい。
seina

2017/09/28 03:31

>ブレークポイントを設定した後、実行を開始するのにあなたが行っている操作を聞いています。 F8ボタンを押しておりました。 >その際に意図している結果になっていないところを確認して下さい。 1行ずつ下に進んだところ、コード内でのWBが存在しない(WB="")のが原因のため下の処理にも移れないという現状です。 Set WB ~ orgShCntで何か原因として考えられることありますか?
sazi

2017/09/28 04:28 編集

起動については作成途中という事で理解しました。 WBが空ということはセットしているステップで「ファイルが見つからない」等のエラーメッセージが出ているのではありませんか? ローカルへファイルをコピーした状態でも確認を行われましたか? ローカルへコピーした状態でOKなら、ネットワークドライブへのアクセスが原因と考えられます。 試しにエクスプローラーで該当のファイルの場所を開いた状態で行って見て下さい。 問題無いようでしたら、対応方法については、以前質問された投稿にコメントしています。
seina

2017/09/28 05:35

>「ファイルが見つからない」等のエラーメッセージが出ているのではありませんか? エラーはでておりませんが、ブレークポイント設定後にWBにカーソルを合わせるとWB=Nothingと表示されます。 >ローカルへファイルをコピーした状態でも確認を行われましたか? デスクトップのファイルにこぴーして確認しました。ファイル名;\Desktop\VBA Learning\ コピーした状態でもファイルがありませんとなり、WB=Nothingという症状も同じです。
sazi

2017/09/28 06:02

環境依存ということなら、ちょっと私にはお手上げですね。 手元で実行していますがファイルはあるのにOPENできない事象は発生しません。 読み込むファイルを変更して動作するならファイルの問題ですし、PCを変更してOKなら環境依存です。 その場合は、ひょっとしたら、update関係でなにかあるかもしれません。
seina

2017/09/28 06:45

ここまで根気強くお付き合いいただきありがとうございます。 saziさんが1つ1つ丁寧にさまざまな視点から問題点を考えて下さったので、とても勉強になりました。そして一緒に考えて下さる方がいて、とても心強かったです!! コードだけでなく、パソコンやファイルの設定までの知識が必要だとはプログラミングって奥が深いです.....。心折れないように、VBAの勉強がんばりますね!
sazi

2017/09/28 07:51

解決に至らなくて残念です。 理解されているはずと思い込み、遠回りさせてしまったようで申し訳ないです。 >心折れないように、VBAの勉強がんばりますね! はい。お互いに頑張りましょう。
guest

0

こんにちは。

全行が示されているか分かりませんので推測が入りますが、VBAProjectのコンパイルが通っていないと思われます。頭に

Option Explicit

を入れて、厳格にコードが書かれているかチェックした方が確実です。少なくとも今のコードでは 変数wbとCBがDimで宣言されていないので、動ける限り動こうとしますが、意図したようには正しく動作しないと思われます。

その上で、Debug.Printや別途ご回答があったようにMsgBoxを使用して動作状況を見るようにすると良いです。

イメージ説明

投稿2017/09/25 07:11

dodox86

総合スコア9183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sazi

2017/09/25 15:43 編集

Option Explicitは変数の宣言を強制するもので、強制しない場合にはコンパイルエラーではありません。
dodox86

2017/09/25 15:29

確かに不適切な記述でした。ご指摘ありがとうございます。
dodox86

2017/09/25 15:42

ご指摘があったように、Option Explicitを記述したことでVBAProjectのコンパイルがエラーになるだけで、最初のszk.さんの書かれた回答がより適切だと思われます。Dimで宣言しなくても動作はしているので、私の回答は外していると思います。とりあえず無視してください。
guest

0

単純にループや条件分岐に入っていないだけだと思いますが、
デバッグ(ブレークポイント)やイミディエイトウィンドウを使って確認されているでしょうか。
まず原因を明確に出来ないと、terataillで確認したところであまり意味がありませんよ。

プログラムは実行されているように思います。

ではなく、

〇行目の処理Aで結果Bを期待しているのですが、実際はCという結果になります。

のように具体的に質問してください。

面倒で原始的ですが、MsgBoxを入れ込むのも簡単な確認の手段です。

投稿2017/09/25 06:57

szk.

総合スコア1400

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

seina

2017/09/26 00:10

質問の仕方のアドバイスありがとうございます。質問をするときは回答していただく方に明確に意図が伝わるよう努めていきたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問