
お世話になります。
以下のようなvbaのコードを考えました。
-------------------------------------------------------------------------
Sub TEST1
Dim ii ’作業用シート記載行
Dim FPass ’対象フォルダパス
ii=5
FPass="c:\work\1"
Call TEST2(A)
End Sub
-------------------------------------------------------------------------
Sub TEST2(A)
Dim FSO
Set FSO = CreateObject("Scripting.FileSystemObject")
'フォルダ内のループ
For Each B In FSO.GetFolder(FPass).SubFolders
ii = ii + 1
Worksheets("作業用").Cells(ii, 1).Value = B
Call subfolder(B)
Next
End Sub
-------------------------------------------------------------------------
このプログラムでやりたいことは、
「特定のフォルダ(c:\work\1)の中にあるサブフォルダを含むフォルダとファイルの
パスをすべて取得し、【作業用】シートに記載することと、そのパス毎に更新日時を取得する」
というものです。
現在「【作業用】シートに記載する」ところで困っています。
取得した引数「B」を作業用シートA1から下にすべて記載していきたいのですが、
Callで戻った時、引数が1にリセットされてしまいます。
これを解決するコードを教えていただけないでしょうか。
分かりずらいところがありましたら申し訳ありません。
No.2ベストアンサー
- 回答日時:
「Call TEST2(A)」で「Sub TEST2(A)」を呼ぶ出しているのはわかるのですが、「Sub TEST2(A)」で引数Aを使用している痕跡が無いのは何故ですか?
>Call subfolder(B)
>引数が1にリセットされてしまいます。
とは、この部分だと思います。「Sub subfolder(B)」の内容を見てみないと確信は持てませんが、ここに原因があるのかもしれません。
それともう1つ、
Sub TEST1 内で定義した Dim FPass や Dim ii は Sub TEST2(A) から参照することはできません。
もしかして、
Call TEST2( FPass)
Sub TEST2(A)
・・・
'フォルダ内のループ
For Each B In FSO.GetFolder(A).SubFolders
・・・
の間違いでしょうか?
っと、ここまで書いて気が付きましたが、リセットされるのは、変数iiではないでしょうか?
これならば、Sub TEST2(A)へiiは引数として渡らないため、毎回0から始まることが原因でしょう。
先ずは「Option Explicit」を使用して曖昧な定義は使用しないことです。
http://officetanaka.net/excel/vba/beginner/11.htm
次に、共通変数となるDim FPass や Dim ii はこれらのSubプロシージャーの外で定義して、どちらからも参照できるようにしなければいけません。
回答ありがとうございます。
いろいろ認識が誤っており、申し訳ありませんでした。
結果的に解決できまして、
解決の糸口となった
>先ずは「Option Explicit」を使用して曖昧な定義は使用しないことです。
>Subプロシージャーの外で定義して、どちらからも参照できるように
を記載していただいたZincer様をベストアンサーにさせていただきます。
ありがとうございました。
No.4
- 回答日時:
こんにちは
いろいろ突っ込みどころがありそうですが、ひとまずご質問の内容に関しては(既にNo2様の回答にもありますが)、「変数のスコープ」に関しての理解が不足しているように思われます。
ひとまず、以下をご一読なさってみてください。
簡単に言えば、異なるプロシージャ間では、変数の相互参照は直接にはできませんということです。
https://docs.microsoft.com/ja-jp/office/vba/lang …
https://docs.microsoft.com/ja-jp/office/vba/lang …
また、「引数」に関してももう少し調べて理解なさった方がよさそうに思われます。
(あまり、適切なページが見つかりませんでしたが・・)
https://vbae.odyssey-com.co.jp/column/no29_1.html
http://addinbox.sakura.ne.jp/Excel_Tips01.htm
https://docs.microsoft.com/ja-jp/office/vba/lang …
回答ありがとうございます。
参考サイトの記載もありがとうございます。
すべて拝見しました。
まさに変数のスコープの理解が足りませんでした。。。
ありがとうございました。
No.3
- 回答日時:
こんにちは。
Call subfolder(B)では、変数を、subfolderへ渡しているだけですね。
但し、subfolder内で、Bの変数を変更してしまうと、TEST2で使っている
変数Bも変更されてしまっているのでは?と推測します。
subfolderのコードがどの様になっているのかと、同じ変数を使わない事や、
Dimなどの変数の宣言を気を付ける必要があるかと思います。
下記、スコープの記事を載せておきます。
https://www.vba-ie.net/programing/variable-scope …
回答ありがとうございます。
ご賢察の通り、一か所の変数を変更してしまっているために
TEST2で使っている変数も変更されていたようです。
スコープの理解不足でした。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
みんなに挑戦してほしい「色彩検定」
これまで多くの方々が受検したが「色彩検定」。その目的や活用法は人それぞれ。今回は、色彩検定に影響を受けた男女3名にインタビュー。
-
このようなデータが、sheet1〜sheet3まであるとします。 (合計2000行くらい) それを1
Excel(エクセル)
-
どなたか下記のマクロ分かりやすく簡単にできませんか? Sub 維持審査評価() ' ' Macro1
Excel(エクセル)
-
各桁の数を足すと32になる7桁の数字を発生させる方法
Excel(エクセル)
-
4
エクセルで、全部のセルのそれぞれ右から2つ目の数字を取り出して合計したい
Excel(エクセル)
-
5
【VBA】配列に格納したデータを基に新たに配列を作成するには
Excel(エクセル)
-
6
エクセル マクロでマクロ名が変わってしまってエラーになります
Excel(エクセル)
-
7
【Excel】エラー解消をお願いします…。
その他(Microsoft Office)
-
8
Excel 2019、これMicrosoft社の誤訳では?
Excel(エクセル)
-
9
エクセルVBAプログラムの組み方について
Excel(エクセル)
-
10
Excelのマクロについて教えてください。
Visual Basic(VBA)
-
11
VBAでも関数でも良いので重複チェックしたい
Excel(エクセル)
-
12
エクセルのマクロを教えてください。
Excel(エクセル)
-
13
エクセルって複雑な処理は避けた方が良くないですか?
Excel(エクセル)
-
14
VBAのFind関数で結合セルを検索するとヒットしない
Visual Basic(VBA)
-
15
ExcelてVBAでマクロを実行したのですが 写真のように表示された数字と数式?が違うのですかどーし
Excel(エクセル)
-
16
Excel VBAのFunctionについて
Visual Basic(VBA)
-
17
excel マクロで数字を入れると、その前後に文字が入るようにする
Excel(エクセル)
-
18
excel2021で実行できないマクロ。どこを直したらいいのか
Visual Basic(VBA)
-
19
マクロ/VBAについて教えてください。
Excel(エクセル)
-
20
マクロで行を追加、削除すると行位置がずれますが、解決方法はありませんか?。
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
人気Q&Aランキング
-
4
microsoft excel objectsとは
-
5
Excel 一覧表から特定の数値を...
-
6
excel串刺し計算で合計値が表示...
-
7
エクセルで個人成績グラフをつ...
-
8
エクセルで シート保護のパス...
-
9
エクセルで設定していないのに...
-
10
Excelで「このブックで、これ以...
-
11
エクセルでページごとにヘッダ...
-
12
エクセルの各シートの保護パス...
-
13
[EXCEL] あるフィールドをキー...
-
14
アクセス IDが空白の時、メッセ...
-
15
エクセルで囲み線で出来ますか?
-
16
Excelでセルを次の行の先頭の列...
-
17
エクセルの計算式でコンマを付...
-
18
エクセルで「-3E+06」と...
-
19
エクセルでハイパーリンクのコピー
-
20
エクセル 数式の無効化
おすすめ情報
公式facebook
公式twitter