Excel-Sheet vor alle anderen Sheets einfügen/Probleme beim Einfügen von Word-Tabelle in vorhandene Excel-Mappe

  • VB.NET

    Excel-Sheet vor alle anderen Sheets einfügen/Probleme beim Einfügen von Word-Tabelle in vorhandene Excel-Mappe

    Hallo,

    ich will eine Tabelle aus Word kopieren und in ein Excel-Sheet einfügen. Das kann in eine neue oder schon vorhandene Mappe geschehen.
    Das klappt soweit auch ganz gut, allerdings habe ich folgende Probleme:

    1. Ich weiß nicht, wie man das immer an die erste Position macht, d.h. "dodoku" soll immer das erste Sheet in der Mappe sein
    2. Wenn die Mappe schon existiert und "dodoku" auch, der User aber ein anderes Sheet beim Speichern vorher aktiv hatte, bekomme ich eine Fehlermeldung:

    Eine Ausnahme vom Typ "System.Runtime.InteropServices.COMException" ist in Microsoft.VisualBasic.dll aufgetreten, doch wurde diese im Benutzercode nicht verarbeitet.

    Zusätzliche Informationen: Die Select-Methode des Range-Objektes konnte nicht ausgeführt werden.


    VB.NET-Quellcode

    1. Dim result As Integer = MessageBox.Show("Möchten Sie das Dokument in eine vorhandene Mappe kopieren?", "Export nach Excel", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question)
    2. Dim oExcel As Object
    3. Dim oBook As Object
    4. Dim sheet As Object
    5. Dim bool As Boolean = False
    6. oExcel = CreateObject("Excel.Application")
    7. Globals.ThisDocument.Tables(1).Range.Copy() 'markiert nur die erste Tabelle
    8. 'wenn man nicht abbricht
    9. If Not result = DialogResult.Cancel Then
    10. 'wenn man in eine vorhandene Mappe kopieren möchte
    11. If result = DialogResult.Yes Then
    12. Dim FileOpen As New OpenFileDialog
    13. Dim str As String
    14. With FileOpen
    15. .Filter = "Excel-Dateien |*.xl;*.xlsx;*.xlsm;*.xlsb;*.xlam;*.xltx;*.xltm;*.xls;*.xla;*.xlt;*.xlm;*.xlw|Alle Dateien (*.*)|*.*"
    16. .FilterIndex = 1
    17. .InitialDirectory = "H:\"
    18. .Title = "Excel-Mappe auswählen"
    19. .ShowDialog()
    20. str = .FileName
    21. End With
    22. 'wenn der Pfad nicht leer ist
    23. If Not str = "" Then
    24. oBook = oExcel.Workbooks.open(str)
    25. For Each oSheet As Object In oBook.worksheets
    26. If oSheet.name = "dodoku" Then
    27. bool = True 'wenn es das Sheet "dodoku" schon gibt, soll es nur überschrieben werden
    28. End If
    29. Next
    30. oExcel.Visible = True
    31. If bool = False Then 'wenn es "dodoku" nicht gibt, muss es neu erstellt werden
    32. oBook.worksheets(1).select <------
    33. sheet = oBook.worksheets.add()
    34. sheet.name = "dodoku"
    35. End If
    36. 'Kopiertes einfügen
    37. oBook.worksheets("dodoku").select <------
    38. oBook.Worksheets("dodoku").unprotect()
    39. oBook.Worksheets("dodoku").Range("A2").Select()
    40. oBook.Worksheets("dodoku").Paste()
    41. oBook.Worksheets("dodoku").Range("E1").Value = "dodoku"
    42. oBook.worksheets("dodoku").Columns(1).ColumnWidth = 1
    43. oBook.worksheets("dodoku").Columns(2).ColumnWidth = 22
    44. oBook.worksheets("dodoku").Columns(3).ColumnWidth = 46
    45. oBook.worksheets("dodoku").Columns(4).ColumnWidth = 1
    46. oBook.Worksheets("dodoku").Range("G1").Select()
    47. oBook.worksheets("dodoku").Protect()
    48. End If
    49. 'wenn man in eine neue Mappe einfügen will
    50. ElseIf result = DialogResult.No Then
    51. oBook = oExcel.Workbooks.Add()
    52. oExcel.Visible = True
    53. sheet = oBook.worksheets.add() 'neues Sheet "dodoku" wird erstellt
    54. sheet.name = "dodoku"
    55. 'Kopiertes einfügen
    56. oBook.Worksheets("dodoku").Range("A2").Select()
    57. oBook.Worksheets("dodoku").Paste()
    58. oBook.Worksheets("dodoku").Range("E1").Value = "dodoku"
    59. oBook.worksheets("dodoku").Columns(1).ColumnWidth = 1
    60. oBook.worksheets("dodoku").Columns(2).ColumnWidth = 22
    61. oBook.worksheets("dodoku").Columns(3).ColumnWidth = 46
    62. oBook.worksheets("dodoku").Columns(4).ColumnWidth = 1
    63. oBook.worksheets("dodoku").Protect()
    64. End If
    65. End If


    Wäre toll, wenn jemand eine Lösung für die Probleme wüsste
    Lg, rory :)


    EDIT: Bin selbst auf die zugegebenermaßen einfache Lösung gekommen: s. markierte Stellen, die Zeilen hab ich noch eingefügt ^^
    "Es ist sehr einfach, ein Programm zu schreiben, das innerhalb kürzester Zeit und mit wenig Speicherplatzbedarf ein vorgegebenes Problem NICHT löst." - H.A. Klaeren

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „rory“ ()