興味ある人はこのページ下部にあるコメントを参照下さい。使っていると、ファイルに上書き保存する時にこんなメッセージが出るようになった。何のことかサッパリ分からない。EXPRESSを使ってデータベースの操作を最近よくやっている。以下はそのデータベース操作に関して最近ワテが覚えた手法のメモ。初心者のメモと言う感じだ。SQLを使いこなせる上級者の人にとって...C#【ワテの備忘録】C#でファイル入出力の文字コード(エンコーディング)を指定する。当記事では、C#でファイル入出力を行う場合の文字コードの指定について調査した。C#でテキストファイルを読み書きする場合のエンコーディング指定の方法や、エンコーディングの種類について良く忘れるので、備忘録としてまとめてみたのだ。世の中には各種のプログラミング言語があり、コメントの文法も様々ある。Community(無料)を使ってC#言語の簡単なコンソールアプリケーションをビルドしていたところ、何だか動きがおかしい。Studio2015Communityをインストールする。VMwareにインストールしていたWindows7(x64)を、先日、Windows10(x64)に無料Upgradeした。PMお世話になります。VBAでのシートが変更されたときのイベントは変更後の内容がtargetとして渡されてきますが、実際に行が削除された後の動きになります。VSTOでは変更される前のイベントで処理可能でしょうか?例えば行を削除しようとしたとき、削除が処理される前に処理できないものかと思った次第です。PMYOKOYSさん、こんにちは。>VSTOでは変更される前のイベントで処理可能でしょうか?>例えば行を削除しようとしたとき、削除が処理される前に処理できないものかと思った次第です。う~ん、私の理解では、それは出来ないと思います。言うのは、VSTOで扱えるイベントは、基本的にはVBAで扱えるイベントと同じだと思うからです。具体的には、こんなやつですよね。WorkbookBeforeCloseWorkbookBeforeSave私の知る限り、WorksheetBeforeChangeと言うのは無いと思います。AppEvents_Event.csの中身を見ると、以下に示すイベントハンドラがありますが、現状ではこの中にあるイベントハンドラしか使えないと思うのです。物凄く上級者の人なら、何か良い解決方法を知っているかも知れません。AMご回答ありがとうございます。私も色々調べてはいるのですがなさそうです。処理後(target)とUndoした内容を比較して判定するしかないですかね。今後、決定打が見つかったらコメントさせて頂きます。AMYOKOYSさん>例えば行を削除しようとしたとき、削除が処理される前に処理できないものかと思った次第です。そもそも、そのようなイベントを検出したい理由はなんでしょうか?差し支えない範囲でお知らせ下さい。私も過去にかなりEXCEL関連でプログラミングした経験がありますが、そのようなイベントが必要になる状況が思い付きません。PM単純に任意の行の削除を禁止したいということなのですが、シート保護とかは使用しないという前提条件があります。行が削除されないままにエラーにしたいと思いまして・・・お知恵をよろしくお願い致します。PM>単純に任意の行の削除を禁止したいということなのですが、シート保護とかは使用しないという前提条件があります。「行の削除禁止」ならシート保護が最適だと思うのですが、なぜシート保護を使用しないという前提条件があるのでしょうか?シート保護なら、まさに「行の削除」のみを禁止する事も可能です。「行の挿入」、「行の並べ替え」は許可しても良いのでしょうか?シート保護なら、「行の挿入」、「行の並べ替え」も禁止に出来ます。>行が削除されないままにエラーにしたいと思いまして・・・お知恵をよろしくお願い致します。右クリックメニューの「削除」を無効化する方法が使えそうですが。「シート保護」を使うと同じく「削除」を無効化できますが、「シート保護」を使わずに「削除」を無効化するわけです。「シート保護」で行削除を無効化した場合には、[削除]キー押下を実行すると「変更しようとしているセルやグラフは保護されているシート上にあります。」と言うメッセージが表示されますが、「シート保護」を使わずに「削除」を無効化した場合には、[削除]キー押下でその行に記入されているデータはクリアする事は出来てしまいますが。PM色々とご教示ありがとうございます。メニューの無効化はやりました。シート保護を使わないのか。私もそこが一番気になるところなのですが、仕様としてそう定義されているので、シート保護なしで実現しようとしています。いまのところは行を削除したときのシートチェンジでTargetを取得し、Undoで元の行と比較して削除を判定し、エラーメッセージ表示させる処理にしています。実は行の挿入も勝手にさせない仕様でこちらもメニュー無効化など、同様な処理にしています。AMさっき、ふと思いついたのですが、以下のような超ヘンテコな手法で実現出来るかもしれません。・XLLの中でDLLインジェクションをやってEXCELの機能を一部置き換える。・[行の削除操作]を検出したら、その処理はやらない。・他の操作はそのまま実行する。SetWindowsHookExなどを使ってやれば原理的には出来ると思います。作ったXLLがノートンセキュリティによってウイルスと判定されるかもしれませんが。AMご教示ありがとうございます。・・・Excel-DNAで出来るかな・・・時間があるときに試してみます。PMこんにちは!こちらのサイトを参考に、ExcelやWordのVSTOアドインの作成方法を勉強しています。今回、「発行」の方法でVSTOアドインを配布することができましたが、インストール先に独自のファイルを配布する際、拡張子が.xmlのファイルをインストール先に配置することができませんでした。PMfuzzyさんこんにちは。小生の記事を参考にして頂きましてありがとうございます。お問い合わせの>拡張子が.xmlのファイルを配置できないのは、何か理由があるのでしょうか?の件ですが、申し訳ないですが私もVSTO配布の経験があまり無いので、原因はさっぱりわかりません。PMwareko様、こんにちは!レスを頂き、誠にありがとうございます。(Community)なので、バージョン等の違いなのかも知れませんが、とりあえず、私の行った手順を以下に示します。(言語はVBを使用しています。)1.VSで新規プロジェクトを作成。テンプレートよりExcel2013アドインを選択。(VS2013では、これがExcel2013用VSTOアドインテンプレートになります。)とりあえず、プロジェクト名を「ExcelAddInTest」としました。項目」メニューより、以下のファイルを追加する。・test.txt・test.xml・test.xxx(実は、すべて中身は全く同じUTF-8エンコードのxmlファイルです。)また、プロジェクトに含めた上記ファイルのプロパティを以下のように変更。「出力ディレクトリにコピー」=「常にコピーする」3.リボン(ビジュアルなデザイナー)「Ribbon1」を追加し、さらに、リボン上にボタン「Button1」を追加。4.ボタン「Button1」をクリックした時に、このアドインの配布先フォルダがエクスプローラで開くように、以下のコードを追加。Sub5.このプロジェクトの「発行」の所で「今すぐ発行」を実行。Files」のバージョン番号付きフォルダ内には、前記2.で追加したファイルのdeployファイルが以下のように作成されていました。・test.txt.deploy・test.xml.deploy・test.xxx.deploy6.上記「発行」で生成されたインストーラ「setup.exe」を実行。エラーの発生は特にありませんでした。7.Excelを起動し、アドインタブを開き、作成したリボン上のボタン「Button1」をクリック。配布先のフォルダが開き、以下のファイルが格納されていましたが、「test.xml」がありませんでした。・ExcelAddInTest.cdf-ms・ExcelAddInTest.dll・ExcelAddInTest.dll.cdf-ms・ExcelAddInTest.dll.manifest・ExcelAddInTest.manifest・Microsoft.Office.Tools.Common.v4.0.Utilities.cdf-ms・Microsoft.Office.Tools.Common.v4.0.Utilities.dll・Microsoft.Office.Tools.Common.v4.0.Utilities.manifest・test.txt・test.xxxちなみに、実際に作成したいのはWordのアドインなのですが、Wordでも同じ現象が出ました。PMfuzzyさん詳しい報告ありがとうございました。教えて頂いた情報を元に私も再現実験してみました。その結果、無事解決しました(たぶん)。それらの調査内容を記事にまとめましたので参考にして下さい。AMwareko様、こんにちは!色々と調べて頂き、誠にありがとうございます。ファイルはデータと見なされて、アセンブリとは別のデータフォルダに配置されるのですね。OfficeのVSTOアドインに関する記事があまりない中(英語の記事はあるのかも知れませんが...)、アドイン開発はハードル高いなーと思っていた所でしたので、非常に勉強になりました。心より御礼申し上げます。今後ともどうぞよろしくお願い申し上げます。PMfuzzy様この度は、小生の記事がお役に立てたようで、安心しました。英語のサイトのほうが有益な情報が多い気がします(正確な根拠はありませんが)。日本語サイトと英語サイトの数を単純比較しても後者のほうが圧倒的に多いですが、技術系の調べ事をする場合も私は英語サイトを優先して閲覧します。検索キーワードも日本語は使わずに英単語のみで検索する場合が多いです。日本語サイトならhttp://www.atmarkit.co.jp/などは信憑性の高い内容の記事が多いと思いますので参考にしています。VSTO開発の成功をお祈りします。PMwareko様、こんにちは!この度は色々とお世話になりました。英語のサイトのほうが有益な情報が多い気がします(正確な根拠はありませんが)。実は、このご意見を参考に、先程別の技術検索を行ったときに、英語キーワードでの検索に挑戦してみました。すると、日本語キーワードでの検索では欲しい情報が中々引っかからなかったのに、英語キーワードで検索すると、(機械翻訳の結果を斜め読みしただけですが)有効そうな記事がヒットしました。変わったようなことをしようとすると、日本国内だけでは中々情報が見つからないですね。言え、VSTOに関する記事の検索で、wareko様のブログがヒットしたのは、非常に幸運だったと感謝しております。これからもブログを拝見しますので、今後ともよろしくお願い申し上げます。ExcelのVSTOアドイン作成を始めたてのものです。この前作成したアドインを、このブログで紹介された方法で「発行」し、作成されたセットアップファイルを別PCにインストールしました。「発行フォルダーの場所」は、デフォルトの「発行\」にしています。「インストールフォルダ―」のURLは空欄です。今回、そのアドインを修正したものを別PCにインストールしようとしたら、setup.exeの実行時に以下のエラーが表示されました。「現在他のバージョンがインストールされており、この場所からアップグレードすることはできないため、このカスタマイズをインストールすることはできません。確認したところ、以下のことが判りました。・旧アドインをアンインストールすれば、修正アドインをインストールは可能。・旧アドインをインストールしたフォルダに「発行」フォルダの内容を置いた場合、修正アドインは問題なくインストールされる(置き換わる)。これは「発行」の仕組み上、バージョンアップ時のインストーラは前バージョンと同じ場所にあることが前提なのだと思いますが、これではアドイン更新の際は非常に不便です。AMpripriさんこの度は、小生のブログ記事にコメントありがとうございました。自動的に古いアドインをアンインストールしてから新アドインをインストールする事が出来ないのか?と言う事でしょうか?その辺りの仕組みは、私も詳しくは知りませんので、少し調べてみました。見付けた下記英文ページに関連する質問が見付かりました。英語のページなので私には理解出来ていない部分もありますが。locationhttps://social.msdn.microsoft.com/Forums/sqlserver/en-US/37be698d-859f-4879-83ff-93670940a47b/excel-add-in-updates-from-wrong-location?forum=vstoその中で、下に引用する部分がpripriさんの質問に関連するのではないでしょうか。version.この英文を読む限りは、古いバージョンを事前にアンインストールしておかないと、カスタマイズはインストール出来ないとの事です。事前に手作業で古いアドインを削除するのが通常のやり方だと思います。回答している人はマイクロソフトの人のようですので信憑性は高いと思います。何らかの特殊な設定とか仕組みを使って自動的に古いアドインを削除して、そして新しいアドインをインストールする手法があるのか無いのかは、引き続き調査してみないと分かりません。StudioのExcelアドインの[発行]の設定を見た限りでは、無さそうですね。pripriさんと同じような要望を持つ人は多いと思うので、ネット検索すれば何か良い方法が見付かるかもしれませんね。私が調査して判明したのはこのあたりまでです。VSTOアドインを他のパソコンに配布する手段は、pripriさんが試されている手法以外にもあります。それは、Windowsインストーラーを作成する手法です。2003でExcel2003のアドインを作っていた頃はその手法でインストーラーを配布していました。今でもその手法は使えます。参考になるサイトを見付けました。ソリューションを配置します。https://docs.microsoft.com/ja-jp/visualstudio/vsto/deploying-an-office-solution-by-using-windows-installer?view=vs-2017このWindowsインストーラーの手法を使えば、自動的に古いアドイン(やプログラム)を削除してから、新しいアドイン(やプログラム)をインストールする事が出来ます。古いアドイン(やプログラム)が見つかりました。削除しますか?[Y/N]みたいなメッセージを表示して、利用者が[Y]と答えたら、削除を行う。新しいアドイン(やプログラム)をインストールすると言う、良く見かけるやつです。この方法がお勧めだと思います。AMただし、私の場合はVS2017でこのWindowsインストーラーを作った事がありません。Shieldプロジェクトでインストーラーを作成する方式に変わりました。Installerと言う方式に変わったようです。Installerと言うのがありました。このテンプレートを使えば、Excelアドインだけでなく、一般のプログラムを配布するためのインストーラーを作れるはずですが、実は私はVS2017ではまだその方式でインストーラーを作った事がありません。ネット検索すれば情報は沢山あると思いますのでそれらの情報を参考にお試し下さい。PMワレコ様、ご回答ありがとうございます。Windowsインストーラーという手がありましたね。こちらも試してみようと思います。「発行」も捨てがたい理由は、管理者権限不要で、ユーザーアカウント制御のダイアログも出ないので、都合がよい人もいるんですよね。(ただ、VSTOの「発行」は、通常のClickOnceとは設定できる情報がちょっと違うようですね。コメントをキャンセルメールアドレスが公開されることはありません。Expressサイト作成2020.01.302020.02.04.2020.02.23>>あかん、エラーしよった。役に立たない記事です。この度は小生のサイトにコメントありがとうございます。構造用合板の切断面のバリや表面のささくれの処理ですが、私の場合には何もしていません。私の近所のホームセンターで売っている構造用合板は表面にささくれが多くて、1日かけてやすりがけしないととても使えません。この度は詳しい解説ありがとうございました。「更新版をインストールした場合には自動で引き継がれる。新規購入製品をインス...【ワテ大発見】ノートンは自動延長するよりも新規に3年版を買うほうが安いひげ2020.01.05パッケージ版を購入した場合も追加されません。ノートン製品に表示された有効期間の期限切れの通知から延長またはアップグレードした場合、以前残っていた有効期間が自動的に新しい有効期間に追加されます。(4)[ワテ解説]ブログ始めるぞ![ワテ自作]お買い物支援サイトなるべく安く買う!↑初回起動時のみ10秒くらい掛かります。Expressサイト作成2020.01.302020.02.04.2020.02.23>>あかん、エラーしよった。役に立たない記事です。この度は小生のサイトにコメントありがとうございます。構造用合板の切断面のバリや表面のささくれの処理ですが、私の場合には何もしていません。私の近所のホームセンターで売っている構造用合板は表面にささくれが多くて、1日かけてやすりがけしないととても使えません。この度は詳しい解説ありがとうございました。「更新版をインストールした場合には自動で引き継がれる。新規購入製品をインス...【ワテ大発見】ノートンは自動延長するよりも新規に3年版を買うほうが安いひげ2020.01.05パッケージ版を購入した場合も追加されません。ノートン製品に表示された有効期間の期限切れの通知から延長またはアップグレードした場合、以前残っていた有効期間が自動的に新しい有効期間に追加されます。(4)[ワテ解説]ブログ始めるぞ![ワテ自作]お買い物支援サイトなるべく安く買う!↑初回起動時のみ10秒くらい掛かります。Framework散策バイク旅行・ドライブWEB。