Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1748to1752
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Textbausteine

Textbausteine
31.03.2020 20:25:55
Stefan
Hallo,
Ich habe eine Arbeitsmappe erstellt mit der ich Angebote schreiben kann, ähnlich einer Leistungsbeschreibung. Die Texteingabe mache ich über eine Userform. Ich möchte die eingegeben Texte abspeichern um beim nächsten Angebot diese wieder verwenden zu können.
Hat jemand eine Idee wo und wie ich diese Texte abspeichern kann?
Vielen Dank

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Textbausteine
31.03.2020 20:35:54
Patrick
Hallo Stefan,
Du könntest die Texte als .txt Dokument abspeichern und wieder importieren. Das wäre eine simple Lösung. Etwas umfangreicher wäre es, wenn du diese in der Arbeitsmappe direkt hinterlegen möchtest, ohne das diese irgendwo auftauchen.
AW: Textbausteine
31.03.2020 20:36:39
volti
Hallo Stefan,
solche Dinge habe ich früher immer gerne über eine Ini-Datei gemacht, die natürlich auch gerne *.txt heißen kann.
Stichwort API-Funktionen: GetPrivateProfilestring, WritePrivateProfileString
Das managed sich sehr gut mit Bereich, Item, Daten und Default
Hängt natürlich auch ein bisschen vom Text ab (Menge, Handling-Wünsche usw.).
viele Grüße
Karl-Heinz
Anzeige
AW: Textbausteine
31.03.2020 20:43:44
Stefan
Hallo
Vielen Dank für Deine Antworten .
AW: Textbausteine
31.03.2020 20:43:45
Stefan
Hallo
Vielen Dank für Deine Antworten .
AW: Textbausteine
31.03.2020 21:30:38
volti
Hallo Stefan,
hier noch ein einfaches Beispiel für Dich, wie ich das meine, falls noch von Interesse oder auch für andere interessierte Leser.

Option Explicit
#If VBA7 Then
 Private Declare PtrSafe Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" ( _
         ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, _
         ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFilename As String) As Long
 Private Declare PtrSafe Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" ( _
         ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, _
         ByVal lpFilename As String) As Long
#Else
 Private Declare  Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" ( _
         ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, _
         ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFilename As String) As Long
 Private Declare  Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" ( _
         ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, _
         ByVal lpFilename As String) As Long
#End If
Private Const csTxtdatei As String = "Testtextdaten.txt"
Function SetGetTxtdaten(sArt As String, sBereich As String, sItem As String, _
                        sPfadDatei As String, Optional sDaten As String) As String
'Schreibt Daten in die Textdatei oder liest Daten aus der Textdatei
'sArt= R oder W für Lesen oder Schreiben
 Dim sTxt As String * 5000              'Min Anzahl an Zeichen vorgeben
 If sPfadDatei = "" Then Exit Function  'Keine Datei übergeben
 On Error GoTo SGI_Error
 Select Case sArt
 Case "R"
  GetPrivateProfileString sBereich, sItem, "none", sTxt, 5000, sPfadDatei
  SetGetTxtdaten = Replace(Trim(Left(sTxt, InStr(sTxt, vbNullChar) - 1)), "¶", vbCrLf)
 Case "W"
  If sDaten <> "" Then _
     WritePrivateProfileString sBereich, sItem, Replace(sDaten, vbCrLf, "¶"), sPfadDatei
 End Select
 Exit Function
SGI_Error:
 SetGetTxtdaten = "none"
 On Error GoTo 0
End Function
Sub Schreibewas()
 Dim sTxt As String
 sTxt = "Hallo World," & vbCrLf & "ich bin es."
 SetGetTxtdaten "W", "Sektor1", "MeinText", ThisWorkbook.Path & "\" & csTxtdatei, sTxt
End Sub
Sub Lesewas()
 Dim sTxt As String
 MsgBox SetGetTxtdaten("R", "Sektor1", "MeinText", ThisWorkbook.Path & "\" & csTxtdatei)
End Sub

viele Grüße
Karl-Heinz

Anzeige
AW: Textbausteine
01.04.2020 09:19:50
Stefan
Guten Morgen Karl Heinz,
Danke für dein Beispiel. Ich werde mir es dann mal genauer anschauen.
Vielen Dank
AW: Textbausteine
03.04.2020 21:03:25
Stefan
Hallo also das Schreiben habe ich gut hinbekommen. Nun möchte ich alle Sectionen in eine Listbox einlesen und daran verzweifle ich. Wäre cool wenn mir jemand dabei helfen könnte.
AW: Textbausteine
03.04.2020 23:26:50
volti
Hallo Stefan,
dann solltest Du mal (D)eine Beispielmappe mit den bisherigen Ergebnissen und ggf. weiteren Erklärungen hier hochladen.
viele Grüße
Karl-Heinz
AW: Textbausteine
06.04.2020 14:23:55
Stefan
Hi,
also hier mal der Code. Irgendwie steh ich da total auf dem Schlauch. Bisher steht nur der Key in der Listbox was ja schon mal ein Anfang ist. Ich möchte aber die Sections der TXT drin haben, damit ich später beim speichern meiner Texte auswählen kann in welchem Bereich der Text gespeichert werden soll.
Option Explicit
'#If Win64 Then
Private Declare PtrSafe Function WritePrivateProfileStringA Lib "kernel32.dll" ( _
ByVal lpApplicationName As String, _
ByVal lpKeyName As Any, _
ByVal lpString As Any, _
ByVal lpFilename As String) As Long
Private Declare PtrSafe Function GetPrivateProfileStringA Lib "kernel32.dll" ( _
ByVal lpApplicationName As String, _
ByVal lpKeyName As Any, _
ByVal lpDefault As String, _
ByVal lpReturnedString As String, _
ByVal nSize As Long, _
ByVal lpFilename As String) As Long
Private Sub UserForm_Initialize()
Dim strPfad As String
Dim strWertGelesen As String
Dim strSection As String
Dim strKey As String
Dim lngResult As Long
Dim strBuffer As String
strPfad = "H:\Eigene Dokumente\Selbstst?ndig\Test.txt"  'Beispiel Anpassen!
strSection = "Beispiel"  'Beispiel Anpassen!
strKey = "Daten"           'Beispiel Anpassen!
'Wert lesen
strBuffer = Space$(255) 'R?ckgabewert wird mit ausreichend Leerzeichen gef?llt
lngResult = GetPrivateProfileStringA(strSection, strKey, vbNullString, strBuffer, Len( _
strBuffer), strPfad)
strWertGelesen = Left$(strBuffer, lngResult)
'    lngResult = GetPrivateProfileStringA(strSection, strKey, vbNullString, strBuffer, Len( _
strBuffer), strPfad)
ComboBox1.Value = strWertGelesen
ComboBox1.ListIndex = 0
End Sub

Danke schon mal.
Anzeige
AW: Textbausteine
06.04.2020 15:54:38
volti
Hallo Stefan,
zwar hast Du meine Anregung mit den beiden API-Funktionen angenommen und verwendet, aber dann hast Du Dir eine komplett andere Vorgehensweise im Netz gesucht, obwohl mein Vorschlag komplett funktionstüchtig ist und bei Bedarf entsprechend ausgebaut und verwendet werden kann.
Außerdem hast Du keine Datei mit dem enthaltenen Userform-Muster und ggf. die Textdatei hier hochgeladen, aus der die Strukturen Deines Projektes halbwegs ersichtlich sind.
Anhand des von Dir geposteten wenig aussagenden Code-Schnipsels kann ich Dir hier leider nicht weiterhelfen.
Trotzdem noch ein Tipp: Wenn ich das richtig verstehe, willst Du die Bereiche (Sections) in einer Listbox zur Auswahl haben. Diese musst Du anderweitig managen, die können natürlich nicht mit der API-Funktion gelesen werden.
Wenn die nicht fest sondern dynamisch sind, könntest Du sie kommagetrennt z.B. in einem Bereich "Sections" o.ä. vorhalten.
[Sections]
MySections=Sec1,Sec2,Sec3,Neuestes Sec.....
viele Grüße
Karl-Heinz
Anzeige
AW: Textbausteine
06.04.2020 19:12:37
Stefan
Hallo Karl Heinz,
Danke für Deine Antwort. Deinen Vorschlag habe ich schon noch im Hinterkopf. Allerdings war ich im ersten Moment wenig überfahren von der länge und da habe ich mal nach was einfacheren gesucht um es erstmal zu verstehen. Diese Herangehensweise ist noch völlig neu für mich.
Aber vielen Dank für Deine Hilfe.
LG
Stefan
AW: Textbausteine
06.04.2020 19:16:20
Stefan
Aber sag mal die Keys kann man mit der API auslesen das geht. Kannst Du mir vielleicht da weiterhelfen warum das funktioniert?
AW: Textbausteine
06.04.2020 19:29:28
volti
Hallo Stefan,
mein Vorschlag ist, aus Gesamtkonzept gesehen, genau richtig. Er vereinigt Scheiben und Lesen in einer Funktion, so dass spätere Zugriffe (und Du willst ja wohl etas schreiben und etwas lesen) mit einem einfachen Aufruf erfolgen. Meine Declares sind für 32 und 64 Bit. Man kann aber auch den nicht relevanten Teil weglassen.
Außerdem kann man mehrzeilig speichern, also mit Zeilenumbruch, was in Deinem Beispiel nicht geht.
Ich denke mir was aus (einschließlich Erklärungen) und poste es hier, auch wenn Du immer noch nicht Dein Konzept hier offen gelegt hast. Kann aber etwas dauern….
viele Grüße
Karl-Heinz
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige