0

下記スクリプトの、

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 CInt(i) から最後から2行目までがループ処理になっています。
現状のスクリプトを拝見しますと、If文であるためループ処理にはなっていないのですが、ループ処理にしたいというご要望でしょうか。スクリプトで実行したいものは、フォルダに含まれるCSVについて、設定タブで指定したインデックス番目のCSVパスを取得したいという内容でよろしかったでしょうか。

If Ucase~の手前で
msgbox objItem.path あるいは
msgbox UCase(objFilesSys.~)で
ファイル名(の拡張子)を確認してみてはいかがでしょうか。