[英](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
在 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.