我有一张excel表,其值在一个范围内,我想在vb.net中执行一些计算。我使用COM将该范围传递给vb.net。当我尝试编辑范围的值时,没有任何反应。
我的问题似乎与这些问题非常相似,但我无法弄清楚我错过了哪一步。
How to edit cell value in VB.net - Using .Interop.Excel VB.net Office Solution - Accessing value in named Range in a Worksheet
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中发生了'System.Runtime.InteropServices.COMException'类型的异常,但未在用户代码中处理
附加信息:来自HRESULT的异常: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替换而不会对结果进行任何更改。
答案 0 :(得分:0)
看看这个问题/答案:
Excel VBA: Iterating over range parameter and change cell values
UDF似乎只能更改呼叫单元格。
我认为这种方法是不可能的。
解决方法是重写代码以使用数组,将范围分配给数组,编辑数组并将其传递给新函数。