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 (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
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 (http://codekabinett.com/rdumps.php?Lang=1&targetDoc=email-versenden-access-vba-cdo).
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!)
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
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
writeTextFile2.) 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.
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