質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio 2013

Microsoft Visual Studio 2013は、Microsoftによる統合開発環境(IDE)であり、多種多様なプログラミング言語に対応しています。 Visual Studio 2012の次のバージョンです

Q&A

解決済

2回答

3889閲覧

visualstudioでExcelAddInプロジェクトを作って、リボンを作成し、リボンにボタンを追加しただけなのにビルドがとおらなくて困っています。

tomi0416

総合スコア43

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio 2013

Microsoft Visual Studio 2013は、Microsoftによる統合開発環境(IDE)であり、多種多様なプログラミング言語に対応しています。 Visual Studio 2012の次のバージョンです

0グッド

1クリップ

投稿2015/05/26 07:50

編集2015/05/26 07:52

![イメージ説明]WIDTH:600
![イメージ説明]WIDTH:600

参考に作業したURLです。
リボン作成

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Tak1wa

2015/05/26 07:57

ビルドに通らない時のエラーメッセージを教えてください。
Tak1wa

2015/05/26 07:59

ああ、すみません。キャプチャにのってましたね。
tomi0416

2015/05/26 14:47

いつもありがとうございます(❛ᴗ❛人)✧
guest

回答2

0

ベストアンサー

えーと・・・
もう、エラーメッセージを見てそのまんま、GetRibbonの定義がないからですね。
それ以外の何物でもありません。

GetRibbonは自分で用意するのではなく、Frameworkから特定のクラスを継承して使うはずですよ?

お見受けしたところ、ThisRibbonCollectionクラスに対して基底クラスが定義されてませんね?
これでは、自分でGetRibbonメソッドを定義してないので、エラーになってしかるべきです。

参考URLのページの手順に従って作業すれば、問題ないはずですが
おそらく、何かのタイミングで、うっかり、
ThisRibbonCollectionクラスの基底クラスの記述を消してしまったのが原因と考えられます。

一度、プロジェクトを削除して、もう一度、落ち着いて参考URLの手順通りやってみてください。

参考までに、当方の環境で参考URLの手順で、ボタン追加まで行った時点での
ソース等のスクリーンショットを添付しておきます。
![イメージ説明]WIDTH:600
![イメージ説明]WIDTH:600
![イメージ説明]WIDTH:600
![イメージ説明]WIDTH:600
![イメージ説明]WIDTH:600
![イメージ説明]WIDTH:600

投稿2015/05/26 10:09

nekora

総合スコア501

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nekora

2015/05/26 10:46

いま、ぱぱっと、MSDNをあさってみました。 やはり、GetRibbonメソッドは、RibbonReadOnlyCollectionクラスのメソッドですね。 これを継承することで、ThisRibbonCollectionクラスもGetRibbonメソッドを持つことになります。 そして、  return this.GetRibbon<Ribbon1>(); この部分の、thisは、自分自身(のクラス)すなわちThisRibbonCollectionクラスを表し このクラスの中で定義されているGetRibbonメソッドを呼び出すのですが、 ThisRibbonCollectionクラス自身には定義されていませんので、 基底クラスに定義されているメソッドが呼び出されるわけで その基底クラスであるRibbonReadOnlyCollectionクラスにこそ、GetRibbonメソッドが 定義されています。 参考URL:RibbonReadOnlyCollection インターフェイス  https://msdn.microsoft.com/ja-jp/library/microsoft.office.tools.ribbon.ribbonreadonlycollection.aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-1
nekora

2015/05/26 11:31

そもそも、Ribbon1.Designer.csはVisualStudioでデザイナを使って編集したり、プロパティを変更した結果が VisualStudioで自動的に記述されて行くもので、 そもそも、Ribbon1.Designer.csが開いてある時点でおかしいです。 よっぽど、特殊なことをやろうとしない限り、このファイルはいじる必要のないものですよ?
tomi0416

2015/05/26 14:53

ありがとうございます! 仰せの通り、Ribbon1.Designer.csは特に何も変更してなくて、自動で作成されています。にも関わらず、ピルドが通らなくて!社内で上司に聞きたかったのですが、不在で、上司は多忙で、ちょい先輩に聞いたのですが、解決しなくて、本サイトで質問した次第です。
guest

0

んーーと、
Ribbon1.Designer.csをいじった覚えはないのですか?
本当に?間違いなく?

そして、一度、今あるプロジェクトを完全に削除して新規にプロジェクトを作成して
参考URLの手順通りやってみて、それでも、
partial class ThisRibbonCollection : Microsoft.Office.Tools.Ribbon.RibbonReadOnlyCollection
この太字の部分の記述が自動で記述されないのですか?

であれば、ちょっとこわいですね・・・

えーと、考えられるのは

1.VisualStudioが壊れている。
VisualStudioが壊れているかもしれません・・・ 再インストールしたほうがいいかも・・・

2.VisualStudioのBugFixを怠っている
質問の記載のタグを拝見するに、VisualStudio2013をお使いなのですね?
比較的新しいVisualStudioなのでバグが潰されてないのかもしれません・・・
ちゃんと、VisualStudioのサービスパックの最新版を当てていますか?
サービスパックは発見されたいくつものバグの修正モジュールをまとめたものですが
最新のサービスパックがリリースされた後に、新たにバグが見つかっている場合もあるので
最新のサービスパックを当てた後、さらに、その後にリリースされている、サービスパックに
まだ、纏められていないバグ修正モジュールも忘れずに当ててくださいね?

3.利用している .Net Frameworkが壊れている
どのバージョンの .Net Frameworkをお使いでしょうか?それ、壊れていませんか?

4.利用している .Net FrameworkのBugFixを怠っている
.Net Framework自身にもバグありますよ?ちゃんと修正モジュール当ててますか?

5.そもそも、プロジェクトで利用すると宣言(指定している).Net Frameworkのバージョンがおかしい
プロジェクトで利用する .Net Frameworkのバージョンがおかしな事になってませんか?
ふるーいバージョンの .Net Frameworkを使うことになってませんか?

当方は、取引先の顧客が過去資産を利用する関係で、VisualStudio2008を使っています
添付したスクリーンショットでお気づきだとは思いますが・・・

そして、VisualStudio2008である以上、使える .Net Frameworkのバージョンは 3.5が限界の最新版です
RibbonReadOnlyCollectionは少なくとも、.Net Framework3.5ではサポートされているのを確認していますが
Excelのリボンインターフェースにかかわるものなので、比較的新しいバージョンであるわけで
当然、.Net Frameworkがあまりにも古いと、このクラスがサポートされていないはずですよ?

VisualStudioのバージョン情報にVisualStudioのバージョンと一緒にBugFixが行われていれば
どの時点のサービスパックが当たっているか確認できますし、.Net Frameworkのバージョンと当たっているサービスパックも把握できます。
![イメージ説明]WIDTH:600

そのプロジェクトで利用することになっている .Net Frameworkのバージョンが ふるーーい物を指定していませんか?
![イメージ説明]WIDTH:600
![イメージ説明]WIDTH:600
確認してみてください。

投稿2015/05/26 16:35

nekora

総合スコア501

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nekora

2015/05/26 16:55

尚、分っていらっしゃるだろうことを前提でRibbonReadOnlyCollectionをクラスと紹介していますが 申し上げるまでもなく、これは厳密にはインターフェースです。 そして、ThisRibbonCollectionはパーシャルクラスの定義です。 これにインターフェースの定義を厳密には組み込んでいるのです。 したがって、this.GetRibbon<Ribbon1>()で呼び出せるわけで、 厳密には基底クラスから継承させて、基底クラスのメソッドを呼び出す場合は base.GetRibbon<Ribbon1>()が厳密には正しい書き方になります。 VB.Netでいえば、MyBaseですね ただ、今回はインターフェースとして、そのものずばりの定義を継承ではなく、このレベルで取り込んでいるので、だから、thisなのです。一応、誤解なきように申し添えておきます。
Tak1wa

2015/05/26 16:59

私も質問者さんが参考にされたサイトに従ってVisualStudio2013 Pro Update4にて検証してみましたが、自動で定義されたThisRibonCollectionに継承の記載はありませんでした。(※Partialされた別ThisRibbonCollectionがGlobalだったかどこかにあり、そちらでは継承元の記載あり。なので正常) ですので指摘された箇所は問題ではないかもしれません。 おそらく2008と2013でプロジェクトテンプレートが若干異なるのでしょう。 ただ、私のほうではビルドエラーは発生しませんでした。 どちらにせよnekoraさんが仰っているように、まずは一度プロジェクトを作成し直してみたほうが良いでしょう。 VisualStudioが壊れている。またはテンプレートが不正な状態。というのはあり得なくは無い話だと思います。 いま手元にIDEが無いので、何かわかれば明日にでも記載します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問