• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:強制終了・フリーズしてしまう)

エクセルが強制終了・フリーズする問題

このQ&Aのポイント
  • エクセルを新規に立ち上げ、標準モジュールにコードを貼り付けて実行すると、2003ではエクセルが閉じられ、変更の確認が表示されません。一方、2007では画像の画面が表示されます。このコードはパソコン名を取得するコードだと思っていたが、実はエクセルを強制的に閉じるコードだったのか?他のAPIを使って解決する方法はあるのか?
  • エクセルを新規に立ち上げ、標準モジュールにコードを貼り付けて実行すると、2003ではエクセルが強制終了し、変更の確認が表示されません。一方、2007では画像の画面が表示されます。このコードはパソコン名を取得するコードだと思っていたが、実はエクセルを強制的に閉じるコードだったのか?他のAPIを使って解決する方法はあるのか?
  • エクセルを新規に立ち上げ、標準モジュールにコードを貼り付けて実行すると、2003ではエクセルがクラッシュし、変更の確認が表示されません。一方、2007では画像の画面が表示されます。このコードはパソコン名を取得するコードだと思っていたが、実はエクセルを強制的に閉じるコードだったのか?他のAPIを使用して問題を解決できるのか?

質問者が選んだベストアンサー

  • ベストアンサー
  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.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") で得られます。

uwhodlvj
質問者

お礼

領域の確保と言うコードが必要なのですね。 Dim str As String * 255 このような変数の宣言の仕方があるのですか。 Environは環境変数ですよね。 APIを使わなくても Sub test() Debug.Print Environ("computerName") End Sub でコンピューター名が取得できました。

その他の回答 (1)

  • web2525
  • ベストアンサー率42% (1219/2850)
回答No.1

http://homepage1.nifty.com/MADIA/vb/API/GetComputerName.htm 私には何がどう違って、クラッシュする原因はわかりませんが

uwhodlvj
質問者

お礼

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

関連するQ&A