Helpex - Trao đổi & giúp đỡ Đăng nhập
5

Mã của người khác trong dự án mà tôi đang cố gắng sửa chữa.

listO.Range(i, j).FormulaR1C1 = FormulaMatrix(i, j)

ở đâu FormulaMatrix(i, j)luôn là một Stringgiá trị. Bất kỳ giá trị ngẫu nhiên / thử nghiệm nào, tôi thử với, đều được gán thành công, ngoại trừ khi đó là một công thức, ví dụ:

=IF(LENGTH([@Units])>0;[@SalesAmount]-[@DiscountAmount]0)

Nếu tôi xóa =dấu ở đầu công thức, nó sẽ được gán chính xác, nhưng sau đó vô ích, vì nó không phải là công thức.

@Units, @SalesAmount, @DiscountAmountLà tài liệu tham khảo / tên của cột.

Vì vậy, khi gán một công thức, tôi nhận được một ngoại lệ HRESULT: 0x800A03EC. Tôi đã tra cứu câu trả lời này để được giải thích và làm theo một số hướng dẫn ở đó. Tôi đã xác định rằng sự cố của mình là như sau: sự cố xảy ra do một hàm được nhập vào một ô và nó đang cố gắng cập nhật một ô khác.

Kiểm tra cũng bài đăng này. Tôi đã thử khá khác (như chỉ đặt các công thức không có =và sau đó chạy lại và đặt các dấu bằng), nhưng cùng một vấn đề.

Tôi không biết làm thế nào để tiếp cận điều này.

5 hữu ích 5 bình luận 1.5k xem chia sẻ
1

Lỗi có thể đến từ dữ liệu hiện tại của bạn, tương ứng, bố cục của trang tính. Tôi khuyên bạn nên kiểm tra những gì bên trong listO.Range(i, j).FormulaR1C1trước khi bạn chỉ định công thức.

Tôi đã gặp trường hợp phạm vi đã có dữ liệu sai bên trong, và thật kỳ lạ, tôi không biết tại sao, tôi không thể gán công thức mới.

Nếu đúng như vậy - hãy thử xóa giá trị của phạm vi và sau đó gán công thức:

listO.Range(i, j).FormulaR1C1 = ""
listO.Range(i, j).FormulaR1C1 = FormulaMatrix(i, j)
1 hữu ích 1 bình luận chia sẻ
4

.formulalocallàm! (Trong khi .formula, .value.formular1c1không.)

Tôi vừa mới bắt đầu làm việc với VB.NET và gặp phải một vấn đề tương tự. Đây là dữ liệu đơn giản của tôi lúc đầu ( Table1trong Sheet1):

Không thể chỉ định công thức cho phạm vi ô trong Excel

Sau đó, sau khi áp dụng mã bên dưới, tôi có điều này:

Không thể chỉ định công thức cho phạm vi ô trong Excel

Toàn bộ mã cho biểu mẫu:

Imports Excel = Microsoft.Office.Interop.Excel

Public Class Form1
    '~~> Define your Excel Objects
    Dim xlApp As New Excel.Application
    Dim xlWorkBook As Excel.Workbook
    Dim xlWorkSheet As Excel.Worksheet
    Dim strAddress As String = "C:\Temp\SampleNew.xlsx"
    Dim list1 As Object


    Private Sub btnOpen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOpen.Click
        '~~> Add a New Workbook (IGNORING THE TWO DOT RULE)
        xlWorkBook = xlApp.Workbooks.Open(strAddress)

        '~~> Display Excel
        xlApp.Visible = True

        '~~> Set the relevant sheet that we want to work with
        xlWorkSheet = xlWorkBook.Sheets("Sheet1")

        With xlWorkSheet

            '~~> Change the range into a tabular format
            list1 = .ListObjects("Table1")

        End With

        list1.range(2, 4).formulalocal = "=IF(LEN([@Month])>5;[@Income]-[@MoneySpent];0)"

        '~~> Save the file
        xlApp.DisplayAlerts = False
        xlWorkBook.SaveAs(Filename:=strAddress, FileFormat:=51)
        xlApp.DisplayAlerts = True

        '~~> Close the File
        xlWorkBook.Close()

        '~~> Quit the Excel Application
        xlApp.Quit()

        '~~> Clean Up
        releaseObject(xlApp)
        releaseObject(xlWorkBook)
    End Sub


    '~~> Release the objects
    Private Sub releaseObject(ByVal obj As Object)
        Try
            System.Runtime.InteropServices.Marshal.ReleaseComObject(obj)
            obj = Nothing
        Catch ex As Exception
            obj = Nothing
        Finally
            GC.Collect()
        End Try
    End Sub
End Class

@Siddharth Rout đã giúp rất nhiều để xây dựng mã này, vì anh ấy sở hữu trang web tuyệt vời này: http://www.siddharthrout.com/

4 hữu ích 4 bình luận chia sẻ
-1

Vấn đề có thể là với công thức của bạn. Thử cái này-

=IF(LEN([@Units])>0,[@SalesAmount]-[@DiscountAmount],0)

Nếu điều này không hiệu quả, tôi sẽ thử sử dụng phương thức .formula thay vì .formulaR1C1 .. Có lý do cụ thể nào mà bạn đang sử dụng tham chiếu R1C1 không?

-1 hữu ích 0 bình luận chia sẻ
loading
Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ vb.net excel excel-formula interop excel-2010 , hoặc hỏi câu hỏi của bạn.

Có thể bạn quan tâm

loading