1

これが完全な初心者の質問である場合は、お詫び申し上げます。現在、Excel用のアドインを作成中です。私は、Excelファイルを開くclass1内にサブを持っています。このサブには、以下のsub2への参照があります。私が探しているのは、Excelのアクティブなインスタンスにフックし、名前付き範囲の値を変更して終了することだけです。しかし、どちらの方法を試してもエラーが発生し続けます。これが私が持っているものです。どこが間違っているのか教えてください。言及するのを忘れました、これはVB.NETにあります。

   Private Sub SetRangeValue(ByVal RangeName As String, ByVal RangeValue As String)
    Dim ExcelApp As Excel.Application
    Dim TheRange As Excel.Range
    Dim TheRangeName As String = ""

    'Hook into running excel instance
    ExcelApp = CType(Marshal.GetActiveObject("Excel.Application"), Excel.Application)

    'First Attempt Here
    TheRange = ExcelApp.ActiveWorkbook.Names.Item(RangeName)
    TheRange.Value = RangeValue

    'Second Attempt
    TheRange = ExcelApp.Range(RangeName)
    TheRange.Value = RangeValue
End Sub

どちらも動作させられません。どんな助けでも大歓迎です。

4

3 に答える 3

2

最後に、これが適切に機能するようになりました。これが機能する必要があった方法です。すべての助けをありがとう。

Private Sub SetRangeValue(ByVal RangeName As String, ByVal RangeValue As String)
    Dim ExcelApp As Excel.Application
    'Dim TheRangeObj As Excel.Range
    Dim TheRange As Microsoft.Office.Interop.Excel.Name
    Dim TheRangeName As String = ""


    'Hook into running excel instance
    ExcelApp = CType(Marshal.GetActiveObject("Excel.Application"), Excel.Application)

    TheRange = ExcelApp.ActiveWorkbook.Names.Item(RangeName)
    TheRange.RefersToRange.Value = RangeValue

End Sub
于 2013-03-17T14:34:41.807 に答える
1
'First Attempt Here
TheRange = ExcelApp.ActiveWorkbook.Names.Item(RangeName)
TheRange.Value = RangeValue

Names.Itemメソッド(Excel)によると、この関数はNamesコレクションから単一のNameオブジェクトを返します。この場合、TheRangeはこの変数の有効な名前ではないため、TheNameである必要があります。それで

TheName.Value = RangeValue

正しい割り当てではありません。Name.Valueプロパティ(Excel)によると、このプロパティ-名前が参照するように定義されている式を表す文字列値を返すか、設定します。

エラー0x800A03EC、このエラーがExcelから返される理由はいくつかあります。最も一般的なのは、Excelが処理できるよりも大きいデータを書き込もうとした場合です。たとえば、Excelのセルに1024文字より長い文字列を書き込もうとしました。

于 2013-03-17T05:37:09.790 に答える