B-Teck!

お仕事からゲームまで幅広く

【VBA】Dir関数で指定パスのサブフォルダを全て取得する

'/**
' * getTargetFolders
' * 与えられたパス配下のフォルダをサブフォルダまで配列で取得する
' * @param  strDirectoryPath パス
' * @return フォルダ名のString配列
' */
Function getTargetFolders(ByVal strDirectoryPath As String) As String()
    
    Dim buf As String
    Dim i As Long: i = 0
    Dim folders() As String: ReDim folders(0)
    Dim nowPath As String
    
    folders(0) = strDirectoryPath
    
    '親フォルダループ
    Do
        nowPath = folders(i) & "\"
        buf = Dir(nowPath, vbDirectory)
        '子フォルダループ
        Do While buf <> ""
            If GetAttr(nowPath & buf) = vbDirectory _
               And buf <> "." And buf <> ".." Then
               
                '配列末尾に格納
                ReDim Preserve folders(UBound(folders) + 1)
                folders(UBound(folders)) = nowPath & buf
                    
            End If
            buf = Dir()
        Loop
        
        'フォルダ走査完了
        If i = UBound(folders) Then
            Exit Do
        Else
            i = i + 1
        End If
        
    Loop
    
    getTargetFolders = folders

End Function

参考: Dir関数で全サブフォルダの全ファイルを取得|ExcelマクロVBAサンプル集

【JavaScript】指定時間後や定期的に処理を実行する。

  • window.setInterval(function, delay)
    setIntervalは、functionに与えられた関数・処理をdelay(ms)ごとに繰り返す処理。

  • window.setTimeout(function, delay)
    setTimeoutは、functionに与えられた関数・処理をdelay(ms)後に実行する処理。

setIntervalで定義された処理を止める場合は、setIntervalの戻り値に対してclearIntervalを、
setTimeoutで定義された処理を止める場合は、setTimeoutの戻り値に対してclearTimeoutを行う。

<!DOCTYPE html>
<html lang="en">
    <head>
       <meta charset="UTF-8">
       <title>Title</title>
       <script>
       (function(){
           // windowのロード時にidがdatetimeのエレメントに時刻を挿入
           window.addEventListener("load",function(){
               document.getElementById("datetime").innerText = new Date().toString();
           },false);
           
           // 1000ms毎にidがdatetimeのエレメントの時刻を書き換え
           var interVal = window.setInterval(function(){
                               document.getElementById("datetime").innerText = new Date().toString();
                           }, 1000);
           // 10000ms後に繰り返し処理を終了する
           window.setTimeout(function(){
                               clearInterval(interVal);
                           }, 10000);
       })();
       </script>
   </head>
    <body>
        <p id="datetime"></p>
    </body>
</html>

【JavaScript】Objectタグのdata要素を変更する

HTMLElement.setAttribute("data",変更後data要素)だとIEでうまくいかなかったので、
IEも対応する場合はObject要素自体のDOMをreplaceChildで置き換えてやる必要がある。

/**
* changeObjectData
* objectタグの表示内容を更新する
*
* @param {object} element - 変更対象領域のエレメント
* @param {string} data - 変更後のdata要素
* @return {boolean} true
*/
function changeObjectData(element,data){
   //現在のObjectタグの内容を複製
   var cln = element.cloneNode(true);
   //複製したもののdata要素を変更する
   cln.setAttribute("data",data);
   //自分自身をdata要素変更後のエレメントに置き換える
   element.parentNode.replaceChild(cln, element);
   return true;
}

// ex.利用例
changeObjectData(document.getElementById("hoge"),"pdf/fuga.pdf");