在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只能改变调用单元。
我觉得这个方法是不可能的。
解决方法是重写代码以使用数组,将范围指定给数组,将数组编辑并将其传递给新函数。