スクリプトのカウントアップ方法について
下記スクリプトの、
If CInt(i) < objFolderItems.Count Then
から最後から2行目までのカウンタ カウントアップ処理を直したいです。
iがカウンタです。
ここで、フォルダから取り出した物が.CSVファイルであればカウンタをカウントアップし、否の場合はカウントアップしないようにスクリプトを改造したいが、どう直せばよいでしょうか?
どうも現状は、フォルダから取り出した物が.CSVファイルか否かに関わらず、すべてカウントアップするようです。
---<ここから>ーー
Public objApl
Public objFolder
Public objFolderItems
Public objItem
Public folderPath
Public i
folderPath = !フォルダ名!
'シェルアプリケーションオブジェクトを作成します
Set objApl = CreateObject("Shell.Application")
'指定フォルダのオブジェクトを作成します
Set objFolder = objApl.NameSpace(folderPath)
'フォルダオブジェクトから、入っているファイルやフォルダの全情報を取得します
Set objFolderItems = objFolder.Items()
'ファイルシステムオブジェクトを作成します。
Set objFileSys = CreateObject("Scripting.FileSystemObject")
'変数値を取得
i = !カウンタ!
If CInt(i) < objFolderItems.Count Then
'ファイルやフォルダの情報を1コ取り出します
Set objItem = objFolderItems.Item(CInt(i))
'取り出した物が.CSVファイルか否かを判定
SetUMSVariable $ファイル名$, objItem.path
'取り出した物が.CSVファイルであれば、種別にTrueを設定
If UCase(objFileSys.GetExtensionName(objItem.path)) = "CSV" Then
SetUMSVariable $種別$, "True"
i = i + 1
MsgBox i
'MsgBox 種別
Else
'取り出した物が.CSVファイル以外であれば、種別にFalseを設定
SetUMSVariable $種別$, "False"
SetUMSVariable $ファイル名$, ""
End If
Else
Err.Raise 1, "", "フォルダもしくはインデックスの指定に誤りがあります。"
End If
Set objItem = Nothing
---<ここまで>ーー


If Ucase~の手前で
msgbox objItem.path あるいは
msgbox UCase(objFilesSys.~)で
ファイル名(の拡張子)を確認してみてはいかがでしょうか。
大変失礼しました。スクリプトをよく見直すと、 ご指摘の通り、If CInt(i) から最後から2行目までは、ループ処理ではなく、if文ですね。このノードの上位処理がループ処理でした。ちなみに今回のスクリプトのノードは上記フローチャートのグレイアウトされたノードです。
>設定タブで指定したインデックス番目
ではなく、欲しいのは、下記プロパティの変数:ファイルカウンタ のCSVパスです。
ちなみにこのファイルカウンタは、上記フローチャートのループの中で、1から始まって、フォルダ内のCSVファイルの数までカウントアップします。
最後にダンプをしていることから、あるフォルダのcsvファイルのリストが欲しいのでは、と推測したうえで。
であれば、コマンドラインで"dir *.csv /B"で求めるものが得られます。
ファイルに出力するなら"dir *.csv /B > <filename>"です。
>どうも現状は、フォルダから取り出した物が.CSVファイルか否かに関わらず、すべてカウントアップするようです。
フローチャート図を確認すると、繰り返し下から2番めのノードでカウンタをカウントアップしているように見えます。
コードを確認した限り、ファイルがCSVのときのみカウントアップするようになっております。
コード内でカウントアップしているのは下記の部分です。
>i = i + 1
>MsgBox i
>'MsgBox 種別
また、WinActorでは入力変数(!xxx!)と出力変数($xxx$)があり、入力変数への書き込み(上書き)出力は出来ません。
(あったら教えてください)
そのため、上記のコードで一旦カウントアップされているように見えますが、コードないだけであり、変数への上書きはされていない状態です。
試しにメッセージボックスを用いて確認をしてみてください(コード上:1、ボックス上;0)
>ここで、フォルダから取り出した物が.CSVファイルであればカウンタをカウントアップし、否の場合はカウントアップしないようにスクリプトを改造したい>が、どう直せばよいでしょうか?
もし、CSVファイルかどうかで判断し、カウントアップを行う場合は、【分岐】ノードを利用してください。
分岐の際の、条件は、「種別」で判断させます。(条件:種別がtrue)
その際ですが、コード中のカウントアップ及びメッセージボックスは削除したほうが管理するうえでよいと思います。
>>設定タブで指定したインデックス番目
>ではなく、欲しいのは、下記プロパティの変数:ファイルカウンタ のCSVパスです。
このスクリプトは、カウンタを使ってフォルダ内のカウンタ番目のファイルを取得してきます。
下記にフォルダ内に3つのファイルがあった場合の例を記載します。
[例]
カウンタが0の場合:a.txt の絶対パスを取得
カウンタが0の場合:b.csv の絶対パスを取得
カウンタが0の場合:c.txt の絶対パスを取得
もし、CSVファイルのみパスを取得したいのであれば、前述の分岐も用いて、その中で取得してください。
CSVのファイル数も取得したいのであれば、分岐後に別のCSVカウント用のカウンタを作成しカウントアップさせてみてください。

「WinActorでは入力変数(!xxx!)と出力変数($xxx$)があり、入力変数への書き込み(上書き)出力は出来ません」とありますが、ライブラリの「Excel操作(行の読み取り」でカウンタ変数に読み書きしています。
> If CInt(i) から最後から2行目までがループ処理になっています。
現状のスクリプトを拝見しますと、If文であるためループ処理にはなっていないのですが、ループ処理にしたいというご要望でしょうか。スクリプトで実行したいものは、フォルダに含まれるCSVについて、設定タブで指定したインデックス番目のCSVパスを取得したいという内容でよろしかったでしょうか。