我在 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"
這確實使用“細胞”
有人可以幫我提供正確的代碼嗎?
uj5u.com熱心網友回復:
您需要完全限定每個列舉。在這種情況下,
Excel.XlLookAt.xlWhole
XlLookAt 列舉 (Excel)
在 Excel/VBA 環境中,它們只是一個基本的列舉。
Cells在您的代碼中也不完全合格。Cells.Find需要作業表限定符。VB.NET 不知道什么Cells是沒有限定符。同樣,在 VBA 環境中,您不必如此明確,但在 VB.NET 中您必須這樣做,因為沒有“默認背景關系”
您的xlWorkSheet變數未編入索引。它已經擁有對xlWorkBook.Worksheets("Sheet1")-的單個參考,因此您無需再次指定它的名稱。
此外,您應該在使用之前將結果存盤Find在Range變數中,而不是嘗試在一行中完成所有操作。然后你可以在嘗試使用結果之前檢查它是否“沒有找到任何東西”,甚至可以在采取行動之前查看結果
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/339739.html
上一篇:VBA用不同的文本替換多個范圍
