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

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

ただいまの
回答率

90.62%

  • VBA

    1716questions

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

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

解決済

回答 3

投稿

  • 評価
  • クリップ 0
  • VIEW 1,483

seina

score 4

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

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

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
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

checkベストアンサー

0

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/09/26 09:07

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

    キャンセル

  • 2017/09/26 09:20

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

    キャンセル

  • 2017/09/26 09:55

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

    キャンセル

  • 2017/09/26 10:08 編集

    では、現状ほぼ、以下のようになっていますよね。
    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

    キャンセル

  • 2017/09/26 10:40

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

    キャンセル

  • 2017/09/26 10:59

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

    キャンセル

  • 2017/09/26 13:59

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

    キャンセル

  • 2017/09/26 14:19

    提示されているコードで、パスをローカルに変更し、ループや制御はそのままで、処理ロジックはコメントアウトした状態でDebug.Printを実行し、イミディエイトウインドウに表示されることは確認しています。

    実行しているソースは提示のソースと同じものですよね?
    また、どのように実行していますか? その処理が起動されていないとしか思えないのですが。。

    キャンセル

  • 2017/09/26 14:25

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

    キャンセル

  • 2017/09/26 15:17

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

    キャンセル

  • 2017/09/26 15:24

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

    キャンセル

  • 2017/09/26 15:30

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

    キャンセル

  • 2017/09/26 15:47

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

    なお、質問にはそれぞれ答えてください。

    キャンセル

  • 2017/09/28 09:17

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

    キャンセル

  • 2017/09/28 09: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

    キャンセル

  • 2017/09/28 09:40

    >呼び出しというのはどのような状況でしょうか?
    north_snow()がどのようにして起動されているかです。
    ブレークポイントまでに分岐はないので、そこに到達しないのはエラーが発生していることが考えられますが、エラーメッセージもないなら、呼び出し元でエラーハンドリングしているのでは?ということからの質問です。

    取り敢えず、north_snow()の先頭の
    filefolder = "\\rfs\EC_INTL\Common\IEC\DATA\TB\01_RDC\"
    あたりにブレークポイントを設定しステップ実行してみて下さい。

    ところで、盛大に文字化けしていますが、フォントは何を使われていますか?

    キャンセル

  • 2017/09/28 11:51

    >north_snow()がどのようにして起動されているかです。
    ブレークポイントまでに分岐はないので、そこに到達しないのはエラーが発生していることが考えられますが、エラーメッセージもないなら、呼び出し元でエラーハンドリングしているのでは?ということからの質問です。
    おっしゃられていることの意味は分かるのですが、実際どのようにして起動の仕方を調べたらいいか分かりません。何から何まで分からなくて....ごめんなさい。

    >取り敢えず、north_snow()の先頭の
    filefolder = "\\rfs\EC_INTL\Common\IEC\DATA\TB\01_RDC\"
    あたりにブレークポイントを設定しステップ実行してみて下さい。
    openname, filefolder共に=""と表示されました!

    コメントの部分は自分がどのようにコードを書いたかの覚書にするといいと聞いたので、ひらがなで書いていました。その部分がこちらに貼り付けるときに文字化けしたようです。

    キャンセル

  • 2017/09/28 11:59 編集

    >実際どのようにして起動の仕方を調べたらいいか分かりません。
    何をしたら(例えば登録しているマクロの実行だとか)その処理が動き始めるかです。
    ブレークポイントを設定した後、実行を開始するのにあなたが行っている操作を聞いています。

    >openname, filefolder共に=""と表示されました!
    いえ、そこで終わるのではなく、プレークポイントに止まったら、F8を押下してください。
    1行ごとに処理が進んでいきます。
    その際に意図している結果になっていないところを確認して下さい。

    キャンセル

  • 2017/09/28 12:31

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

    キャンセル

  • 2017/09/28 13:27 編集

    起動については作成途中という事で理解しました。

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

    キャンセル

  • 2017/09/28 14:35

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

    キャンセル

  • 2017/09/28 15:02

    環境依存ということなら、ちょっと私にはお手上げですね。
    手元で実行していますがファイルはあるのにOPENできない事象は発生しません。

    読み込むファイルを変更して動作するならファイルの問題ですし、PCを変更してOKなら環境依存です。
    その場合は、ひょっとしたら、update関係でなにかあるかもしれません。

    キャンセル

  • 2017/09/28 15:45

    ここまで根気強くお付き合いいただきありがとうございます。

    saziさんが1つ1つ丁寧にさまざまな視点から問題点を考えて下さったので、とても勉強になりました。そして一緒に考えて下さる方がいて、とても心強かったです!!

    コードだけでなく、パソコンやファイルの設定までの知識が必要だとはプログラミングって奥が深いです.....。心折れないように、VBAの勉強がんばりますね!

    キャンセル

  • 2017/09/28 16:51

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

    キャンセル

0

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

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

ではなく、

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/09/26 09:10

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

    キャンセル

0

こんにちは。

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

Option Explicit


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

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

イメージ説明

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/09/26 00:18 編集

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

    キャンセル

  • 2017/09/26 00:29

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

    キャンセル

  • 2017/09/26 00:42

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

    キャンセル

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

  • ただいまの回答率 90.62%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • VBA

    1716questions

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