次の方法で共有

Excel VBAでのWindowsバージョンの調べ方

Anonymous
2015-10-11T12:31:02+00:00

Windows7からWindows10にアップグレードしました。(32ビット版)

マシンにはExcel2003、2007、2010、2013がインストールされています。(32ビット版)

VBAでExcelが稼働しているWindowsのバージョンを調べるため、Application.OperatingSystem

を実行しました。

Excel2003、2007、2010では、NT6.02と表示されます。"Windows (32-bit) NT 6.02"

Excel2013では、NT :.00と表示されます。"Windows (32-bit) NT :.00"

Windows10では、"10.00" と表示されると思うのですが、現状は前述のような結果が表示され、

現在、VBAが稼働しているWindowsのバージョンを正しく調べることができません。

環境的に問題があるのでしょうか?

ご教授ください。

よろしくお願いします。

開発者テクノロジ | Visual Basic for Applications

ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。

0 件のコメント コメントはありません

質問作成者が受け入れた回答

Anonymous
2015-10-12T14:22:18+00:00

http://answers.microsoft.com/ja-jp/search/search?SearchTerm=Win32_OperatingSystem&IsSuggestedTerm=false&tab=&CurrentScope.ForumName=Office&CurrentScope.Filter=&ContentTypeScope=#/Office///1

を参考に標準モジュールにて、

Sub test1()

    Dim oLocator As Object

    Dim oService As Object

    Dim oClassSet As Object

    Dim oClass As Object, prp As Object

    Dim i As Long, j As Long

    Set oLocator = CreateObject("WbemScripting.SWbemLocator")

    Set oService = oLocator.ConnectServer

    Set oClassSet = oService.ExecQuery("Select * From Win32_OperatingSystem")

    For Each oClass In oClassSet

        For Each prp In oClass.properties_

            i = i + 1

            If IsArray(prp.Value) Then

                For j = 0 To UBound(prp.Value)

                    Debug.Print i, prp.Name, prp(j)

                Next

            Else

                Debug.Print i, prp.Name, prp.Value

            End If

            j = j + 1

        Next

    Next

    Set oClassSet = Nothing: Set oService = Nothing: Set oLocator = Nothing

End Sub

とするとイミディエイト ウィンドウにごちゃっと出力されるので欲しいとこだけ取り出して

Function OSinfo() As String

    Dim oLocator As Object

    Dim oService As Object

    Dim oClassSet As Object

    Dim oClass As Object, prp As Object

    Dim i As Long, j As Long

    Set oLocator = CreateObject("WbemScripting.SWbemLocator")

    Set oService = oLocator.ConnectServer

    Set oClassSet = oService.ExecQuery("Select * From Win32_OperatingSystem")

    For Each oClass In oClassSet

        OSinfo = oClass.Caption & "|" & oClass.Version & "|" & oClass.OSArchitecture

    Next

    Set oClassSet = Nothing: Set oService = Nothing: Set oLocator = Nothing

End Function

で下のようなのが取得できます。

Mirosoft Windows 10 Pro|10.0.10240|64 ビット

Application.OperatingSystemについては今後のアップデートに期待しましょ。

この回答は役に立ちましたか?

3 人がこの回答が役に立ったと思いました。
0 件のコメント コメントはありません

1 件の追加の回答

並べ替え方法: 最も役に立つ
  1. Anonymous
    2015-10-13T04:05:05+00:00

    ありがとうございました。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません