none
MsgBox()が使えない。参照設定が足りないようですが・・・ RRS feed

  • 質問

  • みなさん、よろしくお願いいたします。
    先ほど、回答いただいた方ありがとうございました。
    参考になりました。
    ただ、質問内容を間違えておりました。申し訳ありません。
    改めて、質問させていただけないでしょうか。

    VSIXプロジェクトを作ろうと勉強しております。
    その中で、普通にWinフォームを作って、MsgBox("Test")のようにしたいのですが、
    コンパイルエラーになってしまいます。
    参照が足りないと思っています。
    Winフォームプロジェクトと同じように、参照を追加したりして試しても、
    状況は変わりません。
    どのようにすれば、MsgBox等の一般に使われている関数群を使えるのでしょうか?


    再現する方法は簡単です。
    新しいプロジェクト-VB-Extensibility-VSIX Project で新規プロジェクトを作る。
    プロジェクトに、Windowsフォームを追加する。
    Form1_Load()に、MsgBox("Test")を書き、コンパイルする。

    下記のエラーが出ます。
    エラー BC30451 'MsgBox' は宣言されていません。アクセスできない保護レベルになっています。 VSIXProject9 c:\users\admin\documents\visual studio 2015\Projects\VSIXProject9\VSIXProject9\Form1.vb 3 アクティブ

    参照設定も、既に参照されているというエラーの出るSystem.Core以外は追加してみました。
    VB2015を使っています。


    2017年3月10日 8:30

回答

  • Microsoft.VisualBasic.dllに対する参照をご確認下さい。
    2017年3月10日 9:13
  • 試してみました。

    私の環境の場合は、再現の手順から、参照設定で「System.Windows.Forms」と「System.Drawing」を追加する必要がありました。これらは、プロジェクトメニューの「新しい項目の追加」から Windows フォーム を選ぶと自動的に参照として追加されるようです。

    結果的に参照設定は下記のようになっていました。

    上記の参照設定で、以下のようなコードのコンパイルができました。

    Imports System.Windows.Forms
    
    Public Class Form1
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            MsgBox("Test")
        End Sub
    End Class

    2017年3月10日 9:13
  • すみません。VB-Extensibility の VSIX Project とのことですが、

    MsgBoxを使っているコードの、先頭に

    Imports Microsoft.VisualBasic

    を追加してみて解消しますでしょうか?

    2017年3月11日 2:46
  • VB.NET は使わない自分が言うのもなんですが、microsoft.visualbasic 名前空間のクラス、メソッドは使わない(できるだけ)という方向に進むことをお勧めします。

    第6回 VB開発者が最新.NET Frameworkを効率よく習得する方法
    http://www.atmarkit.co.jp/fdotnet/vblab/opensemi_06/opensemi_06_02.html

    #最初の質問を書き換えないでくださいとお願いしたのに無視されたのは残念です。

    2017年3月11日 3:16
  • プロジェクトのプロパティ画面を開き、「参照」タブ→「インポートされた名前空間」の下のリストで「Microsoft.VisualBasic」にチェックをつけると、*.vb で Imports を指定しなくても MsgBox が使用できるようになると思います。

    2017年3月11日 4:29

すべての返信

  • 試してみました。

    私の環境の場合は、再現の手順から、参照設定で「System.Windows.Forms」と「System.Drawing」を追加する必要がありました。これらは、プロジェクトメニューの「新しい項目の追加」から Windows フォーム を選ぶと自動的に参照として追加されるようです。

    結果的に参照設定は下記のようになっていました。

    上記の参照設定で、以下のようなコードのコンパイルができました。

    Imports System.Windows.Forms
    
    Public Class Form1
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            MsgBox("Test")
        End Sub
    End Class

    2017年3月10日 9:13
  • Microsoft.VisualBasic.dllに対する参照をご確認下さい。
    2017年3月10日 9:13
  • スレッドを乱立しないで、このスレッドに続けて書いていただきたく。間違い、情報不足はこのスレッドで補えば済むことです。(ただし、最初の質問を書き換えないでください。別のレスとして補足・訂正を書いてください。上から読んでいって訳が分からなくならないように)

    このスレッドをほっぽり出して、新に別のスレッドを立てるというのは、ここで回答をくれた人に大変失礼になると思います。

    2017年3月11日 2:04
  • すみません。VB-Extensibility の VSIX Project とのことですが、

    MsgBoxを使っているコードの、先頭に

    Imports Microsoft.VisualBasic

    を追加してみて解消しますでしょうか?

    2017年3月11日 2:46
  • VB.NET は使わない自分が言うのもなんですが、microsoft.visualbasic 名前空間のクラス、メソッドは使わない(できるだけ)という方向に進むことをお勧めします。

    第6回 VB開発者が最新.NET Frameworkを効率よく習得する方法
    http://www.atmarkit.co.jp/fdotnet/vblab/opensemi_06/opensemi_06_02.html

    #最初の質問を書き換えないでくださいとお願いしたのに無視されたのは残念です。

    2017年3月11日 3:16
  • すみません。VB-Extensibility の VSIX Project とのことですが、

    MsgBoxを使っているコードの、先頭に

    Imports Microsoft.VisualBasic

    を追加してみて解消しますでしょうか?

    ありがとうございます!!
    びっくりしました。
    思ったようになりました。
    感謝です。

    もし、よろしければ、追加でお伺いしてよろしいでしょうか?
    今回は、数十の既存VBファイルを移行するのです。
    そこで、すべてのソースに下記のコードいれれば良いのですが
    できれば、一箇所で設定するような事はできないでしょうか?
    Imports Microsoft.VisualBasic

    回答ありがとうございます。


    2017年3月11日 3:58
  • > 方向に進むことをお勧めします。
    ご指摘ありがとうございます。
    その通りだと思います。
    ただ、先にも書いたように、既存VBファイルを移行する関係で
    できる限り変更箇所を減らしたいのが現状です。

    > #無視されたのは残念です。
    申し訳ありません。
    どのように書き換えたらわかりやすいのかが難しく、今回のように
    形にさせていただきました。
    決して、無視をしたのではないのです。今後は正しく投稿するように努めます。


    2017年3月11日 4:00
  • プロジェクトのプロパティ画面を開き、「参照」タブ→「インポートされた名前空間」の下のリストで「Microsoft.VisualBasic」にチェックをつけると、*.vb で Imports を指定しなくても MsgBox が使用できるようになると思います。

    2017年3月11日 4:29
  • 本当に、ありがとうございました。

    その通りになり、問題が解決しそうです。

    2017年3月11日 6:32
  • aviator__ さんのレスは回答にならなかったのでしょうか? 私の余計なお世話的レスより、aviator__ さんのレスの方が回答にふさわしいと思うのですが。
    2017年3月11日 7:07
  • SurferOnWww様 わざわざ有難うございます。

    でもまぁ、質問者様の判断なので全然OKですよん。


    • 編集済み aviator__ 2017年3月11日 7:22
    2017年3月11日 7:21