簡體   English   中英

(VBA 到 VB.NET 代碼修改)使用 VB.NET 將特定單元格的值寫入工作簿

[英](VBA to VB.NET code modification) Write value to specific cell to Workbook using VB.NET

我在 Excel VBA 中有一個代碼,它在第 2 列中查找特定值並將該值寫入找到的行第 3 列中:

ThisWorkbook.Worksheets("Sheet1").Cells(Cells.Find("ProjectNumber", lookat:=xlWhole).Row, 3).Value = "TEST"

現在,我試圖在從我在 Visual Studio 中制作的應用程序中運行它時使相同的功能正常工作,到目前為止我得到的是:

Imports Excel = Microsoft.Office.Interop.Excel
Module Automate_Excel

Public xlApp As Excel.Application = Nothing
Public xlWorkBook As Excel.Workbook = Nothing
Public xlWorkSheet As Excel.Worksheet = Nothing
Sub Excel_FinishProject()

    xlApp = New Excel.Application
    xlWorkBook = xlApp.Workbooks.Open("G:\100 Databases\Projects Schedule.xlsx")
    xlApp.Visible = True
    xlWorkSheet = xlWorkBook.Worksheets("sheet1")

'Write
    xlWorksheet("Sheet1").Cells(Cells.Find("ProjectNumber", lookat:=xlWhole).Row, 3).Value = "TEST"

    xlWorkBook.Close()
    xlApp.Quit()
End Sub

End Module

但它不起作用給我各種不同的錯誤,如“xlwhole 未聲明”和“單元格未聲明”,在我的理解中它應該來自 excel 的類型庫和代碼,例如:

xlWorkSheet.Cells(2, 5) = "TEST"

這確實使用“細胞”

有人可以幫我提供正確的代碼嗎?

您需要完全限定每個枚舉。 在這種情況下,

Excel.XlLookAt.xlWhole 

XlLookAt 枚舉 (Excel)

在 Excel/VBA 環境中,這些是可選的,因此您永遠不會注意到它們。

您代碼中的Cells也不是完全合格的。 Cells.Find需要工作表限定符。 VB.NET 在沒有限定符的情況下不知道Cells是什么。 同樣,在 VBA 環境中,您不必如此明確,但在 VB.NET 中您必須這樣做,因為沒有“默認上下文”

此外,您應該在使用之前將Find的結果存儲在一個變量中,而不是嘗試在一行中完成所有操作。 然后你可以在嘗試使用結果之前檢查它是否“沒有找到任何東西”,甚至可以在采取行動之前查看結果

xlWorkSheet = xlWorkBook.Worksheets("Sheet1")
Dim result as Excel.Range = xlWorkSheet.Cells.Find("ProjectNumber", lookat:=Excel.XlLookAt.xlWhole)
If result IsNot Nothing Then
    ' xlWorkSheet.Cells(result.Row, 3).Value = "TEST"

    ' OP says this works instead
    xlWorkSheet.Cells(result.Row, 3) = "TEST"

End IF

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM