2015-07-03 77 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 –

回答