2013-03-17 56 views
1

如果這是一個總的noob問題,我很抱歉。我正在爲Excel編寫插件。我有一個打開excel文件的class1內部的子文件,在這個子文件中,我有一個對sub2的引用,它在下面。我所要做的就是掛入Excel的活動實例,更改一個已命名的範圍值並退出。但不管我嘗試哪種方式,我都會收到錯誤。這是我的。告訴我我哪裏出了問題。忘了提及,這是在VB.NET中。在Excel中設置命名範圍的值

Private Sub SetRangeValue(ByVal RangeName As String, ByVal RangeValue As String) 
    Dim ExcelApp As Excel.Application 
    Dim TheRange As Excel.Range 
    Dim TheRangeName As String = "" 

    'Hook into running excel instance 
    ExcelApp = CType(Marshal.GetActiveObject("Excel.Application"), Excel.Application) 

    'First Attempt Here 
    TheRange = ExcelApp.ActiveWorkbook.Names.Item(RangeName) 
    TheRange.Value = RangeValue 

    'Second Attempt 
    TheRange = ExcelApp.Range(RangeName) 
    TheRange.Value = RangeValue 
End Sub 

我無法讓任何一個人工作。任何幫助表示讚賞。

+0

你正在得到什麼錯誤? – volody 2013-03-17 03:01:48

+0

不太確定。它不斷給我錯誤相關的COM對象 – joeb 2013-03-17 03:28:05

+0

這是它。這與(第一次嘗試)無法將類型'System .__ ComObject'的COM對象轉換爲接口類型'Microsoft.Office.Interop.Excel.Range'。此操作失敗,因爲IIC「{00020846-0000-0000-C000-000000000046}」接口的COM組件上的QueryInterface調用失敗,原因是出現以下錯誤:沒有支持此接口(異常來自HRESULT:0x80004002(E_NOINTERFACE)) 。 – joeb 2013-03-17 03:29:45

回答

2

最後,我得到此正常工作。這是如何工作的。感謝所有的幫助。

Private Sub SetRangeValue(ByVal RangeName As String, ByVal RangeValue As String) 
    Dim ExcelApp As Excel.Application 
    'Dim TheRangeObj As Excel.Range 
    Dim TheRange As Microsoft.Office.Interop.Excel.Name 
    Dim TheRangeName As String = "" 


    'Hook into running excel instance 
    ExcelApp = CType(Marshal.GetActiveObject("Excel.Application"), Excel.Application) 

    TheRange = ExcelApp.ActiveWorkbook.Names.Item(RangeName) 
    TheRange.RefersToRange.Value = RangeValue 

End Sub 
1
'First Attempt Here 
TheRange = ExcelApp.ActiveWorkbook.Names.Item(RangeName) 
TheRange.Value = RangeValue 

根據Names.Item Method (Excel),該函數返回Names集合中的單個Name對象。在這種情況下TheRange不是這個變量的有效名稱,它應該是TheName。然後

TheName.Value = RangeValue 

是不正確的轉讓;根據Name.Value Property (Excel)此屬性 - 返回或設置一個字符串值,該值表示名稱被定義爲引用的公式。

錯誤0x800A03EC,從Excel返回此錯誤有多種原因 - 最常見的情況是嘗試寫入大於Excel的數據時可以處理。例如,您嘗試將長度超過1024個字符的字符串寫入Excel中的單元格中

0

我剛剛作出了一個子,將使其更容易我找到&取代使用我的命名範圍:

Private Sub XlFindReplace(ByRef xSheet As Excel.Worksheet, ByVal cellName As String, ByVal NewText As String) 
     xSheet.Range(cellName).Value = NewText 
    End Sub 

然後T'D這樣稱呼它,以取代的東西:

XlFindReplace(xlC1Sheet, "client1Co1Tax", client1Co1Tax) 
  • 其中xlC1Sheet是片我目前
  • "client1Co1Tax"是Excel
  • client1Co1Tax範圍的名稱是字符串變量我替換它

感謝大家對他們的意見。