ExcelVBA Application.OnTimeで呼び出す関数に引数渡す

OnTimeで呼び出すプロシージャーに引数を渡しています。
全体をシングルクォーテーション(')で囲み、引数をダブルクォーテーション(")で囲みます。

Sub sample1()
  Application.OnTime Now + TimeValue("00:00:05"), "'sample2 ""時間ですよ""'"
End Sub

Sub sample2(ByVal strMsg As String)
  MsgBox strMsg
End Sub

Excelブック単体でExcelVBAを疑似マルチスレッド化

ここ参照

Option Explicit

'親部分
Sub Main()
    Const MAX_PROCESS = 10

    Dim Apps As Collection:    Set Apps = New Collection
    Dim i As Long
    
    '下準備
    Dim App As Excel.Application
    Dim Wb As Workbook
    
    For i = 1 To MAX_PROCESS
        '別インスタンスのExcelを起動
        Set App = New Application
        Apps.Add App
        
        '自分自身を別のインスタンスでも読み取り専用で開かせる
        Set Wb = App.Workbooks.Open(ThisWorkbook.FullName, _
                                    UpdateLinks:=False, _
                                    ReadOnly:=True)
        
        '子プロセスに司令を出す。
            '※この時呼ばれるプロシージャにはOnTimeのみを
            '記述し直ちに応答を返さなければならない。
        App.Run "'" & Wb.Name & "'!ExecSubMacro", i
        
        DoEvents
    Next
    
    Set App = Nothing
    Set Wb = Nothing
    
    '子プロセスの終了待ち : とりあえずWorkbookの数で判断する。
    For i = 1 To Apps.Count
ContinueFor:
        If Apps(i).Workbooks.Count > 0 Then
            Application.Wait [Now() + "00:00:00.2"]
            DoEvents
            'Debug.Print "Not Closed : "; i
            GoTo ContinueFor
        End If
    Next
    
    '子Excelのインスタンスの破棄
    'これをサボるとEXCEL.EXEがゾンビ化するかもしれない。
    On Error Resume Next
    For i = 1 To Apps.Count
        Apps(1).Quit
        Apps.Remove 1
    Next
    On Error GoTo 0
    
    MsgBox "完了!"
End Sub

'SubMacroを別のスレッドで実行させる。
'本プロシージャは呼び出し元に直ちに制御を返さなければならない。
Sub ExecSubMacro(n As Long)
    'OnTimeはThisWorkbookプロセスのスレッドでの呼び出しになる。
    Application.OnTime [Now() + "00:00:00.2"], "'SubMacro """ & n & """'"
End Sub

'時間のかかる処理
Sub SubMacro(n As Long)
    
    '適当に重い処理をする。:WaitはCPUをバカ食いするので採用
    '本当に実行されたことを確認するため、同フォルダにテキストファイルを出力する。
    Dim fso As FileSystemObject: Set fso = New FileSystemObject
    Dim ts As TextStream: Set ts = fso.CreateTextFile(ThisWorkbook.Path & "\" & n & ".txt")
    Dim i As Long
    For i = 1 To 10
        ts.WriteLine Format(Now(), "yyyy/mm/dd hh:mm:ss") & " " & i
        Application.Wait [Now() + "00:00:01"]
    Next
    ts.Close
    Set ts = Nothing
    
    'ブックを閉じることが処理終了の合図とする。
    Application.DisplayAlerts = False
    ThisWorkbook.Close False
    
    '親VBAが捕まえているため、このQuitは無視される気配
    Application.Quit
End Sub

ExcelVBAでブックの一覧を取得

Sub Sample1()
    Dim i As Long, tmp As String
    For i = 1 To Workbooks.Count
        tmp = tmp & Workbooks(i).Name & vbCrLf
    Next i
    MsgBox "現在開いているブックは、" & vbCrLf & tmp & "です"
End Sub

もしくは

Sub Sample2()
    Dim wb As Workbook, tmp As String
    For Each wb In Workbooks
        tmp = tmp & wb.Name & vbCrLf
    Next wb
    MsgBox "現在開いているブックは、" & vbCrLf & tmp & "です"
End Sub

VB.netでwindowsインストールソフトウェア取得

Dim wkRegKey As Microsoft.Win32.RegistryKey
Dim wkKeyName As String
Dim strKeyNames() As String
Dim strKeyName As String
Dim rKey As Microsoft.Win32.RegistryKey
Dim displayName As String

wkKeyName = “SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall”
wkRegKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(wkKeyName, False)

strKeyNames = wkRegKey.GetSubKeyNames()

For Each strKeyName In strKeyNames
    rKey = wkRegKey.OpenSubKey(strKeyName)
    'インストールソフトウェア名取得
    If Not rKey.GetValue(“DisplayName”) Is Nothing Then
        displayName = rKey.GetValue(“DisplayName”).ToString()

        'アンインストール実行ファイル取得
        If Not rKey.GetValue(“UninstallString”) Is Nothing Then
            unInstaller = rKey.GetValue(“UninstallString”)
        End If
    End If
Next