VB.NET - Daten an Excel bei geöffneter Datei

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Murdersquad.

    VB.NET - Daten an Excel bei geöffneter Datei

    Hallo da draußen,

    ich wollte zum ersten Mal mittels Visual Basic Daten an Excel übergeben. Das hat auch alles soweit gut funktioniert.

    Doch zu meinem Problem. Ich habe im Excel ein Diagramm, das mit Daten aus einem VB-Projekt versorgt werden soll.

    Excel lasse ich offen, da ich die Aktualisierung des Diagramms sehen möchte, doch dann habe ich logischerweise das Problem, dass ich nur einmal einen Wert eintragen kann, danach ist die Datei bereits geöffnet und somit schreibgeschützt.
    Weiß jemand, wie ich in die geöffnete File schreiben kann? Wenn möglich ohne DDE oder sowas.


    Quellcode

    1. Public Class Form1
    2. Dim Excel As Object, Workbook As Object
    3. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    4. Excel = GetObject(, "Excel.Application")
    5. Workbook = Excel.Workbooks.OpenXML("C:\TEST.xlsx")
    6. Workbook.Sheets(1).Cells(1, 1).Formula = TextBox1.Text
    7. End Sub
    8. End Class

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Murdersquad“ ()

    Gegenfrage: Was spricht dagegen, ohne die geöffnete Datei Excel zu starten, Excel.Visible = True zu schalten, Deine Datei zu laden, die Veränderungen - ggf. mit Zeitverzögerungen - reinzuschreiben und dann dabei zuzuschauen, wie Excel das Diagramm verändert? Mach ich bei mir immer so, da ich dann auch Breakpoints im VB-Code setzen kann und sehe, ab wo mein Code Murks produziert.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    ja, Du hast Recht. Mit GetObject bekommt man auch bereits offene Workbooks. Ist zwar vielleicht (noch) nicht im Sinne des TE, aber wie würde man es ohne den VisualBasic-Namespace und mit Option Strict On richtig machen können?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @VaporiZed:
    Deinen ersten Thread verstehe ich nicht, bzw. stelle ich es mir wahrscheinlich auch anders vor. Ich übergebe zyklisch, ca. alle 10s, eine veränderte Variable in eine Zelle, dies sollte aus meiner Sicht schon bei geöffneter File geschehen.

    @ErfinderDesRades:
    Ich habe vorher noch nie mit der Schnittstelle Excel <> VB gearbeitet. Kannst du mir bitte ein paar mehr Infos geben?
    "Mehr Infos" kann ich nicht geben, allenfalls meine Info wiederholen: In Excel.Workbooks sind alle Workbooks drinne.
    Probierma dies

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs)
    2. Excel = GetObject(, "Excel.Application")
    3. Dim wkbs = Excel.workbooks
    4. MessageBox.Show("Offene Excel-Workbooks: " & wkbs.count)
    5. For i = 1 To wkbs.count
    6. Dim wkb = wkbs(i)
    7. MessageBox.Show(wkb.Name)
    8. Next
    9. End Sub
    Ich danke euch, hier ist des Rätsels Lösung:

    siehe auch: Überprüfen, ob Excel-Datei bereits geöffnet ist. Ansonsten aktivieren.

    Quellcode

    1. Imports Microsoft.Office.Interop.Excel
    2. Imports Microsoft.Office.Interop
    3. Public Class Form1
    4. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    5. Dim ExcelApp As Application
    6. Dim wb As Excel.Workbook
    7. ExcelApp = CType(GetObject(, "Excel.Application"), Application)
    8. For Each w As Workbook In ExcelApp.Workbooks
    9. If w.Name = "TEST.xlsx" Then
    10. wb = w
    11. wb.Activate()
    12. End If
    13. Next
    14. Dim workSheet As Microsoft.Office.Interop.Excel._Worksheet = ExcelApp.ActiveSheet
    15. workSheet.Cells(1, "A") = TextBox1.Text
    16. workSheet.Cells(1, "B") = TextBox2.Text
    17. End Sub
    18. End Class

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Murdersquad“ ()