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

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

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

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

C#

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

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

Q&A

解決済

2回答

2191閲覧

Excel2010で ホーム>編集>検索と選択>オブジェクトの選択 のON/OFFをC#作成のアプリから操作する方法を教えて下さい。

yoshi_yamaguchi

総合スコア6

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

C#

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

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

0グッド

0クリップ

投稿2015/04/21 10:29

編集2015/04/22 08:22

ネット上で色々と検索してみましたが、該当する様なページが見つからなかったので教えて頂ければと思います。

表題の通り、Excelの「オブジェクトの選択」のON/OFF状態をC#で作成したアプリから切り替える必要があり、MSDNのExcel.Applicationのプロパティに関するページ等 見てみましたが該当するものは無い様でした。

情報お持ちの方ありましたら お教え下さい。

宜しくお願いいたします。

htsignさんのご回答により全て解決する事が出来ました。
ありがとうございました。

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

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

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

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

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

guest

回答2

0

ベストアンサー

別回答で偉そうにマクロ云々と申し上げてしまいましたが、マクロでは記録されませんね…。
調べてみたところ、それっぽいのがあったので、これを参考に実装してみました。
Excel VBA で「オブジェクトの選択」のモードにする方法を教えてください。 - Yahoo!知恵袋

ただ、私の環境がExcel 2013だからなのか効いていないような気もします…。

lang

1using System; 2using System.Runtime.InteropServices; 3using Excel = Microsoft.Office.Interop.Excel; 4using OfficeCore = Microsoft.Office.Core; 5 6namespace ConsoleApplication1 7{ 8 class Program 9 { 10 static void Main(string[] args) 11 { 12 var app = new ExcelApplication(); 13 app.Visible = true; 14 app.Workbooks.Add(); 15 16 var control = app.CommandBars.FindControl(id: 182); 17 if (control.State == MsoButtonState.msoButtonUp) 18 { 19 control.Execute(); 20 } 21 else 22 { 23 control.Reset(); 24 } 25 } 26 } 27 28 public sealed class ExcelApplication 29 : DisposableClass 30 { 31 private Excel.Application app; 32 33 public ExcelApplication() 34 { 35 this.app = new Excel.Application(); 36 } 37 38 public Workbooks Workbooks { get { return new Workbooks(this.app); } } 39 public CommandBars CommandBars { get { return new CommandBars(this.app); } } 40 public bool Visible 41 { 42 get { return this.app.Visible; } 43 set { this.app.Visible = value; } 44 } 45 46 #region Dispose Pattern 47 private bool disposed = false; 48 protected override void Dispose(bool disposing) 49 { 50 if (this.disposed) return; 51 52 Marshal.FinalReleaseComObject(this.app); 53 this.disposed = true; 54 } 55 #endregion 56 } 57 58 public sealed class Workbooks 59 : DisposableClass 60 { 61 private Excel.Workbooks workbooks; 62 63 internal Workbooks(Excel.Application app) 64 { 65 this.workbooks = app.Workbooks; 66 } 67 68 public void Add() 69 { 70 this.workbooks.Add(); 71 } 72 73 #region Dispose Pattern 74 private bool disposed = false; 75 protected override void Dispose(bool disposing) 76 { 77 if (this.disposed) return; 78 79 Marshal.FinalReleaseComObject(this.workbooks); 80 this.disposed = true; 81 } 82 #endregion 83 } 84 85 public sealed class CommandBars 86 : DisposableClass 87 { 88 private OfficeCore.CommandBars commandBars; 89 90 internal CommandBars(Excel.Application app) 91 { 92 this.commandBars = app.CommandBars; 93 } 94 95 public CommandBarControl FindControl(int id) 96 { 97 if (this.commandBars == null) return null; 98 99 return new CommandBarControl(this.commandBars, id); 100 } 101 102 #region Dispose Pattern 103 private bool disposed = false; 104 protected override void Dispose(bool disposing) 105 { 106 if (this.disposed) return; 107 108 Marshal.FinalReleaseComObject(this.commandBars); 109 this.disposed = true; 110 } 111 #endregion 112 } 113 114 public sealed class CommandBarControl 115 : DisposableClass 116 { 117 private OfficeCore.CommandBarControl control; 118 119 internal CommandBarControl(OfficeCore.CommandBars commandBars, int id) 120 { 121 this.control = commandBars.FindControl(Id: id); 122 } 123 124 public MsoButtonState State 125 { 126 get 127 { 128 return (MsoButtonState)((dynamic)this.control).State; 129 } 130 set 131 { 132 ((dynamic)this.control).State = value; 133 } 134 } 135 136 public void Execute() 137 { 138 this.control.Execute(); 139 } 140 141 public void Reset() 142 { 143 this.control.Reset(); 144 } 145 146 #region Dispose Pattern 147 private bool disposed = false; 148 protected override void Dispose(bool disposing) 149 { 150 if (this.disposed) return; 151 152 Marshal.FinalReleaseComObject(this.control); 153 this.disposed = true; 154 } 155 #endregion 156 } 157 158 public abstract class DisposableClass 159 : IDisposable 160 { 161 public void Dispose() 162 { 163 this.Dispose(true); 164 GC.SuppressFinalize(this); 165 } 166 167 private bool disposed = false; 168 protected virtual void Dispose(bool disposing) 169 { 170 if (this.disposed) return; 171 172 if (disposing) 173 { 174 // 175 } 176 this.disposed = true; 177 } 178 179 ~DisposableClass() 180 { 181 this.Dispose(false); 182 } 183 } 184 185 public enum MsoButtonState 186 { 187 msoButtonDown = -1, 188 msobuttonMixed = 2, 189 msoButtonUp = 0, 190 } 191}

投稿2015/04/21 15:53

編集2015/04/21 16:20
htsign

総合スコア870

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

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

yoshi_yamaguchi

2015/04/22 01:52

更に回答+ソースまでありがとうございます。 表題への解答としてベストでこれ以上はないものです。 ただhtsignさんのお話に出ている2013で動かない、私の処の2010ではONにする.Execute()は動くのですがOFFにする.Reset()は動かない等とExcelなのか.NETなのかの中に多分に問題が潜んでいる感じです。(実はOFFにする方がメインだったので未だに色々模索中だったりします(^^;)
htsign

2015/04/22 03:05

さらに調べてみると、どうもResetメソッドではなく、OFFもExecuteで行うようです。 つまり、ifで条件分岐せず control.Execute(); とだけ書けば実行する度にON/OFFされます。
yoshi_yamaguchi

2015/04/22 08:20

更にコメントありがとうございます。 確かにcontrol.Execute();でON/OFF切り替わる事が確認できました。 これで問題なく動作させる事が出来る様になりました。 ありがとうございました。(^^)
guest

0

マクロを記録して操作してみてはいかがでしょうか?
操作完了後に記録を停止し、作成されたマクロを覗いてみれば書かれているかもしれません。

投稿2015/04/21 12:07

htsign

総合スコア870

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問