分類:[C#]
2013/05/22(Wed) 17:54:08 編集(投稿者)
いつもお世話になっています。
以前 No66599 においてC#からExcel上のチェックボックスの状態を変更すると質問し、
一応の解決とはなりましたが、Excelのバージョンを2010から2003に変更したところ
チェックボックス(フォームコントロール)に値が設定出来なくなりました。
検索してみたところ、シート(?)の保護等をしていると同じエラーが発生するという事は書かれていましたが、
保護に関しては一切しておりません。
以下にコードと、エラー内容を載せますので、ご助力頂きたいと思います。
※★位置のValueに設定できません。
VisualStudio2010
Excel2003
参照設定に追加:Microsft Excel 11.0 Object Library
=== コード ===
public void CheckedInGroupCheckBox(string sheetName, string groupName, string checkboxName)
{
Excel.Worksheet thisSheet = sheets[sheetName];
Excel.Shapes shapes = thisSheet.Shapes;
Excel.Shape group = null;
for (int i = 1; i <= shapes.Count; i++)
{
group = shapes.Item(i);
if (group.Type == MsoShapeType.msoGroup && group.Name == groupName)
{
break;
}
}
// テスト
try
{
if (group == null)
throw new ArgumentException("指定されたグループが存在しません。", "groupName");
Excel.GroupShapes g = group.GroupItems;
Excel.Shape chk = null;
for (int i = 1; i <= g.Count; i++)
{
chk = g.Item(i);
if (chk.Name == checkboxName) break;
ReleaseObj(ref chk);
}
//Excel.Shape chk = g.Item(checkboxName);
dynamic ch = chk.DrawingObject;
ch.Value = true; // <-★
ReleaseObj(ref ch);
ReleaseObj(ref chk);
ReleaseObj(ref g);
}
finally
{
ReleaseObj(ref thisSheet);
ReleaseObj(ref shapes);
ReleaseObj(ref group);
}
}
=== エラー ===
COMExceptionはハンドルされませんでした。
CheckBox クラスの Value プロパティを設定できません。