VB.Net-Forum - Beitragsübersicht -
Von engelinzivil
Datum 24. Februar 2016 um 00:05:32
Frage Grüezi mittenand,

Also Folgendes:
Ich habe hier ein Protokollformular als Excel datei. Darin werden u.a. Namen, Kilometerstände, Fahrzeuge, und einige andere Dinge eingetragen und Protokolliert. Diese Datei hat 2 Arbeitsblätter, "Seite 1" und "Seite 2" genannt. Nach dem Eintragen der Werte muss die Datei mit Datum und einer Fortlaufenden Nummer gespeichert, Gedruckt(Beidseitiger druck, also beide Arbeitsblätter auf ein Blatt Papier), und per Outlook als mail Versendet werden.

Diesen Vorgang will ich nun automatisieren.

Problem 1 und 2, also wie ich die Werte in die Tabelle Schreibe, und das Dokument Speichere, habe ich bereits erfolgreich gelöst:
Dim oExcel As Object = Nothing
Dim oBook As Object = Nothing
Dim oSheet As Object = Nothing
Try
oExcel = GetObject(, "Excel.Application")
Catch ex As Exception
Try
oExcel = CreateObject("Excel.Application")
Catch ex1 As Exception
MsgBox("Applikation nicht installiert!", _
MsgBoxStyle.Critical, "Error")
End Try
End Try
oExcel.Visible = True ' zu Testzwecken
oBook = oExcel.Workbooks.Open("F:\Protokoll.xlsx")
oSheet = oBook.Worksheets("Seite 1")

'tag/Zeit
oSheet.Range("C2").Value = txtC2.Text
oSheet.Range("K2").Value = txtZeit.Text

'Hier kommen jetzt ca. 30 weitere "Übertragungen"

oSheet = oBook.Worksheets("Seite 2")

oSheet.Range("D1").Value = txtD1.Text
oSheet.Range("D3").Value = txtD3.Text

'Und hier nochmal etwa 15 "Übertragungen"

Try
oBook.SaveAs("F:\protokollTest.xlsx") 'Der Dateiname wurde lediglich für debugzwecke gewählt und wird noch mit einer Routine versehen
Catch
MsgBox(Prompt:="Datei bereits Vorhanden")
End Try

chkSpeichern.Checked = True

If chkAnzeigen.Checked = False Then
oBook.Close(True)
oExcel.Quit()
End If
oSheet = Nothing
oBook = Nothing
oExcel = Nothing
GC.Collect()
GC.WaitForFullGCComplete()
Das ganze Funktioniert auch ganz gut und zuverlässig, soweit ich das bisher beurteilen kann.


Problem 3: Die Datei per Outlook 2013 Versenden:

Laut der MSDN soll folgender Code Funktionieren:
    Sub Main()
' Create an Outlook application.
Dim oApp As Outlook._Application
oApp = New Outlook.Application()

' Create a New MailItem.
Dim oMsg As Outlook._MailItem
oMsg = oApp.CreateItem(Outlook.OlItemType.olMailItem)
oMsg.Subject = "Send Attachment Using OOM In Visual Basic .NET"
oMsg.Body = "Hello World" & vbCr & vbCr

' TODO: Replace With a valid e-mail address.
oMsg.To = " user@example.com"

' Add an attachment
' TODO: Replace With a valid attachment path.
Dim sSource As String = "C:\Temp\Hello.txt"
' TODO: Replace With attachment name
Dim sDisplayName As String = "Hello.txt"

Dim sBodyLen As String = oMsg.Body.Length
Dim oAttachs As Outlook.Attachments = oMsg.Attachments
Dim oAttach As Outlook.Attachment
oAttach = oAttachs.Add(sSource, , sBodyLen + 1, sDisplayName)

' Send
oMsg.Send()

' Clean up
oApp = Nothing
oMsg = Nothing
oAttach = Nothing
oAttachs = Nothing
End Sub
( https://support.microsoft.com/de-de/kb/313803)

Ich habe wie angegeben die Objektbibliothek Importiert, aber es wird Trotzdem der Fehler "Der Typ Outlook.Application ist nicht definiert." Geworfen.
Leider konnte ich noch nicht in erfahrung Bringen, woran das liegt...


Nun zum Letzten Problem:

Problem 4:

Ich muss die (Zuvor gespeicherte) Excel Datei an den Standarddrucker Senden, mit der AKTIVIERTEN Option "Alle Arbeitsblätter, Beidseitiger Druck".

Durch Längere Suche habe ich folgendes gefunden:
        ' Excel-Tabelle drucken
Dim PfadZuExcel As String
Dim x As Long

PfadZuExcel = AnwendungFuerDatei(sFilename)
With Text1
x = Shell(PfadZuExcel, vbHide)
On Local Error Resume Next
.LinkMode = 0
.LinkTopic = "Excel|system"
.LinkMode = 2
.LinkExecute("[Open(""" + sFilename + _
""")][Print()][quit()]")
End With
Allerdings werde ich daraus nicht schlau, wieso ich da eine Textbox verwenden soll oder wie das überhaut geht...
In einem Anderen Forum fand ich das hier:
        'Dim wApp As New Excel.Application
'With wApp
' .Visible = True
' .Documents.Open(GewählteEXEDatei)
' .ActiveDocument.PrintOut()
' .ActiveDocument.Close(False)
' .Quit()
'End With
Hier kommt allerdings wieder die Tatsache zum Tragen, dass Trotz der Importierten Objektbibliothek das Excel.Application- Objekt nicht erkannt wird.


So, ich hoffe, dass ich das ganze jetzt nicht allzu sehr aufgebläht hab, und sich jemand wirklich die mühe machen will, das alles zu lesen xD

Viele Grüße, Bis bald,

engelinzivil
[ Antwort schreiben | Zurück zum VB.Net-Forum | Forum-Hilfe ]
Antworten
V10: Umgang mit Excel Dateien(Drucken, per mail verschicken) - engelinzivil 24. Februar 2016 um 00:05:32
Re: Umgang mit Excel Dateien(Drucken, per mail verschicken) - Nico 24. Februar 2016 um 09:09:56
Re: Umgang mit Excel Dateien(Drucken, per mail verschicken) - engelinzivil 24. Februar 2016 um 13:02:58
Re: Umgang mit Excel Dateien(Drucken, per mail verschicken) - engelinzivil 29. Februar 2016 um 16:31:06

Ihre Antwort
(Nick-)Name   Wichtige Informationen zur Namensangabe
E-Mail (opt.)  Wichtige Informationen zur Angabe einer eMail-Adresse
Thema   Wichtige Informationen zur Angabe eines Themas
Betrifft (IDE)  VB 2010
Ihre Antwort
Smilies
Mehr...
FettKursivUnterstrichen   Übersicht der Tipp-KürzelÜbersicht der Projekt-KürzelÜbersicht der Bücher-Kürzel 
Homepage
Titel
Root-Smilies              
             
             
[ Zurück zum VB.Net-Forum | Forum-Archiv | Forum-Hilfe | Chat ]

Zum Seitenanfang

Startseite | VB-/VBA-Tipps | Projekte | Tutorials | API-Referenz | Komponenten | Bücherecke | Gewinnspiele | VB.Net | VB/VBA-Forum | DirectX | DirectX-Forum | Chat | Ausschreibungen | Links | Suchen | Stichwortverzeichnis | Feedback | Impressum

Seite empfehlen Bug-Report
Letzte Aktualisierung: Sonntag, 13. Dezember 2015