dポイントプレゼントキャンペーン実施中!

新規にエクセルを立ち上げて
標準モジュールに

Option Explicit

Private Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" _
(ByVal lpBuffer As String, nSize As Long) As Integer

Sub ahtGetComputerName()
Dim str As String
MsgBox GetComputerName(str, 16)
End Sub


を貼り付けて実行すると
2003だといきなりエクセルが閉じます。
「変更しますか?」も聞かれません。
2007だと画像の画面が出ます。

パソコン名を取得するコードだと思ってたのですがエクセルを強制的に閉じるコードなのでしょうか?
他のapiは使えます。

「強制終了・フリーズしてしまう」の質問画像

A 回答 (2件)

私も、API は相当に怪しいのですが (^^ゞ


これは領域を確保してからでないとダメですね。
これなら OK でした。

Private Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" _
(ByVal lpBuffer As String, nSize As Long) As Integer

Sub ahtGetComputerName()
Dim str As String * 255
Dim rtn As Long

rtn = GetComputerName(str, 16)
MsgBox str
End Sub

蛇足ですがコンピュータ名ならVBAで関数が用意されています。
environ("computerName")
で得られます。
    • good
    • 0
この回答へのお礼

領域の確保と言うコードが必要なのですね。
Dim str As String * 255
このような変数の宣言の仕方があるのですか。

Environは環境変数ですよね。
APIを使わなくても
Sub test()
Debug.Print Environ("computerName")
End Sub
でコンピューター名が取得できました。

お礼日時:2013/01/25 20:06

http://homepage1.nifty.com/MADIA/vb/API/GetCompu …

私には何がどう違って、クラッシュする原因はわかりませんが
    • good
    • 0
この回答へのお礼

うまく出来ました。
しかし仕組みがよくわかりません。
「'バッファを確保」って何のためにするんでしょねー?

お礼日時:2013/01/25 20:06

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!