| |
VB.NET - Ein- und UmsteigerExcel-Export: Option Strict on Spätes Binden - Late Binding | | | Autor: Vaubehnet | Datum: 26.04.18 08:03 |
| Guten Morgen,
ich übergebe den Inhalt eines Datagridviews in eine Excel-Datei.
Damit ich den Code nicht aus jedem Formular neu schreiben muss, habe ich die Routine in ein Modul ausgelagert.
Formular und Datagridview werden als Variablen übergeben.
Das funktioniert auch einwandfrei.
Aber: Die Spaltenüberschriften des Datagridviews kann ich derzeit nur übergeben, wenn "Option Strict On" deaktiviert ist
Fehlermeldung: "Option Strict on" lässt spätes Binden nicht zu.
Ich vermute, die Lösung liegt in der Verwendung von "DirectCast" oder "TypeOf".
Aber das kriege ich nicht hin. Hier ist der Codeabschnitt:
'Überschriften aus Datagridview übernehmen
For col As Integer = 0 To strdgv.Columns.Count - 1
'Hinweise:
'1. xlApp wurde weiter oben definiert:
' Dim xlApp = CType(CreateObject("Excel.Application"),
' Excel.Application)
'2. strDgv = Variable für das Datagridview, wird an die Sub
' übergeben
' ByVal strdgv As DataGridView
'Problem: folgende beiden Zeilen funktionieren nur ohne Option
' Strict On - wie muss der korrekte Code lauten?
xlApp.Cells(intZeileStart - 1, col + intSpalteStart).value = _
strdgv.Columns.Item(col).HeaderText
xlApp.Cells(intZeileStart - 1, col + intSpalteStart).interior.color _
= RGB(227, 247, 255) 'hellblau
Next Vielen Dank schon mal für die Hilfe!
Vaubehnet
---
Verwendete Programmversionen:
Windows 7 64 bit sowie Windows 10 Prof.
Visual Studio 13 Professional
Microsoft Prof. 2010 (= Version 14) | |
Re: Excel-Export: Option Strict on Spätes Binden - Late Binding | | | Autor: Vaubehnet | Datum: 26.04.18 10:24 |
| Hallo effeff,
ja, die Bindung ist an einer Datatable.
Aber damit ich mein Excel-Übergabemodul universell nutzen kann (d.h. später ggf. auch für Datagrids, die manuell befüllt wurden), will ich auf die Spaltennamen des Datagridviews zugreifen.
xlApp.Cells(intZeileStart - 1, col + intSpalteStart).value = _
strdgv.Columns.Item(col).HeaderText Und der direkte Zugriff auf die Datatable löst nicht mein zweites Problem:
xlApp.Cells(intZeileStart - 1, col + intSpalteStart).interior.color = RGB(227, _
247, 255) 'hellblau Beste Grüße
Vaubehnet
---
Verwendete Programmversionen:
Windows 7 64 bit sowie Windows 10 Prof.
Visual Studio 13 Professional
Microsoft Prof. 2010 (= Version 14) | |
Re: Excel-Export: Option Strict on Spätes Binden - Late Binding | | | Autor: Vaubehnet | Datum: 26.04.18 11:08 |
| Also:
Problem 1 bekomme ich gelöst, wenn ich .value weglasse:
'Option Strict on Problem:
xlApp.Cells(intZeileStart - 1, col + intSpalteStart).value = _
strdgv.Columns.Item(col).HeaderText
'Option Strict on gelöst: .value weglassen
xlApp.Cells(intZeileStart - 1, col + intSpalteStart) = _
strdgv.Columns.Item(col).HeaderText //effeff: Option Strict On lässt spätes Binden generell nicht zu!
Ja.
Aber dennoch ist es sicher möglich, einer Excel-Zelle zur Laufzeit einen Wert oder eine Eigenschaft (Farbe, Rahmen etc.) zuzuweisen.
Beispiel für einen Code, der ebenfalls den "Späte-Bindung-Fehler" erzeugt, nebst Lösung:
'Beispiel:
'Führt zu einem Fehler bei Option Strict on (Option Strict On lässt spätes
' Binden nicht zu):
Dim xlApp = CreateObject("Excel.Application")
'CType löst das Problem bei Option Strict on:
Dim xlApp = CType(CreateObject("Excel.Application"), Excel.Application) Daher meine Vermutung: "xlApp.Cells" muss auch mit CType / DirectCast behandelt werden.
'Fehler bei Option Strict On:
xlApp.Cells(intZeileStart - 1, col + intSpalteStart).interior.color = RGB(227, _
247, 255) 'hellblau Aber leider habe ich keine Idee, wie.
Vaubehnet
---
Verwendete Programmversionen:
Windows 7 64 bit sowie Windows 10 Prof.
Visual Studio 13 Professional
Microsoft Prof. 2010 (= Version 14) | |
Re: Excel-Export: Option Strict on Spätes Binden - Late Binding | | | Autor: HenryV | Datum: 26.04.18 15:38 |
| Hallo Vaubehnet
Das Cells-Object musst du in einen Excel.Range casten.
Gruss HenryV | |
Re: Excel-Export: Option Strict on Spätes Binden - Late Binding | | | Autor: Vaubehnet | Datum: 29.04.18 14:15 |
| Hallo Henry,
ich habe jetzt einige Stunden Versuche hinter mir und bekomme es einfach nicht hin.
Hast Du vielleicht ein Beispiel (anhand meines Codes), wie das geht?
Danke schon mal,
Vaubehneht
---
Verwendete Programmversionen:
Windows 7 64 bit sowie Windows 10 Prof.
Visual Studio 13 Professional
Microsoft Prof. 2010 (= Version 14) | |
Re: Excel-Export: Option Strict on Spätes Binden - Late Binding | | | Autor: Vaubehnet | Datum: 29.04.18 14:33 |
| Ich glaube, ich habe es herausgefunden (schwierige Geburt, wenn man Anfänger ist...):
Einige Beispiele zur Vermeidung des "Late Binding / Spätes Binden-Fehlers), falls das für andere von Interesse ist:
'Beispiel 0 - Definition der Excel-Anwendung
Dim xlApp = CType(CreateObject("Excel.Application"), Excel.Application)
'Beispiel 1 - Farbe der Zelle
CType(xlApp.Cells(intZeileStart - 1, col + intSpalteStart), _
Excel.Range).Interior.Color = lngColorHeader 'hellblau
'Beispiel 2 - Numberformat
CType(xlApp.Cells(row + intZeileStart, col + intSpalteStart), _
Excel.Range).NumberFormat = "@"
'Beispiel 3 - Ränder
CType(xlApp.Cells(intZeileStart - 1, col + intSpalteStart), _
Excel.Range).Borders.LineStyle = bytRahmenHeaderArt Falle es daran etwas auszusetzen gibt, bin ich für jeden Hinweis dankbar.
Und: Danke an alle für Eure Hilfe und Anregungen!
Vaubehnet
---
Verwendete Programmversionen:
Windows 7 64 bit sowie Windows 10 Prof.
Visual Studio 13 Professional
Microsoft Prof. 2010 (= Version 14) | |
| 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 |
|
|
sevWizard für VB5/6
Professionelle Assistenten im Handumdrehen
Erstellen Sie eigene Assistenten (Wizards) im Look & Feel von Windows 2000/XP - mit allem Komfort und zwar in Windeseile :-) Weitere InfosTipp des Monats TOP Entwickler-Paket
TOP-Preis!!
Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR...
Jetzt nur 599,00 EURWeitere Infos
|