

Excel2013 と 2016 VSTO アドイン VisualC# での開発において特定処理でExcelが0xc0000374で終了する

お世話になります

Excelのアドイン作成において特定処理でExcelが落ちることがわかったのですが、  
原因や対処方法がわからず行き詰まっております。  
最小限の処理で再現させることまでできたので質問させてください。

環境  
Windows 10 Pro 21H2  
Microsoft Visual Studio Professional 2017 Version 15.9.47  
Microsoft .NET Framework 4  
Micosoft Office Standard 2019

VisualStudio新規プロジェクトで  
Excel2013 と 2016 VSTO アドイン VisualC#  
をつかってプロジェクト作成

プログラム詳細

[code]

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using Microsoft.Office.Tools.Ribbon;
    
    namespace ExcelAddInMinimumError
    {
        public partial class MyRibbon
        {
            private void MyRibbon_Load(object sender, RibbonUIEventArgs e)
            {
    
            }
    
            private void btnExec_Click(object sender, RibbonControlEventArgs e)
            {
                if(sender is RibbonButton)
                {
                    RibbonButton btn = (sender as RibbonButton);
                    btn.Enabled = false;
                    Globals.ThisAddIn.ShowRubyEditDialog();
                    btn.Enabled = true;
                }
            }
        }
    }
    
[/code]

[code]

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Xml.Linq;
    using Excel = Microsoft.Office.Interop.Excel;
    using Office = Microsoft.Office.Core;
    using Microsoft.Office.Tools.Excel;
    
    namespace ExcelAddInMinimumError
    {
        public partial class ThisAddIn
        {
            private void ThisAddIn_Startup(object sender, System.EventArgs e)
            {
            }
    
            private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
            {
            }
            public void ShowRubyEditDialog()
            {
                Excel.Range cell = this.Application.ActiveCell;
                if (cell == null)
                {
                    return;
                }
    
                // 編集中ではないようにするため代入処理をする
                // これを入れると特定操作で落ちる(エクセルデータ次第だけど用意したテストデータでは連続でこの関数の処理をさせていると落ちる)
                cell.Activate();
    
                int colomnCount = cell.Column;
                int rowCount = cell.Row;
                for (int rowIndex = 1; rowIndex < rowCount; ++rowIndex)
                {
                    string wk = Convert.ToString(this.Application.ActiveSheet.Cells[rowIndex, colomnCount].Value2);
                    if (wk == "Text")
                    {
                        break;
                    }
                    else if (wk == "Ruby")
                    {
                        colomnCount = colomnCount - 1;
                        cell = this.Application.ActiveSheet.Cells[rowCount, colomnCount] as Excel.Range;
                        break;
                    }
                }
                if(cell != null)
                {
                    for (int i = 0; i < cell.Characters.Count; ++i)
                    {
                    }
                }
            }
    
            #region VSTO で生成されたコード
    
            /// <summary>
            /// デザイナーのサポートに必要なメソッドです。
            /// コード エディターで変更しないでください。
            /// </summary>
            private void InternalStartup()
            {
                this.Startup += new System.EventHandler(ThisAddIn_Startup);
                this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown);
            }
    
            #endregion
        }
    }
    
[/code]

このようなプログラムとなっております。  
再現方法として

  1. VisualStudioから実行後Excelを開く  
[![Excel開いた状態](https://i.stack.imgur.com/EyDF1.png)](https://i.stack.imgur.com/EyDF1.png)

  2. アドインを選択  
[![アドイン選択](https://i.stack.imgur.com/BW41o.png)](https://i.stack.imgur.com/BW41o.png)

  3. D4セルを選択

  4. 実行ボタンを何度もクリックする(ここは不定回数となります)と  
`プログラム '[6960] excel.exe' はコード -1073740940 (0xc0000374) で終了しました。`となってデバッグが終了する

落ちるのがExcelであるのと0xc0000374というエラーがSTATUS_HEAP_CORRUPTIONなので原因がわからずじまいです。

何が原因なのかや、このようなときのデバッグ手法など教えていただければ幸いです

=============================================

2022/07/05追記  
VSTOの問題かと思っておりましたが、ExcelVBAで似たような処理を作った結果落とすことが可能なのがわかりましたのでVSTOの問題ではなくExcelの問題のようです。

VBA内容

[code]

    Option Explicit
    
    ' VSTOで最小で落ちる処理をVBAに持ってきた
    Sub execute()
    On Error GoTo execute_Error
        Dim cell As Range
        Dim val As String
        Dim j As Long
        Dim c As Characters
        
        Set cell = Application.ActiveCell
        
        ' VBAではCELL編集中では関数呼び出せないけどVSTOでは呼び出せてしまいカーソルが荒ぶるのでActivateして編集状態を解除
        cell.Activate
        
        Set cell = Nothing
        Set cell = Application.ActiveSheet.Cells(6, 3)
        
        For j = 1 To cell.Characters.Count Step 1
    '        Set c = Nothing
    '        Set c = cell.Characters(j, 1)
        Next j
        
        Set cell = Nothing
        Set c = Nothing
        
        Exit Sub
        
    execute_Error:
        Call MsgBox(Err.Number, vbInformation, Err.Description)
    End Sub
    
[/code]


CC BY-SA 4.0
2022-04-28T06:49:07.560
88546
2022-07-05T05:36:27.577
2022-07-05T05:36:27.577
20862
20862
question
c# vba excel
Excel2013 と 2016 VSTO アドイン VisualC# での開発において特定処理でExcelが0xc0000374で終了する