2013-05-27 40 views
1

我在寫一個生成Excel文件的VB.NET應用程序。Cells.Formula =「= CONCATENATE(...)」Exception 0x800A03EC

我的意圖是編寫一個在單元格中使用CONCATENATE的特定公式。現在

,下面的代碼行觸發上述異常:

0) tSheet.Cells(tIncRow + ItemIndex * PixelIndex + PixelIndex, 2).Formula = 
    "=CONCATENATE(" & Pixels(PixelIndex) & ";Batches!J3)" 

以下行不拋出異常。 (它只是上面一行沒有=的開頭部分,它不會引發異常意味着索引正確使用;我會在下面的段落中刪除它們以便簡化符號)。此外,如果我手動把在Excel中=在非常相同的公式的前面,則公式給出正確的結果(它正確地抓住Batches!J3

1) tSheet.Cells(tIncRow + ItemIndex * PixelIndex + PixelIndex, 2).Formula = 
    "CONCATENATE(" & Pixels(PixelIndex) & ";Batches!J3)" 

下面的行也運行沒有問題:

2) tSheet.Cells(indexes).Formula = "=CONCATENATE(" & Pixels(PixelIndex) & ")" 

此行的作品,以及:

3) tSheet.Cells(indexes).Formula = "=CONCATENATE(Batches!J3)" 

似乎只有2個組合)和3)引發異常。

我使用Visual Studio 2012,Excel 2007和我包括Microsoft Excel 12.0對象庫

感謝您的幫助!

+0

'Pixels(PixelIndex)'的值是什麼?此錯誤代碼非常普遍,可以表示任何內容,從錯誤的公式,到缺少的名稱,混合R1C1和A1樣式等。 –

+0

此外,您在Excel中使用的是哪種語言?你是否用英國英文版的逗​​號('''')或者歐洲版的分號(';')來分隔參數。 –

回答

1

你沒提到您的語言環境,所以以防萬一Excel中期待參數分隔符是逗號(如EN-UK區域),而不是分號(如DE-DE區域設置),然後嘗試:

tSheet.Cells(tIncRow + ItemIndex * PixelIndex + PixelIndex, 2).Formula = 
    "=CONCATENATE(" & Pixels(PixelIndex) & ",Batches!J3)" 

(編輯),如果不工作,那麼你可以使用類似以下內容,使其與語言環境無關:

Dim ci As CultureInfo = System.Globalization.CultureInfo.CurrentCulture 
Dim listSep As String = ci.TextInfo.ListSeparator 
tSheet.Cells(tIncRow + ItemIndex * PixelIndex + PixelIndex, 2).Formula = 
    "=CONCATENATE(" & Pixels(PixelIndex) & listSep & "Batches!J3)" 

這只是抓住從窗戶文化數字列表分隔符。它假定Excel中與System.Globalization.CultureInfo.CurrentCulture運行,看到更詳細的信息,以下兩個MSDN引用在此和特殊情況下,你可能會遇到:

(編輯完)

如果這行不通,那麼我們可能會需要更多的信息 - 看到你原來的問題我的意見。

+0

你好!非常感謝您的詳細解答!首先,我將無法在明天上午(CEST時間)之前測試您的更正,但讓我補充一點,您確實是正確的:您已經看到我的「區域設置」之間存在不匹配Excel版本和我的Visual Studio之一。事實上,Excel是歐洲語言環境(「;」),而Visual Studio應該在美國。如果輸入的公式的某種驗證也由Visual Studio運行,則它可以清楚地解釋異常。 如果此解決方案無效,我將很高興收錄其他信息! – Knyq

+0

男人,你是對的!我把逗號放在VB.NET代碼中,當它在Excel中複製公式時,它用分號將它改回來。謝謝! – Knyq