【发布时间】:2015-07-06 01:47:10
【问题描述】:
我有一个 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代替,结果没有任何变化。
【问题讨论】:
-
在您的代码中,在
newrng = myrng这一行中,您所做的只是将相同的数据分配给不同的指针。这不是一个新的范围。这是相同的旧范围。因此,您所做的只是增加数字,但在新广告旧范围内将是相同的 -
如何修改 myrng (或制作正确的副本并修改它)? myrng.Value2(i, 1) = myrng.Value2(i, 1) + 1 也不起作用。
-
我认为您甚至不能创建“新范围”。范围是您在工作表中选择的内容。这是您的烦恼的答案stackoverflow.com/questions/4811664/…
-
已编辑问题@T.S. ,但仍然无法根据该链接获得有用的结果。