易VBAmacros列出所有工作表生成错误:types不匹配

我正在做一个ExcelComparer,但我遇到了一个可能明显的错误,我显然错过了一些东西。

我在Excel 2007中运行一个vbamacros

我得到的确切错误是“运行时错误13:types不匹配”当循环尝试获取第二个工作表.name时,会发生这种情况。
所以,第一个sheetname返回正常

下面你可以findmacros

在此先感谢,L

Sub compare() Dim strWorkbook1, strWorkbook2 As String Dim Workbook1, Workbook2 As Workbook strWorkbook1 = Worksheets("Sheet1").Range("C5") & Worksheets("Sheet1").Range("D5") strWorkbook2 = Worksheets("Sheet1").Range("C6") & Worksheets("Sheet1").Range("D6") Set xlapp = CreateObject("Excel.application") Set Workbook1 = xlapp.Workbooks.Open(strWorkbook1) xlapp.Visible = False Dim ws As Worksheet For Each ws In Workbook1.Sheets 'ws.Select If Not ws.Visible = xlSheetVeryHidden Then MsgBox (ws.Name) End If Next ws xlapp.Close End Sub 

使用这个For循环:

 For Each ws In Workbook1.Worksheets 

从MSDN来看,表格和工作表属性之间的区别是:

此属性不会返回macros表单,图表或对话框。 使用表单属性返回这些表以及工作表。 您还可以使用专用属性Excel4MacroSheets和Excel4IntlMacroSheets返回macros工作表和Charts属性以返回图表。

[编辑我原来的反应,因为我已经testing了不同的variables渲染我的评论不正确]

此外,代码的后端将失败,因为您无法将Excel应用程序设置为closures此行xlapp.Close

你应该

  1. closures自动工作簿( Workbook1.Close False
  2. 退出自动化应用程序( xlapp.Quit
  3. 确保自动化应用程序被销毁( Set xlapp = Nothing )a

你的代码的工作部分应该是这样的

 Dim ws As Worksheet For Each ws In Workbook1.WorkSheets If Not ws.Visible = xlSheetVeryHidden Then MsgBox (ws.Name) Next ws Workbook1.Close False xlapp.Quit Set xlapp = Nothing End Sub