1

我正在尝试使用多维字符串数组来填充 Excel 工作表,并且在插入公式时遇到了麻烦。下面的小案例说明了这个问题:

Dim tA(3, 3) As String
tA(1, 1) = "=HYPERLINK(""www.stackoverflow.com"")"
tA(1, 2) = "=HYPERLINK(""www.stackexchange.com"")"
tA(2, 1) = "=2+5"
tA(2, 2) = "Normal Text"
worksheet.Range(worksheet.Cells(1, 1), worksheet.Cells(4, 4)).Value = tA

评估此代码时,Excel 工作表不会自动转换超链接或评估公式。也就是说,当我查看 Excel 时,(2,1) 处的单元格将根据需要显示“=2+5”而不是“7”。有没有办法强制 excel 评估所有单元格以查看是否存在命令?

我应该注意,如果我将命令插入到单个单元格中,那么它会被正确评估,但这不是一个选择,因为我有数千个单元格并且一次填充一个单元格会慢几个数量级。

4

2 回答 2

4

您会得到它,因为公式作为值被传输,将以下行添加到您的代码中,您应该很高兴:

worksheet.Range(worksheet.Cells(1, 1), worksheet.Cells(4, 4)).formular1c1= worksheet.Range(worksheet.Cells(1, 1), worksheet.Cells(4, 4)).formular1c1

完整的代码是

Dim tA(3, 3) As String
tA(1, 1) = "=HYPERLINK(""www.stackoverflow.com"")"
tA(1, 2) = "=HYPERLINK(""www.stackexchange.com"")"
tA(2, 1) = "=2+5"
tA(2, 2) = "Normal Text"
worksheet.Range(worksheet.Cells(1, 1), worksheet.Cells(4, 4)).Value = tA
worksheet.Range(worksheet.Cells(1, 1), worksheet.Cells(4, 4)).formular1c1= worksheet.Range(worksheet.Cells(1, 1), worksheet.Cells(4, 4)).formular1c1
于 2012-11-02T16:54:47.933 回答
1

...这有点像黑客,但我过去曾成功使用过它...

将公式中的“=”替换为您不会使用的另一个字符(我通常使用“#”,但您可以使用任何字符),然后使用替换。

您的代码如下所示:

Dim tA(3, 3) As String
tA(1, 1) = "#HYPERLINK(""www.stackoverflow.com"")"
tA(1, 2) = "#HYPERLINK(""www.stackexchange.com"")"
tA(2, 1) = "#2+5"
tA(2, 2) = "Normal Text"
Sheets(1).Range(Sheets(1).Cells(1, 1), Sheets(1).Cells(4, 4)).Value= tA
Sheets(1).Range(Sheets(1).Cells(1, 1), Sheets(1).Cells(4, 4)).Replace "#", "="

希望这可以帮助

于 2012-11-02T16:55:00.817 回答