1

このトピックは次の関連事項です。Excelで複数選択されたシートはどのオブジェクトタイプですか。

問題の概要を説明するために、Excelでの選択を変更するコードを実行し、選択を元の状態に戻したいと思います(これを「originalSelection」と呼びます)。ほとんどの場合、originalSelectionでSelect()メソッドを呼び出すことができます。

var originalSelection = ExcelApp.Selection;
originalSelection.GetType().InvokeMember("Select", System.Reflection.BindingFlags.InvokeMethod, null, originalSelection , null);

複数のシートが選択されている場合、選択タイプは常に範囲になります(Excelのデフォルト設定です)。ただし、複数のシートを選択している場合、Selectを再度呼び出そうとするとエラーが発生する可能性があります。物事を機能させるには、ダンスをする必要があります。

複数のシートが選択されているが、すべてのシートが選択されていない場合は、次の操作を実行できます。

selectedSheets.Select();
activeSheet.Activate();
originalSelection.Select(); //this was casted to an Excel.Range

ただし、すべてのシートが選択されている場合、そのactiveSheet.Activate()行は選択されている他のすべてのシートの選択を解除します。これは、UIを使用してネイティブに試してみた場合にも発生します。

コードを介してシフト選択シートを1枚ずつ実用的に模倣する方法があるかどうか疑問に思いました。私が見つけた最も近いものは、範囲のグループ化を伴うものですが、シートには何もありません。

概要を簡潔にしようとしましたが、私が行っていることについてさらに明確にする必要がある場合は、質問してください。

4

1 に答える 1

4

そこで、プログラムでシートを選択する方法を考え出しました。

名前の文字列配列を作成し、配列の順序を使用してシートのコレクションを取得できます。このコレクションを選択すると、指定したすべてのシートが選択されているはずです。

String[] sheetsToBeSelected = {"Sheet3","Sheet1","Sheet2"}; //Note, Sheet3 is the first item in this array
excel.Workbook workbook = ExcelApp.ActiveWorkbook; //get your Excel application however you want
excel.Sheets worksheets = workbook.Worksheets; //get all the sheets in this workbook

//This gets a collection of the sheets specified and ordered by the array of names passed in. 
//Just call select on this collection, and the first sheet in the collection becomes the active sheet!
((excel.Sheets)worksheets.get_Item(sheetsToBeSelected)).Select(); 
于 2012-05-16T18:24:26.300 に答える