none
VBAからセル値を指定して、PowerShellを動かす方法について RRS feed

  • 質問

  • VBAから、Powershellを起動させるコードは下記だと思いますが、

    複数行ごとにコマンドを事前に記載しておいて、

    セル値から実際のコマンドを拾って、同じシートに書き込みするようにしたいです。

    お知恵をおかしください。

     Sub Test_Sample_Miniature()

    Dim WSH As Object Dim cmdstr As String Dim Result Set WSH = CreateObject("WScript.Shell") cmdstr = Chr(34) & "& {**************}" & Chr(34) Result = WSH.Run("PowerShell -NoExit -nologo -ExecutionPolicy Bypass -Command " & cmdstr, 4, True) Set WSH = Nothing End Sub


    2020年10月31日 12:55

回答

  • こんな?

    Option Explicit
    
    Sub Test()
        Dim sh As Worksheet
        Dim rng As Range
        Dim ret As String
        
        Set sh = ActiveSheet
        'sh.Cells(1, 1).Value = "Get-Date"
        'sh.Cells(2, 1).Value = "Get-ChildItem ""C:\Windows"""
        'sh.Cells(3, 1).Value = ""
        
        Set rng = sh.Range("A1")
        
        Do While Trim(rng.Text) <> ""
            
            ret = Test_Sample_Miniature(rng.Text)
            rng.Offset(0, 1).Value = ret
                        
            Set rng = rng.Offset(1, 0)
        Loop
    End Sub
    
    Function Test_Sample_Miniature(ByVal psCommand As String) As String
        Dim WSH As Object
        Dim cmdstr As String
        Dim Result As String
        
          
        Set WSH = CreateObject("WScript.Shell")
        cmdstr = """& {" & psCommand & "}"""
        
        Dim exe As IWshRuntimeLibrary.WshExec
        Set exe = WSH.Exec("PowerShell -nologo -ExecutionPolicy Bypass -Command " & cmdstr) ', 4, True)
        
        Do While exe.Status = 0
            Result = Result & exe.StdOut.ReadLine
            DoEvents
        Loop
        Set WSH = Nothing
        Test_Sample_Miniature = Result
    End Function


    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    • 回答としてマーク 美咲pino 2020年11月2日 17:14
    2020年11月1日 14:39

すべての返信

  • 変数にいれてセル値を拾う方法はわかりました。

    あとは、結果をExcelに書き出す方法を、試行錯誤しているのですが、

    なかなかうまくいきません。。

    2020年10月31日 19:26
  • こんな?

    Option Explicit
    
    Sub Test()
        Dim sh As Worksheet
        Dim rng As Range
        Dim ret As String
        
        Set sh = ActiveSheet
        'sh.Cells(1, 1).Value = "Get-Date"
        'sh.Cells(2, 1).Value = "Get-ChildItem ""C:\Windows"""
        'sh.Cells(3, 1).Value = ""
        
        Set rng = sh.Range("A1")
        
        Do While Trim(rng.Text) <> ""
            
            ret = Test_Sample_Miniature(rng.Text)
            rng.Offset(0, 1).Value = ret
                        
            Set rng = rng.Offset(1, 0)
        Loop
    End Sub
    
    Function Test_Sample_Miniature(ByVal psCommand As String) As String
        Dim WSH As Object
        Dim cmdstr As String
        Dim Result As String
        
          
        Set WSH = CreateObject("WScript.Shell")
        cmdstr = """& {" & psCommand & "}"""
        
        Dim exe As IWshRuntimeLibrary.WshExec
        Set exe = WSH.Exec("PowerShell -nologo -ExecutionPolicy Bypass -Command " & cmdstr) ', 4, True)
        
        Do While exe.Status = 0
            Result = Result & exe.StdOut.ReadLine
            DoEvents
        Loop
        Set WSH = Nothing
        Test_Sample_Miniature = Result
    End Function


    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    • 回答としてマーク 美咲pino 2020年11月2日 17:14
    2020年11月1日 14:39