【发布时间】:2017-04-05 18:13:41
【问题描述】:
我正在创建一个 Web 应用程序来替换当前的 Excel 宏应用程序。 Excel 宏中包含多个表单和模块。当我使用 xlApp.Run 方法在 C# 中调用宏函数时,该函数被调用但在函数调用其他子函数并使用全局公共变量时抛出错误。
错误: 1. 编译错误:未定义子或函数 - 在“Set svd = m_queries(GetSheetRootName(Sheet1))” 2. 运行时错误 424:需要对象 - 在“CompareWorksheetsToCombined”
代码:
Public Function CompareExcels(filePath1 As String, filePath2 As String)
Call MsgBox("Done comparing sheets1.", vbInformation, "Compare Complete")
On Error GoTo CompErr
Call MsgBox("Done comparing sheets2.", vbInformation, "Compare Complete")
Dim compBook As Workbook
Dim book1 As Workbook, book2 As Workbook
Dim sheet, Sheet1 As Worksheet, Sheet2 As Worksheet
Dim svd As ScriptViewDescription, obj
Dim l As Long
Dim sheetName As String
Dim a As Integer
'// Check to make sure we have valid options selected for compare
If ValidateOptions = False Then Exit Function
cmdCompare.Enabled = True
'// Create the comparison output workbook
Set compBook = OpenCompareOutput()
'// Get the workbooks we're comparing
Set book1 = Workbooks(filePath1)
Set book2 = Workbooks(filePath2)
'// Verify if the Summary Sheet Exists and compare the libraries.
'//If (WorksheetExists("[" & filePath1 & "]Summary")) And (WorksheetExists("[" & filePath2 & "]Summary")) Then
Set Sheet1 = book1.Sheets("Summary")
Set Sheet2 = book2.Sheets("Summary")
'//If Sheet1.Cells(2, 3) = Sheet2.Cells(2, 3) Then
'// a = MsgBox("Attention: You are comparing the data from Same Environment", vbCritical, "Critical Warning")
'//End If
'//Else
'//a = MsgBox("Summary Tab does not exist in either Workbook A or B and the Libraries are not compared", vbCritical, "Critical Warning")
'//End If
'// Look for selected sheets and then compare them
For l = 0 To lstSheets.ListCount - 1
If lstSheets.selected(l) = True Then
'// reset vars to make sure we don't accidentally re-use from last loop
Set Sheet1 = Nothing
Set Sheet2 = Nothing
Set svd = Nothing
'// Attempt to load up the vars with the new stuff
sheetName = lstSheets.list(l)
Set Sheet1 = book1.Sheets(sheetName)
Set Sheet2 = book2.Sheets(sheetName)
Set svd = m_queries(GetSheetRootName(Sheet1))
'// Check vars and if we're good then compare
If Not (Sheet1 Is Nothing) _
And Not (Sheet2 Is Nothing) _
And Not (svd Is Nothing) Then
Call CompareWorksheetsToCombined(Sheet1, Sheet2, compBook, svd, txtPrefixA.Text, txtPrefixB.Text)
End If
End If
Next l
cmdCompare.Enabled = True
Call MsgBox("Done comparing sheets.", vbInformation, "Compare Complete")
Exit Function
CompErr:
Call MsgBox("Error while attempting to process compares." & vbCrLf & vbCrLf & "Error " & Err.Number & ": " & Err.Description, vbCritical, "Error During Compare")
cmdCompare.Enabled = True
End Function
请帮忙。
【问题讨论】:
-
没有您的代码我们如何提供帮助?请阅读how to ask
-
请立即查看。谢谢
-
如果您要在服务器上自动化 excel,这不是一个好的方向:它真的不是为那样使用而设计的。
-
您的建议
-
我想这将是找到一个可以在服务器端运行并将您的 VBA 移植到 C# 的库