在Excel范围中编辑值

我有一个Excel范围内,我想在VB.NET中执行一些计算值的Excel表。 我使用COM将该范围传递给vb.net。 当我尝试编辑范围的值,没有任何反应。

我的问题似乎与这些问题非常相似,但我无法弄清楚我错过了哪些步骤。

如何在VB.net中编辑单元格值 – 使用.Interop.Excel VB.net Office解决scheme – 在工作表中命名区域中访问值

VBA代码:

Function MyTestRange (Byref myrng as range) Set classLib = New VBProject.CClass MyTestRange = classLib.MyTestRange(myrng) End Function 

VB.NET代码

 Imports Microsoft.Office.Interop.Excel Public Class CClass Function MyTestRange(ByRef myrng As Range) As Double Dim newrng As Range Dim b As Integer = myrng.Rows.Count Dim i As Integer newrng = myrng For i = 1 To b newrng.Value2(i, 1) = myrng.Value2(i, 1) + 1 Next i MyTestRange = newrng.Value2(1, 1) End Function End class 

虽然此代码不会生成错误,但不会更改newrng中的值。

编辑:

我已经尝试了许多基于链接提供的迭代,但总是得到相同的错误:

在mscorlib.dll中发生types“System.Runtime.InteropServices.COMException”的exception,但未在用户代码中处理

附加信息:来自HRESULT的exception:0x800A03EC

这是产生错误的最简单的方法:

  Dim c As Object c = myrng.Value myrng.Value = c 

因此,将价值观修改为新的东西似乎遥不可及!

编辑2:

与用户Mat's Mug聊天后,我试图编辑一个范围内的值,纯粹是在VBA中。

这个子作品完美:

 Sub rangesub() Dim example As Range Set example = Range("A1:A4") example.Value = Application.Transpose(Array(1, 2, 3, 4)) End Sub 

Excel函数似乎也能够处理传递范围:

 Function SimpleCopyRange(myrng) SimpleCopyRange = myrng End Function 

这个代码的一个非常简单的组合工作:

 Function EditRange(myrng) Dim example As Range Set example = Range("A1:A4") EditRange = example End Function 

但是,如果我尝试编辑范围,则会出现未指定的错误:

 Function EditRange(myrng) Dim example As Range Set example = Range("A1:A4") example.Value = Application.Transpose(Array(1, 2, 3, 4)) EditRange = example End Function 

application.transpose部分显然增加了一层复杂性,可以用example.Value = 8来replace,结果没有任何变化。

看这个问题/答案:

Excel VBA:迭代范围参数并更改单元格值

看起来UDF只能改变调用单元。

我觉得这个方法是不可能的。

解决方法是重写代码以使用数组,将范围指定给数组,将数组编辑并将其传递给新函数。