vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Brandneu! sevEingabe v3.0 - Das Eingabecontrol der Superlative!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Daten aus VB.NET-Anwendung an Excel übergeben und formatieren 
Autor: Vaubehnet
Datum: 13.03.17 10:39

Hallo zusammen!

Bei der Formatierung von Excel-Zellen und Spalten hoffe ich auf Eure Hilfe:

Programme:
Visual Studio 13 Professional
Microsoft Excel Prof. 2010 (= Version 14)

Stand (klappt - o.k.):
- Ansteuern und Öffnen einer Excel-Datei
- Übergabe von Werten
- einige Formatierungen
- Wechsel von Registerreitern
- Schließen der Datei

Fragen:
- "Option Explicit On" geht, aber "Option Strict On" wirft Fehler: "late binding" nicht möglich - Lösung?.
- Wie verwende ich Formatierungen, die in EXCEL-VBA Konstanten verwenden ("xlNone" etc.)?

Vielen Dank für Eure Hilfe!

Vaubehnet

Option Explicit On
'Option Strict On '<- kann nicht verwendet werden, da 'Spätes Binden' nicht _
  zugelassen? - Lösung?
 
'Test von Formatierungen für EXCEL aus einer VB.NET-Anwendung heraus
 
'Verweis einbinden je nach Excel-Version
'Menü: Projekt-Verweis hinzufügen; 
' Assemblys-Erweiterungen-Microsoft.Office.Interop.Excel 14.0.0.0 oder 15.0.0.0
 
Imports Microsoft.Office.Interop
 
Public Class frmExcelTest
 
    Private Sub btnExceltest_Click(sender As Object, e As EventArgs) Handles _
      btnExceltest.Click
        '-----------------------------------------
        'Testcode: 
        '- Ansteuern einer bestehenden Excel-Datei
        '- Übergeben von Werten
        '- Formatieren von Zellen
 
        'Variablen
        'Pfad und Name der Excel-Datei
        'Die Beispieldatei ist leer und hat die üblichen drei Register:
        ' 'Tabelle1', 'Tabelle2' und 'Tabelle3'
        Dim strFilename As String = "i:\Exceltest.xlsx"
 
        'Variablen für Excel
        Dim app As New Excel.Application
        Dim workbooks As Excel.Workbooks = app.Workbooks
        Dim workbook As Excel.Workbook = workbooks.Add()
 
        'Variablen für den Test
        Dim strText As String = "String für Excel"
        Dim intNummer As Integer = 5000
        Dim dblBetrag As Double = 123.45
        Dim datDate As Date = "25.01.2022"
 
        'Prüfen, ob Datei existiert.
        If System.IO.File.Exists(strFilename) = False Then
            MsgBox("Die Datei: " + vbCrLf + strFilename + "existiert nicht!", _
              CType(vbOK, MsgBoxStyle), "Fehler")
            Exit Sub
        End If
 
        app = CType(CreateObject("Excel.Application"), Excel.Application)
 
        With app
            'Datei öffnen manipulieren
            workbook = .Workbooks.Open(strFilename)
 
            'Excel-Blatt auswählen
            workbook.Sheets("Tabelle1").activate()
 
            'Werte schreiben
            With workbook.Sheets("Tabelle1")
 
                'Einen Bereich mit Leerstring überschreiben
                .range("A1:C20") = ""
 
                'Einen Bereich löschen
                .range("A1:C20").delete()
 
                'String
                .range("A1").value = strText
 
                'Integer
                .range("A2").value = CInt(intNummer)
 
                'Double
                .range("A3").value = CDbl(dblBetrag)
 
                'Datum
                .range("A4").value = CDate(datDate)
 
                'fett
                .range("A5").value = "Das wird fett"
                .range("A5").font.bold = True
 
                'kursiv
                .range("A6").value = "Das wird kursiv"
                .range("A6").font.italic = True
 
                'Farbe
                .range("A7").value = "Die Zelle wird grau"
                .range("A7").interior.color = RGB(204, 204, 204)
 
                'selektieren
                .range("A1:C20").select()
 
                '-----------------------------
                'Fragen zu Zelle und Inhalt:
 
                'Eine Zelle/einen Bereich mit einfachem Rahmen versehen?
                'Eine Zelle/einen Bereich doppelt unterstreichen?
                'Alle Formatierungen zurücknehmen (xlnone)
                'Schriftgröße und Schriftart zuweisen
                'Zellformat und Formatierung zuweisen (1.000er Punkte, 2 
                ' Nachkommast., rechts
                'Einer Zelle ein Datumsformat zuweisen
                'Nicht einer Zelle, sondern einem Text eine Farbe zuweisen
 
            End With
 
            'Spalten automatisch in der Breite anpassen
            app.Columns.AutoFit()
 
            '-------------------------------------------------------
            'Fragen zu Reihen, Spalten und Register sowie Dateiname:
 
            'Spalten eine feste Breite zuweisen
            'Reihen eine feste Höhe zuweisen
            'Einen Registerreiter umbenennen
            'Einem Registerreiter eine Farbe zuweisen
            'Spaltenüberschriften (A, B, C, ...) ausblenden / einblenden
            'Linien ausblenden/einblenden
            'Excel-Datei drucken
            'Excel-Datei unter einem anderen Namen speichern
 
            workbooks.Close() 
            .Quit()
        End With
    End Sub
End Class

---
Verwendete Programmversionen:
Windows 7 64 bit sowie Windows 10 Prof.
Visual Studio 13 Professional
Microsoft Prof. 2010 (= Version 14)

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Daten aus VB.NET-Anwendung an Excel übergeben und formatieren 
Autor: CAM-Andi
Datum: 13.03.17 12:50

Hallo Vaubehnet

Zitat:

- "Option Explicit On" geht, aber "Option Strict On" wirft Fehler: "late binding" nicht möglich - Lösung?.


Du musst darauf achten, welchen Typ deine Methoden erwarten und dementsprechend zuerst ein Objekt des jeweiligen Typs definieren. Wo genau meckert er bzgl. late binding nicht möglich? Vielleicht kann ich dir ein konkretes Beispiel nennen.

Grüße Andi

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Daten aus VB.NET-Anwendung an Excel übergeben und formatieren 
Autor: Vaubehnet
Datum: 13.03.17 12:57

Hallo Andi,

mit "Option Strict on" erhalte ich Fehler hier:

'Fehlerhafte Zeile (logisch, da String), kann ich korrigieren:
Dim datDate As Date = "25.01.2022"
 
'korrigiert: 
Dim datDate As Date = CDate("25.01.2022")
Und z.B. hier:
'Fehler mit Option strict on
'Bestimmtes Excel-Blatt auswählen
workbook.Sheets("Tabelle1").activate()
und überall, wo ich .range nutze, z.B. hier:
'Fehler mit Option strict on
'Integer übergeben
.range("A2").value = CInt(intNummer)
Viele Grüße

Vaubehnet

---
Verwendete Programmversionen:
Windows 7 64 bit sowie Windows 10 Prof.
Visual Studio 13 Professional
Microsoft Prof. 2010 (= Version 14)

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Daten aus VB.NET-Anwendung an Excel übergeben und formatieren 
Autor: CAM-Andi
Datum: 13.03.17 14:33

Probier mal so:

Zitat:

Dim datDate As Date = "25.01.2022"

Du kannst auch:
Dim d As Date = Date.Parse("02.03.2017")
Zitat:

workbook.Sheets("Tabelle1").activate()

Dim xlWorkSheet As Excel.Worksheet = CType(xlWorkBook.Sheets("Tabelle1"), _
  Excel.Worksheet)
xlWorkSheet.Activate()
Zitat:

.range("A2").value = CInt(intNummer)

Dim xlRange As Excel.Range = xlWorkSheet.Range("A2")
xlRange.Value = CInt(intNummer)

Grüße Andi

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Daten aus VB.NET-Anwendung an Excel übergeben und formatieren 
Autor: Vaubehnet
Datum: 14.03.17 07:40

Hallo Andi,

schon mal vielen Dank! Ich habe gestern den Code überarbeitet. Option strict on funktioniert jetzt - super - aber die Daten werden nicht in die Tabelle geschrieben, die ich geplant hatte.
Ich öffne also die geplante Datei, schreibe aber in die falsche... Denkfehler...
Private Sub btnExcel2_Click(sender As Object, e As EventArgs) Handles _
  btnExcel2.Click
        'Beispielcode
        'Option Explicit ist on
        'Option strict ist on und funktioniert
        '>>> Fehler: Daten werden nicht in der richtigen Excel-Datei gespeichert
 
        Dim strFilename As String = "i:\Exceltest.xlsx"
 
        'Variablen für Excel-Ansteuerung
        Dim xlApp As New Excel.Application
 
        Dim xlWorkbooks As Excel.Workbooks = xlApp.Workbooks
        Dim xlWorkbook As Excel.Workbook = xlWorkbooks.Add()
 
        'Drei Variablen
        Dim intNummer As Integer = 5000
        Dim dblBetrag As Double = 123.45
        Dim datDate As Date = Date.Parse("25.01.2022")
 
        '----------------------------------------------------------------
        'Option Strict On: Excel-Objekt erstellen
        xlApp = CType(CreateObject("Excel.Application"), Excel.Application)
 
        '----------------------------------------------------------------
        'Option Strict On: Worksheet
        Dim xlWorksheet1 As Excel.Worksheet = CType(xlWorkbook.Sheets( _
          "Tabelle1"), Excel.Worksheet)
 
        With xlApp
            'Datei öffnen und Daten manipulieren
            xlWorkbook = .Workbooks.Open(strFilename)
 
            With xlWorksheet1 'Register: Tabelle1
                'Aktivieren
                .Activate()
                'Werte
                .Range("A2").Value = intNummer
                .Range("A3").Value = dblBetrag
                .Range("A4").Value = datDate
                'Layout
                'fett
                .Range("A5").Value = "Das wird fett dargestellt"
                .Range("A5").Font.Bold = True
 
                'kursiv
                .Range("A6").Value = "Das wird kursiv dargestellt"
                .Range("A6").Font.Italic = True
 
                'Farbe zuweisen
                .Range("A7").Value = "Die Zelle wird grau dargestellt"
                .Range("A7").Interior.Color = RGB(204, 204, 204)
            End With
 
            xlApp.Columns.AutoFit()
            xlWorkbooks.Close()
            .Quit()
        End With
    End Sub

---
Verwendete Programmversionen:
Windows 7 64 bit sowie Windows 10 Prof.
Visual Studio 13 Professional
Microsoft Prof. 2010 (= Version 14)

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Daten aus VB.NET-Anwendung an Excel übergeben und formatieren 
Autor: CAM-Andi
Datum: 14.03.17 07:59

Hallo.

Das sieht gut aus:
Zitat:

 
'Variablen für Excel-Ansteuerung
Dim xlApp As New Excel.Application
 
Allerdings solltest du das löschen. Du überschreibst dein Excel-Objekt hiermit wieder. Zuvor hast du ein Workbook schon geaddet, das ist nun wieder weg:
Zitat:

 
'Option Strict On: Excel-Objekt erstellen
xlApp = CType(CreateObject("Excel.Application"), Excel.Application)
 
Willst du eine vorhandene xls-Datei ändern oder eine neue erstellen?

Grüße Andi

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Daten aus VB.NET-Anwendung an Excel übergeben und formatieren 
Autor: Vaubehnet
Datum: 14.03.17 08:07

Hallo Andi,

bei meinem aktuellen Problem will ich eine bestehende Datei ändern, da hier viele Formeln hinterlegt sind und nur mit neuen Werten gefüllt werden muss.

Deshalb im Beispiel die Nennung der Datei:

Dim strFilename As String = "i:\Exceltest.xlsx"
Wie sähen denn die Codevarianten aus für:
a) bestehende Datei ändern und
b) neue Datei erstellen?

Hättest du ein Beispiel?

Danke u. Gruß
Vaubehnet

---
Verwendete Programmversionen:
Windows 7 64 bit sowie Windows 10 Prof.
Visual Studio 13 Professional
Microsoft Prof. 2010 (= Version 14)

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Daten aus VB.NET-Anwendung an Excel übergeben und formatieren 
Autor: CAM-Andi
Datum: 14.03.17 08:19

Öffnen:
Dim xlApp As New Excel.Application
Dim xlWorkBook As Excel.Workbook
xlWorkBook = xlApp.Workbooks.Open("Dateiname")
...
xlWorkBook.Save()
Neu:
Dim xlApp As New Excel.Application
Dim xlWorkBook As Excel.Workbook
xlWorkBook = xlApp.Workbooks.Add
...
xlWorkBook.SaveAs("Dateiname")
Ist ungetestet, habe es aus bestehenden Projekten herauskopiert. Wollte dir einheitliche Objektnamen im Beispiel nennen.

Grüße Andi

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Daten aus VB.NET-Anwendung an Excel übergeben und formatieren 
Autor: Vaubehnet
Datum: 14.03.17 08:52

Hallo Andi, perfekt!
Die Excel-Ansteuerung funktioniert jetzt mit "Option Strict on", "Option Explicit on" sowie "neue Datei erstellen" und "bestehende Datei öffnen und ändern".
Ich habe Deine Codezeilen einmal als komplettes Beispiel in beiden Varianten eingearbeitet - das ist sicher auch für andere hilfreich:

Option Explicit On
Option Strict On
 
Imports Microsoft.Office.Interop
 
Public Class Form2
 
    Private Sub btnExcel2_Click(sender As Object, e As EventArgs) Handles _
      btnExcel2.Click
        'Beispielcode Excel-Ansteuerung
 
        'Verweis einbinden je nach Excel-Version
        'Menü: Projekt-Verweis hinzufügen; 
        ' Assemblys-Erweiterungen-Microsoft.Office.Interop.Excel 14.0.0.0 ( 
        ' Office Prof. 10) oder 15.0.0.0
 
        'Variablen für Excel-Ansteuerung
        Dim strFilename As String = "i:\Exceltest.xlsx"
        Dim xlApp = CType(CreateObject("Excel.Application"), Excel.Application)
        Dim xlWorkbooks As Excel.Workbooks = xlApp.Workbooks
 
        'Code Variante a): neue Excel-Datei erstellen
        Dim xlWorkbook As Excel.Workbook = xlWorkbooks.Add()
 
        'Code Variante b): bestehende Excel-Datei öffnen
        'Dim xlWorkbook As Excel.Workbook = xlWorkbooks.Open(strFilename)
 
        'Drei Variablen
        Dim intNummer As Integer = 5000
        Dim dblBetrag As Double = 123.45
        Dim datDate As Date = Date.Parse("25.01.2022")
 
        '----------------------------------------------------------------
        'Option Strict On: Worksheet
        Dim xlWorksheet1 As Excel.Worksheet = CType(xlWorkbook.Sheets( _
          "Tabelle1"), Excel.Worksheet)
 
        With xlApp
 
            With xlWorksheet1 'Register: Tabelle1
                'Aktivieren
                .Activate()
                'Werte
                .Range("A2").Value = intNummer
                .Range("A3").Value = dblBetrag
                .Range("A4").Value = datDate
                'Layout
                'fett
                .Range("A5").Value = "Das wird fett dargestellt"
                .Range("A5").Font.Bold = True
 
                'kursiv
                .Range("A6").Value = "Das wird kursiv dargestellt"
                .Range("A6").Font.Italic = True
 
                'Farbe zuweisen
                .Range("A7").Value = "Die Zelle wird grau dargestellt"
                .Range("A7").Interior.Color = RGB(204, 204, 204)
            End With
 
            xlApp.Columns.AutoFit()
 
            'Codevariante a) neue Datei unter einem bestimmten Namen speichern
            xlWorkbook.SaveAs("i:\NeueDatei.xlsx")
            MsgBox("Datei unter dem Namen i:\NeueDatei.xlsx gespeichert.", _
              CType(vbOK, MsgBoxStyle), "Datei gespeichert")
 
            'Codevariante b) bestehende Datei direkt speichern:
            'xlWorkbook.Save()
            'MsgBox(strFilename & " gespeichert.", CType(vbOK, MsgBoxStyle), 
            ' "Datei gespeichert")
 
            'Codevariante c) Nachfragen lassen, wie mit der Datei verfahren 
            ' werden soll (Überschreiben, speichern, ...)
            'a) und b) müssen dafür auskommentiert werden
            'Der Name kann dann vergeben werden.
            'xlWorkbooks.Close()
 
            .Quit()
        End With
    End Sub
End Class
Vielen Dank für die Super Hilfe!

Vaubehnet

... und wenn ich jetzt noch die Formatierungen hinkriege (Rahmen etc.) ...

---
Verwendete Programmversionen:
Windows 7 64 bit sowie Windows 10 Prof.
Visual Studio 13 Professional
Microsoft Prof. 2010 (= Version 14)

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Daten aus VB.NET-Anwendung an Excel übergeben und formatieren 
Autor: CAM-Andi
Datum: 14.03.17 08:55

Freut mich wenn ich helfen konnte.

Grüße Andi

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Daten aus VB.NET-Anwendung an Excel übergeben und formatieren 
Autor: Vaubehnet
Datum: 16.03.17 15:37

Hallo zusammen,

neben dem "Strict On"-Problem hatte ich ja eingangs auch Fragen zu Formatierungen. Inzwischen habe ich einiges herausgefunden. Ich vermute, dass ist auch für andere interessant (z.B. 1.05 Numberformat), daher poste ich das hier; das ganze als Kommentar, dann kann man sich das vorübergehend in den eigenen Code legen und beim programmieren nachschlagen.

Zur Liste:
Ein "+" hinter der Ziffer kennzeichnet: Problem gelöst, ein "-" zeigt eine noch offene Frage an.

Im Moment tüftele ich noch an:
'1.02 ? Eine Zelle/einen Bereich einfach/doppelt unterstreichen? (Linie unten)
'1.03 ? Alle Formatierungen zurücknehmen (xlnone)

'2.03 ? Einen Registerreiter umbenennen
'2.04 ? Einem Registerreiter eine Farbe zuweisen
'2.05 ? Spaltenüberschriften (A, B, C, ...) ausblenden / einblenden
'2.06 ? Linien ausblenden/einblenden

Viele Grüße
Vaubehnet

'---------------------------------------------------------------
'Voraussetzung ist der oben gepostete Code!
'Befehle müssen an der passenden Stelle 
'(.Range z.B. innerhalb With-Schleife) eingefügt werden!
'---------------------------------------------------------------
 
'-----------------------------
'1. Fragen zu Zelle und Inhalt:
'-----------------------------
 
'1.01 +  Eine Zelle/einen Bereich mit einem Rahmen versehen?
'        Geht mit Linestyle: 
'        Werte: .Linestyle = 1 ' einfache Linie
'                            2 ' gestrichelte Linie
'                            3 ' ähnlich 2, aber eher gepunktet
'                            4 ' langer Strich, kurzer Strich
'                            5 ' langer Strick, zwei kurze Striche
'                            6 ' Strich-Punkt in fett
'        Beispiel:
'        With .Range("B4:D7")
'           .Borders.LineStyle = 2
'        End With
 
'1.02 ?  Eine Zelle/einen Bereich einfach/doppelt unterstreichen? (Linie unten)
'1.03 ?  Alle Formatierungen zurücknehmen (xlnone)
 
'1.04 +  Schriftgröße und Schriftart zuweisen, Text unterstreichen
'        .Range("A3").Font.Size = 24
'        .Range("A3").Font.Name = "ARIAL"
'        .Range("A5").Font.Underline = True
 
'1.05 +  Eine Zelle/Bereich ein Zellformat und eine Formatierung zuweisen
'        z.B. 1.000er Punkte, zwei Nachkommastellen
'        .Range("A3").NumberFormat = "#,##0.00"
 
'1.06 +  Einer Zelle ein Datumsformat zuweisen (dd.mm.jjjj)
'        .Range("A4").NumberFormat = "m/d/yyyy"
 
'1.07 +  Nicht einer Zelle, sondern einem Text eine Farbe zuweisen 
'        (z.B. für Negativwerte rot, sonst schwarz)
'        Farbe zuweisen geht mit (-16776961 = rot): 
'        .Range("A3").Font.Color = -16776961
 
'-------------------------------------------------------
'2. Fragen zu Reihen, Spalten und Register sowie Dateiname:
'-------------------------------------------------------
 
'2.01 +  Spalten manuell eine feste Breite zuweisen, z.B. Spalte C
'        .Columns("C:C").ColumnWidth = 20
 
'2.02 +  Zeilen eine feste Höhe zuweisen
'        Einer bestimmten Zeile eine Höhe zuweisen, z.B. 3. Zeile:
'        .Rows("3:3").RowHeight = 24
'        Mehreren Zeilen eine bestimmte Höhe zuweisen, z.B. 10. - 30. Zeile:
'        .Rows("10:30").RowHeight = 25
'
'2.03 ?  Einen Registerreiter umbenennen
'2.04 ?  Einem Registerreiter eine Farbe zuweisen
'2.05 ?  Spaltenüberschriften (A, B, C, ...) ausblenden / einblenden
'2.06 ?  Linien ausblenden/einblenden
 
'2.07 +  Excel-Datei direkt ohne Nachfrage drucken
'        xlWorkbook.PrintOutEx() 
 
'2.08 +  Excel-Datei unter einem anderen Namen speichern
'        xlWorkbook.SaveAs("DeinPfad:\DeinDateiname.xlsx")
 
'2.09 +  Spalten automatisch in der Breite anpassen
'        app.Columns.AutoFit()

---
Verwendete Programmversionen:
Windows 7 64 bit sowie Windows 10 Prof.
Visual Studio 13 Professional
Microsoft Prof. 2010 (= Version 14)

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel