数値以外の名前のシートを削除するサブプログラムがあります。それはシートを見つけることですが、シートは削除しません。私は理由を理解できません....Visual BasicとInteropを使用してExcelからシートを削除する
それはエラーを投げていない、それはPDFを(すべてのシートで)作成しています。変更を保存するようにxlsBook.Close
を設定すると、プロセスの実行後にブックにすべてのシートが残っています。
私はで実行しています。Visual Studio 2015MSOffice 2013コードスニペットは次のとおりです。
Imports System
Imports System.IO
Imports Microsoft.Office.Interop.Excel
Imports Microsoft.Office.Interop.PowerPoint
Imports Microsoft.Office.Interop.Word
Imports Microsoft.Office.Core
Private Sub Convert_Excel(ByVal InFormat As String, ByVal InSpecial As String)
Dim xlsApp = New Microsoft.Office.Interop.Excel.Application()
Dim xlsBook As Microsoft.Office.Interop.Excel.Workbook
Dim xlsSheet As Microsoft.Office.Interop.Excel.Worksheet
xlsApp.Application.DisplayAlerts = False
Try
xlsApp.ScreenUpdating = False
xlsBook = xlsApp.Workbooks.Open(theFile, UpdateLinks:=False, ReadOnly:=False)
For Each xlsSheet In xlsBook.Sheets
If Not IsNumeric(xlsSheet.Name) Then
Try
xlsSheet.Delete()
Catch ex As Exception
Environment.ExitCode = ERROR_EXCEL_NOSHEETS
End Try
End If
Next
If xlsBook.Worksheets.Count > 1 And Environment.ExitCode <> ERROR_EXCEL_NOSHEETS Then
If LCase(InFormat) = "standard" Then
xlsBook.ExportAsFixedFormat(XlFixedFormatType.xlTypePDF, thePDFFile, XlFixedFormatQuality.xlQualityStandard,
True, True, Type.Missing, Type.Missing, False, Type.Missing)
Else
Environment.ExitCode = ERROR_EXCEL_BADOP
If Not Command_In Then
System.Windows.Forms.MessageBox.Show("INVALID OPERATION SELECTED")
End If
End If
End If
xlsBook.Close(SaveChanges:=False)
xlsApp.Quit()
xlsBook = Nothing
xlsApp = Nothing
pdfnameLabel.Text = "Created " & Convert_FilePDF
Catch ex As Exception
Environment.ExitCode = ERROR_EXCEL_UNKNOWN
If Not Command_In Then
System.Windows.Forms.MessageBox.Show(ex.Message)
End If
Finally
If xlsBook IsNot Nothing Then
xlsBook.Close(SaveChanges:=False)
End If
If xlsApp IsNot Nothing Then
xlsApp.Quit()
End If
End Try
End Sub
最後のシートから逆方向に働いてみを追加し、[削除前]あなたが必要とするように見えますFor Eachを使用して繰り返している間に –
@TimWilliams(おそらく)関係のないメモで、削除するワークシートのリストを作成することをお勧めします: 'Dim sheetsToDelete = xlBook.Sheets.Cast(Of Worksheet).Where(Function (x)NotNumeric(x.Name))。ToList'。その後、反復収集を心配することなく、そのリスト内のすべてのワークシートを安全に削除することができます。また、リストの長さがワークブック内のすべてのワークシートの数よりも多いかどうかチェックするのも簡単です。 –
'If Not IsNumeric(xlSheet.Name)Then'ブロック内で' Try..Catch'を削除するとどうなりますか? –