none
Visual Express und Excel RRS feed

  • Frage

  • Hallo und Servus zusammen,

    ich hab da mal ne Frage, ist es mit der Express Version möglich auf Excel zuzugreifen und zu arbeiten. Mir geht es nur Grundsätzlich darum, da ich in nächster Zeit gerne aus anderen Programmen (VB) in Excel (VBA) zusammentragen.

    Ich danke für jede Antwort und wünsch noch einen schönen Abend

    Grüßle

    Jo

    Mittwoch, 23. Mai 2012 18:08

Antworten

  • Hier mal eine Konsolen-Demo, die zeigt, wie ich es machen würde ohne Select und Activate auf Basis des Codeschnipsels von Ellen:
     
    ' Microsoft.Office.Interop.Excel Reference setzen
    Imports Microsoft.Office.Interop
    
    
    Module Module1
    
      Sub Main()
        Load_Excel_Details("c:\temp\x.xlsx")
        Console.ReadKey()
      End Sub
    
      '
      ' Excel Export:
      '
      Private Sub Load_Excel_Details(ByVal fullPath As String)
        '
        Dim ds As DataSet = GetData()
        '
        Dim col, row As Integer
        'Dimensionen der Tabelle
        Dim lenRow As Integer = ds.Tables(0).Rows.Count
        Dim lenCol As Integer = ds.Tables(0).Columns.Count
        'überprüfen, ob das object 'Excel' existiert
        Dim obj = CreateObject("Excel.Application")
        If obj Is Nothing Then
          MsgBox("Excel nicht installiert.", MsgBoxStyle.Critical)
          Exit Sub
        End If
        Dim exlApp As Excel.Application = CType(obj, Excel.Application)
        'Export dataset1 tables(0) to Excel process
        Try
          With exlApp
            .SheetsInNewWorkbook = 1
            Dim exlWb As Excel.Workbook = .Workbooks.Add()
            Dim exlSh As Excel.Worksheet = CType(exlWb.Worksheets(1), Excel.Worksheet)
            With exlSh
              'column header lesen
              For col = 0 To ds.Tables(0).Columns.Count - 1
                Dim exlRng As Excel.Range = CType(.Cells(1, col + 1), Excel.Range)
                exlRng.Value = ds.Tables(0).Columns(col).ColumnName
                exlRng.EntireRow.Font.Bold = True
              Next
              'alle rows lesen
              Dim k As Integer = 1
              For col = 0 To ds.Tables(0).Columns.Count - 1
                For row = 0 To ds.Tables(0).Rows.Count - 1
                  Dim exlRng As Excel.Range = CType(.Cells(row + 2, col + 1), Excel.Range)
                  exlRng.Value = ds.Tables(0).Rows(row).ItemArray(col)
                Next
              Next
            End With
            'speichern
            exlWb.SaveAs(fullPath)
            exlWb.Saved = True
            exlWb.Close()
          End With
          ' Excel schließen
          exlApp.Quit()
        Catch ex As Exception
          MsgBox("Excel Export: " & ex.Message)
        End Try
      End Sub
    
      Private Function GetData() As DataSet
        Dim ds As New DataSet
        With ds.Tables.Add()
          With ..Columns
            .Add("Spalte1", GetType(String))
            .Add("Spalte2", GetType(String))
          End With
          For i = 1 To 10
            Dim r = .NewRow
            r(0) = "Zeile " & i.ToString & ", Spalte 0"
            r(1) = "Zeile " & i.ToString & ", Spalte 1"
            .Rows.Add(r)
          Next
        End With
        Return ds
      End Function
    
    End Module
    

    --
    Viele Gruesse
    Peter

    Mittwoch, 11. Juli 2012 16:53

Alle Antworten

  • Hallo Jo,

    was verstehst Du unter ' auf Excel zugeifen ' ?

    - XLS in VB schreiben und lesen

    - Excel  Addins erstellen

    Hier ein screenhot von VST2008 proffessionel. Mit der Express Version müsste das auch gehen. Ich weis aber nicht genau, wo man diese

    Templates (Projektvorlagen)  herunterladen kann. Express kann auch mit Templates arbeiten.

    Gruss Ellen


    Ich benutze/ I'm using VB2008 & VB2010


    Dienstag, 29. Mai 2012 06:29
  • Hi Ellen,

    ich möchte von einem Buchhaltungsprogramm, das mit VB arbeiten kann die Daten an Excel schicken (später will ich das dann über eine Datenbank machen). Ich  würde gerne die Datensätze an Excel schicken und dort in Tabellen verteilen.

    Das was ich im Netz gefunden habe verwirrt mich mehr, als das es mir geholfen hat. Denn die Aussagen sind von mit VB Express ist es möglich mit Excel zu interagieren bis das es eben nur mit der Professional Version möglich ist.

    Deswegen wollt ich mal Fragen wie es ist um mich insoweit etwas schlauer zu machen.

    Gruß Jo

    Dienstag, 29. Mai 2012 14:34
  • Hi Jo,

    da gibt es die Möglichkeit mit Excel.Interop zu arbeiten.

    Ich habe in einem Projekt eine sehr einfache Lösung gefunden. Da muss man sich nicht in diesen namespace einarbeiten. Und zwar:

    • Daten stehen in einer DataTable
    • diese in eine .XML temporär schreiben
    • anschliessend Excel aufrufen

    Hier der code:

       ''' <summary>
        ''' export nach Excel
        ''' </summary>
        ''' <remarks></remarks>
        Private Sub btnExport_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExport.Click
            Dim FileName As String = Me.workingpath & "\tmp.xml"
            Me._dtView.WriteXml(FileName, XmlWriteMode.IgnoreSchema)
            Process.Start("Excel.exe", """" & FileName & """")
        End Sub

    Vielleicht sagt Dir diese Lösung zu. Sonst hätte ich, muss ich mal suchen, eine Lösung mit Excel.Interop

    Gruss Ellen

    Nachtrag. workingPath bekommst Du so

    Dim workingPath as String = My.Application.Info.DirectoryPath


    Ich benutze/ I'm using VB2008 & VB2010


    Dienstag, 29. Mai 2012 15:49
  • Hi Ellen,

    vielen Dank für den Code und deine Mühe, ich werde das morgen mal ausprobieren. Ich bin leider erst ein blutiger Anfänger, doch ich werde das ausprobieren,  wäre ja echt genial wenn es so klappen würde. Nochmal Danke und ich geb dir morgen ne Rückmeldung

    Grüßle Jo

    Dienstag, 29. Mai 2012 19:32
  • Guten Morgen Ellen,

    ich hab es leider noch nicht geschafft den Code zu probieren, werd dir aber dann bescheid geben. Danke nochmal und schönen Tag Dir

    Gruß Jo

    Donnerstag, 31. Mai 2012 05:52
  • Hallo Ellen,

    ich bin gerade dabei deinen Code zu testen. Ich hätte da noch eine Frage, wenn ich bei dem GridView das WriteXml anhängen will erkennt er das nicht. Muss ich da noch irgendwelche Verweise laden ???

    Gruß Jo


    Sonntag, 3. Juni 2012 10:18
  • Hallo Ellen,

    ich bin gerade dabei deinen Code zu testen. Ich hätte da noch eine Frage, wenn ich bei dem GridView das WriteXml anhängen will erkennt er das nicht. Muss ich da noch irgendwelche Verweise laden ???

    Gruß Jo


    Hallo Jo,

    nein das geht nicht. Die .WriteXml Methode ist kein member von DataGridView. Das _dtView in meinem code ist eine DataTable, welche an das DataGridView gebunden ist. Besteht die Möglichkeit mit einer Datatable zu arbeiten?

    Gruss Ellen


    Ich benutze/ I'm using VB2008 & VB2010

    Sonntag, 3. Juni 2012 11:42
  • Hi Ellen,

    ein Datatable ist doch eine Tabelle ? Oder ist Das eher wie eine Datenbank ? Ich sollte das Programm über eine Schnittstelle (IEZBook) ansprechen können was ich gerade versuche.

    Ich denke das hilft dir wohl nicht viel weiter, doch grad kann ich leider nichts anderes sagen, sorry

    Gruß Jo 

    Sonntag, 3. Juni 2012 14:21
  • Hi Jo,

    eine Datatable ist generell sehr gut geignet zum Speichern und Bearbeiten von Daten in Tabellenform: DataTable System.Data Jedes andere Speicher Objekt würde ich deshalb nicht verwenden.

    Hier ist ein Code Auszug wie man eine DataTable an ein DataGridView binden kann. Binden heist, mit einer Anweisung werden alle rows und colums inklusive der Column Header in dem Steuerelement dargestellt. Da brauchst Du kein aufwendiges Kopieren einzelner Zellen mehr. Vielleicht musst Du Dein Konzept überarbeiten?

    Gruss Ellen

       ''' <summary>
        ''' set datatable
        ''' </summary>
        ''' <value>datatable reference value</value>
        ''' <remarks></remarks>
        Public WriteOnly Property dTable() As DataTable
            Set(ByVal value As DataTable)
                If value Is Nothing Then Exit Property
                Me.DataGridView1.RowTemplate.Height = 18
                Dim dataSource As New BindingSource(value, Nothing)
                Me._dtView = value
                Me.DataGridView1.DataSource = dataSource
            End Set
        End Property


    Ich benutze/ I'm using VB2008 & VB2010

    Sonntag, 3. Juni 2012 14:58
  • Hi Ellen,

    danke, ja das mit dem Konzept muss ich wirklich überarbeiten, muss noch einiges lernen ;). Ich glaube ich sollte erstmal einen  Austausch von Daten zwischen Excel und einer Windows-Form-Anwendung hinbekommen. Werde mich mal mit deinem Tipp von Excel.Interop beschäftigen.

    Gruß Jo

    Sonntag, 3. Juni 2012 15:47
  • Hi Jo,

    dann poste ich ir einen code für Excel Interop. Hier liegt auch eine Datentabelle zugrunde (DataSet1.Tables(0)). Du kommst an dem Thema DataTable einfach nicht vorbei. Ich hoffe ich konnte Dir damit helfen

    schöne Grüsse Ellen

        '
        ' Excel Export:
        '
        Private Sub Load_Excel_Details(ByVal filename As String, ByVal fullPath As String)
            Dim col, row As Integer
            'Dimensionen der Tabelle
            Dim lenRow As Integer = frmMain.DataSet1.Tables(0).Rows.Count
            Dim lenCol As Integer = frmMain.DataSet1.Tables(0).Columns.Count
            Me.ProgressBar1.Visible = True
            'überprüfen, ob das object 'Excel' existiert 
            Dim Excel As Object = CreateObject("Excel.Application")
            If Excel Is Nothing Then
                MsgBox("Excel nicht installiert.", MsgBoxStyle.Critical)
                Exit Sub
            End If
            'Export dataset1 tables(0) to Excel process
            Try
                With Excel
                    .SheetsInNewWorkbook = 1
                    .Workbooks.Add()
                    .Worksheets(1).Select()
                    'column header lesen
                    Dim total As Integer = 0
                    Dim i As Integer = 1
                    For col = 0 To frmMain.DataSet1.Tables(0).Columns.Count - 1
                        .cells(1, i).value = frmMain.DataSet1.Tables(0).Columns(col).ColumnName
                        .cells(1, i).EntireRow.Font.Bold = True
                        i += 1
                    Next
                    i = 2
                    'alle rows lesen
                    Dim k As Integer = 1
                    For col = 0 To frmMain.DataSet1.Tables(0).Columns.Count - 1
                        i = 2
                        For row = 0 To frmMain.DataSet1.Tables(0).Rows.Count - 1
                            .Cells(i, k).Value = frmMain.DataSet1.Tables(0).Rows(row).ItemArray(col)
                            i += 1
                            total += 1
                            Me.ProgressBar1.Value = (total * 100) / (lenCol * lenRow)
                        Next
                        k += 1
                    Next
                    'speichern
                    .ActiveCell.Worksheet.SaveAs(fullPath)
                End With
                'com object wieder löschen
                System.Runtime.InteropServices.Marshal.ReleaseComObject(Excel)
                Excel = Nothing
                Me.CheckBox2.Text = filename & " geschrieben"
                Me.btnExcel.Enabled = True
                'Schreib- und Lesezugriff
                File.SetAttributes(fullPath, FileAttributes.Normal)
            Catch ex As Exception
                MsgBox("Excel Export: " & ex.Message)
            End Try
        End Sub

     


    Ich benutze/ I'm using VB2008 & VB2010

    Sonntag, 3. Juni 2012 16:08
  • Vielen Dank und Ja Du hast mir sehr geholfen und auch tausend Dank für deine Geduld. Meine Hoffmung ist ja das die DataTable und ich noch Freunde werden, man darf nie aufhören die Hoffnung zu verlieren *gg

    Ich werde mich jetzt mit dem Code anfreunden und eine WinForm entsprechend anpassen

    Ganz liebe Grüße

    Jo

    Sonntag, 3. Juni 2012 16:15
  • Vielen Dank und Ja Du hast mir sehr geholfen und auch tausend Dank für deine Geduld. Meine Hoffmung ist ja das die DataTable und ich noch Freunde werden, man darf nie aufhören die Hoffnung zu verlieren *gg

    Ich werde mich jetzt mit dem Code anfreunden und eine WinForm entsprechend anpassen

    Ganz liebe Grüße

    Jo

    Ich habe auch ein paar Wochen benötigt, um mit der DataTable warm zu werden. Die ganz schön mächtig und hat viele interessante Möglichkeiten. Dann arbeitest Du garantiert nicht mehr mit arrays

    schöne Grüsse Ellen

    P.S. Hat mich gefreut mit Dir. Netter Kontakt. Gerne wieder


    Ich benutze/ I'm using VB2008 & VB2010


    Sonntag, 3. Juni 2012 16:19
  • Ich werde bestimmt die eine oder andere Wochen brauchen bis des mit dem DataTable klappt.

    Du hast mir sehr geholfen und es hat mich sehr gefreut mit Dir zu schreiben und so tolle Hilfe bekommen zu haben. Das klingt ja wirklich gut,  denn Fragen werde ich bestimmt bald wieder haben.

    Liebe Grüße und einen schönen Abend

    Jo

    Sonntag, 3. Juni 2012 16:45
  • Hallo Ellen,
    eine DataTable ist wegen der nicht typsicheren Arbeitsweise nicht unbedingt die beste Lösung. In Deinem Beispiel reicht die Ausgabe der Objekte des ItemArray einer DataRow in die Excel-Zellen. Sobald es aber etwas komplexer wird, sollte man sich mit typsicheren Arbeitsweisen anfreunden, z.B. mit typisierten DataSets oder auch generischen Listen.
     
    In Deinem Code gefallen mir mehrere Dinge nicht:
     
    Die Select-Methode erfordert eine grafische Darstellung und das kann zu Störungen durch den Anwender führen. Besser ist es durchgängig auf Select und Activate zu verzichten und nur Range-Objekte zu nutzen.
     
    ReleaseComObject ist nicht nötig, wenn man die Mappe (Workbook) schließt (Close), das Excel-Objekt mit Quit schließt und die Variable auf Nothing setzt.
     
    --
    Viele Gruesse
    Peter
    Sonntag, 3. Juni 2012 16:54
  • Sorry eine Frage hätte ich noch,

    frmMain is doch der Name für die WinForm , btnExcel denke ich ist ein Button und dem File gebe ich den Pfad ?

    Gruß Jo

    Sonntag, 3. Juni 2012 17:29
  • Sorry eine Frage hätte ich noch,

    frmMain is doch der Name für die WinForm , btnExcel denke ich ist ein Button und dem File gebe ich den Pfad ?

    Gruß Jo

    Hi Jo,

    frmMain ist eine andere Klasse auf deren member ich zugreife, weil das DataSet1 nicht member der eigenen Klasse ist. Diese ist dort als public deklariert. Du kannst das Dataset oder DataTable in der eigenen Klasse deklarieren. Dann lautet der code für den Zugriff Me.Dataset1.Tables(0) ....

    Gruss Ellen

     


    Ich benutze/ I'm using VB2008 & VB2010

    Sonntag, 3. Juni 2012 17:36
  • Hallo Ellen,
    In Deinem Code gefallen mir mehrere Dinge nicht:
    Die Select-Methode erfordert eine grafische Darstellung und das kann zu Störungen durch den Anwender führen. Besser ist es durchgängig auf Select und Activate zu verzichten und nur Range-Objekte zu nutzen.
    ReleaseComObject ist nicht nötig, wenn man die Mappe (Workbook) schließt (Close), das Excel-Objekt mit Quit schließt und die Variable auf Nothing setzt.
    --
    Viele Gruesse
    Peter

    Hallo Peter,

    vielen Dank für Deinen Beitrag. OK. Ich werde das einarbeiten, denn morgen geht die Software Verteilung los.

    Vielen Dank und Gruss Ellen


    Ich benutze/ I'm using VB2008 & VB2010

    Sonntag, 3. Juni 2012 17:42
  • Juhu Ellen,

    ich bins mal wieder. Ich hab da ne Frage wegen dem Excel Export, Also ich hab eine DataSet erstellt und des ganze hat auch schon funktioniert das die Daten aus dem Dataset an Excel exportiert werden. Doch wenn ich dann nochmal Datensätze exportieren will kommt immer:

    Excel Export: Zugiff auf 'Excel.xlsx' verweigert

    Doch den Pfad den ich angegeben habe ist

    Load_Excel_Details("Mappe1.xlsx", "D:\ExcelDaten")

    Mach ich da wieder was falsch ???

    Ich schick dir liebe Grüße

    Jo

    Montag, 4. Juni 2012 13:41
  • Juhu Ellen,

    ich bins mal wieder. Ich hab da ne Frage wegen dem Excel Export, Also ich hab eine DataSet erstellt und des ganze hat auch schon funktioniert das die Daten aus dem Dataset an Excel exportiert werden. Doch wenn ich dann nochmal Datensätze exportieren will kommt immer:

    Excel Export: Zugiff auf 'Excel.xlsx' verweigert

    Doch den Pfad den ich angegeben habe ist

    Load_Excel_Details("Mappe1.xlsx", "D:\ExcelDaten")

    Mach ich da wieder was falsch ???

    Ich schick dir liebe Grüße

    Jo

    Hallo Jo

    versuche es mal mit .XLS. Mit diesem Typ habe meinen code getestet.

    Gruss Ellen

    Mir ist noch etwas eingefallen

    ein gültiger Pfad & filename wäre D:\ExcelDaten\Mappe1.xlsx

    Überprüfe das bitte noch einmal. Ich werde das auch noch einmal checken. Geht aber erst morgen früh

    Nachtrag2.

    Hallo Jo hab in meinen code geschaut. fullpath ist der vollständige Pfad + Dateiname. Und das geht so:

      Private Sub btnStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStart.Click
            Dim dateNow As String = String.Format("{0:yyyy-MM-dd-hh-mm-ss}", DateTime.Now)
            newFileXLS = "ecos_" & dateNow & ".XLS"
            filepathXLS = Path.Combine(frmMain.fullpath, newFileXLS)
            ' Excel ausgewählt
            If CheckBox2.Checked Then
                Load_Excel_Details(newFileXLS, filepathXLS)
            End If
        End Sub
    Übrigens generiere ich automatisch einen Filenamen aus dem aktuellen Datum. Das kannst Du bestimmt auch gebrauchen


    Ich benutze/ I'm using VB2008 & VB2010



    Montag, 4. Juni 2012 14:23
  • Hallo Ellen,

    kann es sein sein das wenn man die Daten einmal exportiert hat, der Schreibschutz ein weiteres speichern verhindert? denn Ich wollt grad mir die Datei anschauen und dann kam eben das sie Schreibgeschützt ist und dann kann ich eben nur eine kopie speichern.

    Mach dir keinen Stress wegen mir, das Problem läuft mir ja nich weg *grins
    um gleich noch die Stimmung zu heben, kann ich eigentlich den selben Weg gehen um Daten aus Excel in das DataSet zu laden ???

    Ich wünsch Dir einen schönene Abend

    Lieben Gruß

    Jo

    Montag, 4. Juni 2012 15:44
  • Hallo Ellen,

    kann es sein sein das wenn man die Daten einmal exportiert hat, der Schreibschutz ein weiteres speichern verhindert? denn Ich wollt grad mir die Datei anschauen und dann kam eben das sie Schreibgeschützt ist und dann kann ich eben nur eine kopie speichern.

    Mach dir keinen Stress wegen mir, das Problem läuft mir ja nich weg *grins
    um gleich noch die Stimmung zu heben, kann ich eigentlich den selben Weg gehen um Daten aus Excel in das DataSet zu laden ???

    Ich wünsch Dir einen schönene Abend

    Lieben Gruß

    Jo

    Hallo Jo,

    Ja das ist so. Das file ist schreibgeschützt. Das Problem habe ich auch. Weis nicht wie das weggeht.

    Aber schön. Jetzt hast Du die Daten erst einmal in Excel.

    Umgekehrt geht das auch. Must du mal im US Forum suchen mit 'read Excel file' oder ähnlich. Da gibt es jede Menge Lösungen. Diesen code habe ich auch daher.

    schöne Grüsse Ellen


    Ich benutze/ I'm using VB2008 & VB2010

    Montag, 4. Juni 2012 16:08
  • Hallo Ellen,

    ja find ich sehr gut :D, jetzt muss ich nur die Verbindung noch zu dem anderen Programm noch aufbauen, da steig ich noch nich wirklich durch abba des wird auch noch.Ein Schritt nach dem anderen ;)

    Danke für den Tipp da werd ich mich mal dort umsehen.

    Vielen Dank

    Liebe Grüße

    Jo

    Montag, 4. Juni 2012 16:18
  • Hi Jo,

    also hier: http://social.msdn.microsoft.com/Search/en-US/?Refinement=112&query=read%20Excel%20XLS

    Ich bin häufig im US Forum. Da gibt es sehr viele Lösungen. Das deutsche Forum ist eher bescheiden.

    Wenn Du Fragen hast dann mache einfach einen neue Frage auf. Wir haben hier eine Flatrate.

    Würde mich wieder freuen und schöne Grüsse Ellen


    Ich benutze/ I'm using VB2008 & VB2010

    Montag, 4. Juni 2012 16:23
  • Danke, werde ich bestimmt machen,

    denn irgendwie tue sich immer mehr Fragen auf *grins

    liebe Grüße Jo

    Montag, 4. Juni 2012 17:47
  • Hallo Peter,

    ich weiß der Beitrag is schon ein paar Tage alt, doch vielleicht siehst du den Beitrag noch.
    Ich kann deine Vorschläge leider nicht ganz nachvollziehen, hättest du mir vielleicht einen Code.

    würde mich sehr freuen,

    Ich wünsche Dir einen schönen Abend

    Gruß Jo

    Mittwoch, 20. Juni 2012 16:27
  • Hier mal eine Konsolen-Demo, die zeigt, wie ich es machen würde ohne Select und Activate auf Basis des Codeschnipsels von Ellen:
     
    ' Microsoft.Office.Interop.Excel Reference setzen
    Imports Microsoft.Office.Interop
    
    
    Module Module1
    
      Sub Main()
        Load_Excel_Details("c:\temp\x.xlsx")
        Console.ReadKey()
      End Sub
    
      '
      ' Excel Export:
      '
      Private Sub Load_Excel_Details(ByVal fullPath As String)
        '
        Dim ds As DataSet = GetData()
        '
        Dim col, row As Integer
        'Dimensionen der Tabelle
        Dim lenRow As Integer = ds.Tables(0).Rows.Count
        Dim lenCol As Integer = ds.Tables(0).Columns.Count
        'überprüfen, ob das object 'Excel' existiert
        Dim obj = CreateObject("Excel.Application")
        If obj Is Nothing Then
          MsgBox("Excel nicht installiert.", MsgBoxStyle.Critical)
          Exit Sub
        End If
        Dim exlApp As Excel.Application = CType(obj, Excel.Application)
        'Export dataset1 tables(0) to Excel process
        Try
          With exlApp
            .SheetsInNewWorkbook = 1
            Dim exlWb As Excel.Workbook = .Workbooks.Add()
            Dim exlSh As Excel.Worksheet = CType(exlWb.Worksheets(1), Excel.Worksheet)
            With exlSh
              'column header lesen
              For col = 0 To ds.Tables(0).Columns.Count - 1
                Dim exlRng As Excel.Range = CType(.Cells(1, col + 1), Excel.Range)
                exlRng.Value = ds.Tables(0).Columns(col).ColumnName
                exlRng.EntireRow.Font.Bold = True
              Next
              'alle rows lesen
              Dim k As Integer = 1
              For col = 0 To ds.Tables(0).Columns.Count - 1
                For row = 0 To ds.Tables(0).Rows.Count - 1
                  Dim exlRng As Excel.Range = CType(.Cells(row + 2, col + 1), Excel.Range)
                  exlRng.Value = ds.Tables(0).Rows(row).ItemArray(col)
                Next
              Next
            End With
            'speichern
            exlWb.SaveAs(fullPath)
            exlWb.Saved = True
            exlWb.Close()
          End With
          ' Excel schließen
          exlApp.Quit()
        Catch ex As Exception
          MsgBox("Excel Export: " & ex.Message)
        End Try
      End Sub
    
      Private Function GetData() As DataSet
        Dim ds As New DataSet
        With ds.Tables.Add()
          With ..Columns
            .Add("Spalte1", GetType(String))
            .Add("Spalte2", GetType(String))
          End With
          For i = 1 To 10
            Dim r = .NewRow
            r(0) = "Zeile " & i.ToString & ", Spalte 0"
            r(1) = "Zeile " & i.ToString & ", Spalte 1"
            .Rows.Add(r)
          Next
        End With
        Return ds
      End Function
    
    End Module
    

    --
    Viele Gruesse
    Peter

    Mittwoch, 11. Juli 2012 16:53
  • Hallo Peter,

    Danke, ich werde Deinen code testen. Habe im Moment ziemlich viel zu tun.

    schöne Grüsse Ellen


    Ich benutze/ I'm using VB2008 & VB2010

    Mittwoch, 11. Juli 2012 18:41
  • Hallo Peter,

    Dein code läuft. Habe gerade getestet.

    Leider kann ich Deine Antwort nicht markieren. Ich bin ja nicht der Fragende.

    #+

    Gruss Ellen


    Ich benutze/ I'm using VB2008 & VB2010

    Donnerstag, 12. Juli 2012 07:58
  • Hallo Ellen.
    die Frage betraf ja auch den Jo Phyro79 (eigenartig, welche Namen heute die Elter ihren Kindern verpassen : –).
     
    In Deinem Codebesipiel vom 3.6. fehlt das Option Strict On. Dein Beispiel arbeitet mit später Bindung. Am besten ist es, gleich im Studio Option Strict On als Standard einzustellen. Man erspart sich u.U. zur Laufzeit (beim Anwender) viel Ärger.
     
    Bei der Arbeit mit der Objektautomatisierung von Excel, Word usw. sollte man lieber auf die Nutzung der Oberfläche (Select, Activate) verzichten. Da kann der Anwender schnell mal dazwischen gehen und das Programm erzeugt u.U. unsinnige Ergebnisse incl. nicht reproduzierbare Abstürze.
     
    --
    Viele Gruesse
    Peter
    Donnerstag, 12. Juli 2012 13:00
  • Hallo Ellen.
    die Frage betraf ja auch den Jo Phyro79 (eigenartig, welche Namen heute die Elter ihren Kindern verpassen : –).
    In Deinem Codebesipiel vom 3.6. fehlt das Option Strict On. Dein Beispiel arbeitet mit später Bindung. Am besten ist es, gleich im Studio Option Strict On als Standard einzustellen. Man erspart sich u.U. zur Laufzeit (beim Anwender) viel Ärger.
    Bei der Arbeit mit der Objektautomatisierung von Excel, Word usw. sollte man lieber auf die Nutzung der Oberfläche (Select, Activate) verzichten. Da kann der Anwender schnell mal dazwischen gehen und das Programm erzeugt u.U. unsinnige Ergebnisse incl. nicht reproduzierbare Abstürze.
    --
    Viele Gruesse
    Peter

    Hallo Peter,

    Ja genau. Das mit dem fehlenden Option strict ON war noch genau das Problem was ich hatte und dann dieses noch:

    Excel als Bezeichner verwenden und dann noch als namespace.

    Ja, so ist das, wenn man einfach code kopiert. Da kann man sich schnell einige Fehler aneignen wenn man nicht kritisch hinschaut.

    Mit Excel Interop habe ich noch nicht viel gemacht. Das ist auch wieder eine Welt für sich.

    Danke und Gruss Ellen


    Ich benutze/ I'm using VB2008 & VB2010

    Donnerstag, 12. Juli 2012 13:09
  • Hallo Peter,

    vielen Dank für die Hilfe, mit der konsole klappt es super. Werde mir das noch alles auf mein Fall umschreiben. Leider habe ich grad noch ein anderes Problem (da werde ich glaub auch hilfe gebrauchen), da kommt der Code zur rechten Zeit, als Aufmunterung. ;)

    Ja das mit Phyro is so ne Sache, meine Eltern sind sehr krativ *lach*. Ich wußte nich das man sich mit seinem richtigen Namen anmeldet, doch hab es jetzt geändert

    Ich wünsche Dir einen schönen abend und nochmal vielen Dank

    Grüßle

    Jo

    Freitag, 13. Juli 2012 18:44
  • Hi Joachim,
    toll; ich empfinde es als höflich, wenn sich mein Kommunikationspartner mit einem Realnamen vorstellt. Ich sehe keinen Unterschied in einer Kommunikation von Angesicht zu Angesicht oder über ein anderes Medium. Wer denkt, dass das Internet anonym ist, der kann sich ja genau wie im realen Leben einen Künstlernamen zulegen.
     
    --
    Viele Gruesse
    Peter
    Samstag, 14. Juli 2012 09:36
  • Hallo Peter,

    ja da gebe ich Dir wirklich recht, deswegen habe ich es auch gleich geändert.

    Und ich danke Dir nochmals für deine beiden Hilfen

     

    Grüßle

    Jo

    Samstag, 14. Juli 2012 11:04