Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Umstellen von Mailversand auf Textdatei

Begonnen von derilzemer, Juni 20, 2016, 23:17:28

⏪ vorheriges - nächstes ⏩

derilzemer

Hallo,
vor kurzem wurde mir hier im Forum geholfen, ausgelesene Werte als Text in eine Mail zu packen, damit diese auch gleich versendet werden kann. Der Nachteil davon ist aber, dass eben nicht jeder einen lokalen Mailclient hat. Besserer Weg ist wohl eine lokale Textdatei zu beschreiben. Ich habe jetzt gegoogelt und gesucht, es aber nicht verstanden wie ich das ganze umstellen kann, damit die ausgelesen Werte in eine Textdatei geschrieben und lokal im Userverzeichnis abgespeichert werden. Ansätze mit streamwriter konnte ich nicht umsetzen, noch dazu ungewiss ob dies überhaupt der richtige Ansatz ist http://www.homeandlearn.co.uk/NET/nets8p4.html. Kann mir da jemand helfen?
Hier das Script, welches mir die MAC Adressen ausliest, welche dann aktuell direkt in den Mailclient gepastet werden.

Option Compare Database
Option Explicit

Private Sub Form_Load()

    Dim strComputer As String
        Dim objWMIService As Object
        Dim colAdapters As Object
        Dim objAdapter As Object
    Dim strMAC As String

    strComputer = "."
        Set objWMIService = GetObject _
            ("winmgmts:" & "!\\" & strComputer & "\root\cimv2")
        Set colAdapters = objWMIService.ExecQuery _
            ("Select * from Win32_NetworkAdapterConfiguration Where IPEnabled = True")
        For Each objAdapter In colAdapters
            strMAC = strMAC & vbCrLf & objAdapter.MACAddress
        Next objAdapter

    DoCmd.SendObject acSendNoObject, , acFormatRTF, "dasbinich@meinemail.de", , , "Mac - Adressen", Mid(strMAC, 3), True

End Sub


Vielen Dank und Gruß
Andreas
Grüße und Dank im voraus
Andreas

PhilS

Zitat von: derilzemer am Juni 20, 2016, 23:17:28Der Nachteil davon ist aber, dass eben nicht jeder einen lokalen Mailclient hat.
Eine alternative Möglichkeit wäre es, die Email über die CDO-Bobliothek zu versenden.
Allerdings muss du dann die jeweils für den aktuellen Benutzer passende Mailkonfiguration in deiner DB gespeichert haben.

Zitat von: derilzemer am Juni 20, 2016, 23:17:28Besserer Weg ist wohl eine lokale Textdatei zu beschreiben.
Ob das grundsätzlich besser ist, hängt von deinen Anforderungen ab.

Der Beispielcode, den du angeführt hast, und das StreamWriter-Objekt gehören zum .Net-Framework / VB.net. - Das hat so direkt nichts mit Access zu tun.

Hier ist eine kleine Prozedur, die dir einen String in eine Textdatei schreibt.
Public Sub writeTextFile(ByVal fileName As String, ByVal fileText As String)
    Dim fileNo As Integer   
    fileNo = FreeFile   
    Open fileName For Output As #fileNo
    Print #fileNo, fileText
    Close #fileNo
End Sub

(Achtung, die Datei wird automatisch überschrieben!)
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

derilzemer

Hallo PhilS,
bin ja nicht Ansatzweise fit in VBA, habe jedoch mal anhand deiner Angaben erst mal versucht überhaupt in eine vorhandene Datei reinzuschreiben. Da scheitere ich schon :(. Da sieht nur unwesentlich abgeändert aus wie das, was du mir als Vorgabe gezeigt hast

Public Sub writeTextFile(ByVal fileName As String, ByVal fileText As String)
    Dim fileNo As Integer
    fileNo = FreeFile
    Open "C:\Benutzer\linus\Eigene Dokumente\Familie\fileName.txt" For Output As #fileNo
    Print #fileNo, "Testtext"
    Close #fileNo
End Sub


Selbst wenn da etwas rein geschrieben wird, wie übergebe ich ihm das was ausgelesen wird?

Public Sub writeTextFile(ByVal fileName As String, ByVal fileText As String)

    Dim fileNo As Integer
    Dim strComputer As String
        Dim objWMIService As Object
        Dim colAdapters As Object
        Dim objAdapter As Object
    Dim strMAC As String

        fileNo = FreeFile
            Open "C:\Benutzer\linus\Eigene Dokumente\Familie\fileName.txt" For Output As #fileNo

    strComputer = "."
        Set objWMIService = GetObject _
            ("winmgmts:" & "!\\" & strComputer & "\root\cimv2")
        Set colAdapters = objWMIService.ExecQuery _
            ("Select * from Win32_NetworkAdapterConfiguration Where IPEnabled = True")
        For Each objAdapter In colAdapters
            strMAC = strMAC & vbCrLf & objAdapter.MACAddress
        Next objAdapter

            Print #fileNo, strMAC = strMAC & vbCrLf & objAdapter.MACAddress
    Close #fileNo

End Sub


Weiterhin lies ich das früher beim laden des Formular ausführen, wie muss man das "umbauen", wenn das so wieder sein soll?
VBA habe ich echt keine Hintergründe, zumindest gewinnt man damit keine Kriege, sorry.
Gruß Andreas
Grüße und Dank im voraus
Andreas

PhilS

Zitat von: derilzemer am Juni 21, 2016, 17:54:33bin ja nicht Ansatzweise fit in VBA, habe jedoch mal anhand deiner Angaben erst mal versucht überhaupt in eine vorhandene Datei reinzuschreiben. Da scheitere ich schon :(.
Du machst es dir viel zu schwer. Es geht viel einfacher.
Schritt für Schritt:
1.) Lösche deine geänderte Variante von meiner Sub writeTextFile
2.) Kopiere nochmal meine Fassung von writeTextFile entweder in ein Modul oder in das Klassenmodul des Formulars, das bereits deinen Code enthält.
3.) Lösche (mach einen Kommentar daraus) in deinem ursprünglichen Code die Zeile zum Email Senden ( DoCmd.SendObject ...)
4.) Füge die folgende Zeile an der gleichen Stelle ein:
Call writeTextFile("C:\Benutzer\linus\Eigene Dokumente\Familie\fileName.txt", Mid(strMAC, 3))

Fertig.
Damit hast du den Text, der vorher in der Email stand, in der Textdatei.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

derilzemer

Hallo PhilS,

vielen Dank für die Schritt für Schritt Führung. Es funktioniert (na klar, wirst du sagen :)..). Demnach habe ich es mir wirklich zu schwer gemacht :(. Aber das kommt auch ein wenig vom googlen. Tausend Varianten und Ansätze. Auf einmal sieht man den Wald vor lauter Bäumen nicht mehr. Danke noch mal.

Gruß Andreas
Grüße und Dank im voraus
Andreas