我有一個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替換,而不會有任何結果變化。
在你的代碼中,在這行'newrng = myrng'中,你所做的就是將相同的數據分配給不同的指針。這不是一個新的範圍。這是舊的範圍。因此,您所做的只是增量編號,但在新的廣告舊範圍內將保持不變 –
如何修改myrng(或進行適當的複製並修改)? myrng.Value2(i,1)= myrng.Value2(i,1)+ 1也不起作用。 –
我不認爲你甚至可以創建「新範圍」。範圍是您在工作表中選擇的項目。這是你的麻煩的答案http://stackoverflow.com/questions/4811664/set-cell-value-using-excel-interop –