echo ("viewtopic_body.html wird ausgeführt!\n");

Was Notepad kann, ...

Beinahe hätte ich sie vergessen: Bill Gates' Schreibmaschine! Von vielen Nutzern seit seinem ersten Marktauftritt als "Multi-Tool Word" vor ziemlich genau 40 Jahren auch heute noch oft wie die mechanische Vorgängerin genutzt (nur Korrekturfluid sieht man endlich nicht mehr auf den Bildschirmen), ist Textverarbeitung wohl das Essential auf einem PC.
d'r Bastler
Beiträge: 927
Registriert: 29. Aug 2022, 13:20
Hat sich bedankt: 255 Mal
Danksagung erhalten: 134 Mal

Was Notepad kann, ...

#1

Beitrag von d'r Bastler »

... kann Word auch, wenn auch ein wenig komplizierter.

Moin allerseits,
nebenan gab es die nette Aufgabe für ein -von mehreren Personen fortlaufend geführtes- Protokoll eine laufende Nummer der Einträge zu generieren. Der Windows-Dino Notepad.exe kann das zumindest aktuelles Datum und Zeit, wenn man einfach nur einen Punkt als erster Zeichen liegen lässt.

Hier geht's ein bisschen weiter: Beim Öffnen der Datei werden Benutzername: die lfd.Nr. des Tages, die Uhrzeit hh:mm mit abschließendem Zeilenumbruch eingefügt und der Cursor am Beginn des neuen Eintrags platziert. Vorheriger Text wird nach unten verschoben.

Der Code gehört in ein allg. Modul des aktuellen Dokuments und wird in ThisDocument mit

Code: Alles auswählen

Private Sub Document_Open()
    Call LastEdit
End Sub
aufgerufen.

Code: Alles auswählen

Public Sub LastEdit()
Dim iDay As Integer, sDay As String, rng As Range

iDay = DateDiff("d", DateSerial(Year(Date), 1, 1), Date) + 1
    
    sDay = iDay
    If iDay < 10 Then
        sDay = "00" & iDay
    ElseIf iDay < 100 Then
        sDay = "0" & iDay
    End If
    
sDay = Environ$("USERNAME") & ": " & sDay & "-" & Format(Time, "hh:mm")
    
Set rng = ActiveDocument.Range(0, 0)
With rng
    .InsertBefore sDay & vbCrLf & vbCrLf
    .MoveEnd Unit:=wdParagraph, Count:=1
End With

With ActiveDocument.Paragraphs(2).Range
    .Collapse Direction:=wdCollapseStart
    .Select
End With

End Sub
Ergebnis in der ersten Zeile d'r Bastler: 169-12:07

Wer nur lesen will, tut das ohne das Dokument am Ende zu speichern. Wer ergänzen will, speichert.

Viel Spaß damit!
d'r Bastler von den VBAsteleien.de
Win 10 + Office 2019 pro [32] & Win11 + Office 2024 pro [64] & macOS.X15 + Office2019 pro & Android12 & XL365
knobbi38
Beiträge: 86
Registriert: 20. Okt 2024, 14:15
Hat sich bedankt: 9 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Was Notepad kann, ...

#2

Beitrag von knobbi38 »

Hallo,

reichen da nicht die Feldfunktionen SaveDate und LastSaveBy ?

Gruß Knobbi38
d'r Bastler
Beiträge: 927
Registriert: 29. Aug 2022, 13:20
Hat sich bedankt: 255 Mal
Danksagung erhalten: 134 Mal

Re: Was Notepad kann, ...

#3

Beitrag von d'r Bastler »

Moin Knobbi,

LastSavedBy und SaveDate beziehen sich auf den jeweils vorherigen Stand.

Hier geht es aber darum den aktuellen Doc-Öffner mit einem Zeitstempel in die erste Zeile zu schreiben und damit Gelegenheit zu geben quasi direkt unter seiner Signatur den Text zu ergänzen. Die beiden Feldfunktionen sind da noch nicht aktualisiert.

Will einer nur lesen, steigt er einfach wieder aus.

Mein Code oben ist dennoch ein Schnellschuss mit -wie heißt es so schön?- Optimierungspotential :mrgreen: Eine Version mit Userform und eleganterem Code für z.B. die führenden Nullen bei der Tagesnr. usw.

Das gibt's dann morgen

Schönen Amnd noch!
d'r Bastler von den VBAsteleien.de
Win 10 + Office 2019 pro [32] & Win11 + Office 2024 pro [64] & macOS.X15 + Office2019 pro & Android12 & XL365
knobbi38
Beiträge: 86
Registriert: 20. Okt 2024, 14:15
Hat sich bedankt: 9 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Was Notepad kann, ...

#4

Beitrag von knobbi38 »

Hallo d'r Bastler,

hier mal ein etwas andere Ansatz. Die Info wird beim Öffnen jeweils aktualisiert und als "Document Variable" bereitgestellt, man könnte ebenso auch eine "Custom Document Property" dafür verwenden. Der Vorteil dabei ist, daß diese Information jetzt per Feld überall im Dokument angezeigt werden kann, ohne dass die Einfügestelle im Code festgelegt werden muß.

Code: Alles auswählen

' Klasse: ThisDocument

Option Explicit

Private Sub Document_Open()
  Dim strDocValue As String
  
  Const DOC_VAR_NAME As String = "EditInfo"
  
  strDocValue = _
      GetUserFullName & ";" _
      & Format$(DatePart("y", Date), "000\-") _
      & Format$(Time(), "hh:nn")
  
  On Error Resume Next
  Me.Variables(DOC_VAR_NAME).Delete
  On Error GoTo 0
  
  Me.Variables.Add DOC_VAR_NAME, strDocValue
  Me.Fields.Update
End Sub
Angezeigt wird übrigens der FullName des Benutzers (GetUserFullName()) und nicht nur der Loginname, der könnte ja manchmal auch kryptisch sein. ;)

Hier noch eine vereinfachte Funktion, welche den Tag des Jahres als numerischen Wert zurück gibt:

Code: Alles auswählen

Public Function DayOfYear(Optional ByVal Value As Date) As Long
  If Int(Value) = 0 Then Value = Date
  DayOfYear = DatePart("y", Value)
End Function

Gruß Knobbi38
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste