2015-07-03 51 views
2

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

我的问题似乎与这些问题非常相似,但我无法弄清楚我失踪的步骤。

How to edit cell value in VB.net - Using .Interop.Excel VB.net Office Solution - Accessing value in named Range in a Worksheet

VBA CODE:

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。

编辑:

我曾尝试基于链路上多次重复提供,但总是得到同样的错误:

“System.Runtime.InteropServices.COMException”类型的异常出现在mscorlib.dll从HRESULT异常:但未在用户代码来处理

附加信息0x800A03EC

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

Dim c As Object 

    c = myrng.Value 
    myrng.Value = c 

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

编辑2:

与用户垫的马克杯聊天后,我想在一个范围,以编辑的值,纯粹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

在你的代码中,在这行'newrng = myrng'中,你所做的就是将相同的数据分配给不同的指针。这不是一个新的范围。这是旧的范围。因此,您所做的只是增量编号,但在新的广告旧范围内将保持不变 –

+0

如何修改myrng(或进行适当的复制并修改)? myrng.Value2(i,1)= myrng.Value2(i,1)+ 1也不起作用。 –

+0

我不认为你甚至可以创建“新范围”。范围是您在工作表中选择的项目。这是你的麻烦的答案http://stackoverflow.com/questions/4811664/set-cell-value-using-excel-interop –

回答