expertenaustausch > microsoft.* > microsoft.excel

Harald Friis (07.05.2019, 19:30)
Hallo,

in einer Liste, die Dank dieser NG (und vor allem Dank Claus) schon sehr
viel besser geworden ist, gibt es mal wieder was zu tun.

Ein Gespräch wird in einer Datumsspalte und Personenzeile mit einem 'G'
und einem Kommentar dokumentiert. Dazu habe ich ein kleines Makro
zusammengepuzzelt, das über eine Tastenkombination ausgeführt wird. Ich
hänge es unten mal dran, es funktioniert genauso, wie es soll.

Jetzt kommt eine neue Anforderung. Statt des 'G'-Eintrags soll variabel
eine Uhrzeit eingetragen werden, dann ebenfalls der Kommentar. Am Ende
steht also in der aktiven Zelle z.B. '09:30' oder '14:00' oder irgendein
anderer Wert. Dann soll ein Kommentar (oder Notiz, wie das neuerdings
heißt) eingetragen werden, bei dem es den Default-Eintrag
'Einzelgespräch mit [User]' gibt, was aber geändert werden könnte.

Gibt es einen eleganten Weg, in einer Box sowohl die Uhrzeit als auch
den Inhalt des Kommentars abzufragen?

Herzlichen Dank im Voraus.

Gruß

Harald Friis

Sub G_Kommentar()
Dim msg As String, Kommentar As String

ActiveCell.FormulaR1C1 = "G"

With ActiveCell
If .Comment Is Nothing Then
msg = InputBox("Bitte den Kommentar eingeben.", "Kommentar
einfügen", "Einzelgespräch mit " & Application.UserName)
.AddComment
.Comment.Visible = False
.Comment.Text Text:=Application.UserName & ": " & Chr(10) & msg
Else
Kommentar = Selection.Comment.Text
msg = InputBox("Bitte der Kommentar eingeben.", "Kommentar
ergänzen")
.Comment.Text Text:=Kommentar & Chr(10) & Chr(10) &
Application.UserName & ": " & Chr(10) & msg
End If
End With
End Sub
Harald Friis (19.05.2019, 12:50)
Hallo,

hat jemand eine Idee? Geht das überhaupt per InputBox? Muss man da so
eine UserForm verwenden? Danke für Infos.

Gruß

Harald Friis

Am 07.05.2019 um 19:30 schrieb Harald Friis:
[..]
Claus Busch (19.05.2019, 13:19)
Hallo Harald,

Am Sun, 19 May 2019 12:50:15 +0200 schrieb Harald Friis:

> hat jemand eine Idee? Geht das überhaupt per InputBox? Muss man da so
> eine UserForm verwenden? Danke für Infos.


probiere es mal so für die Uhrzeit:

Dim Ein As String
Dim varTmp As Variant

Ein = Application.InputBox("Gebe hier deine Uhrzeit im Format hh.mm ein", "Uhrzeit", Type:=2)
If Ein <> "" And Ein <> "Falsch" Then
varTmp = Split(Ein, ".")
With ActiveCell
.Value = TimeSerial(varTmp(0), varTmp(1), 0)
.NumberFormat = "hh:mm"
End With
End If

Ich habe bewußt im Code die Uhrzeit mit Punkt eintragen lassen, weil ich
denke, dass das vom Schreiben her einfacher ist, als mit Doppelpunkt.

Mit freundlichen Grüßen
Claus
Claus Busch (19.05.2019, 13:22)
Hallo Harald,

Am Sun, 19 May 2019 13:19:40 +0200 schrieb Claus Busch:

> Ein = Application.InputBox("Gebe hier deine Uhrzeit im Format hh.mm ein", "Uhrzeit", Type:=2)
> If Ein <> "" And Ein <> "Falsch" Then
> varTmp = Split(Ein, ".")
> With ActiveCell
> .Value = TimeSerial(varTmp(0), varTmp(1), 0)
> .NumberFormat = "hh:mm"
> End With
> End If


oder:

Dim Ein As String

Ein = Application.InputBox("Gebe hier deine Uhrzeit im Format hh.mm ein", "Uhrzeit", Type:=2)
If Ein <> "" And Ein <> "Falsch" Then
With ActiveCell
.Value = TimeValue(Replace(Ein, ".", ":"))
.NumberFormat = "hh:mm"
End With
End If

Mit freundlichen Grüßen
Claus
Harald Friis (23.05.2019, 20:56)
Hallo Claus,

Am 19.05.2019 um 13:22 schrieb Claus Busch:
> Am Sun, 19 May 2019 13:19:40 +0200 schrieb Claus Busch:
>> Ein = Application.InputBox("Gebe hier deine Uhrzeit im Format hh.mm ein", "Uhrzeit", Type:=2) ....

> Ein = Application.InputBox("Gebe hier deine Uhrzeit im Format hh.mm ein", "Uhrzeit", Type:=2)


klappt beides, vielen Dank. Ich habe jetzt noch etwas weiter geforscht.
Zwei Input-Befehle gehen wohl nur über die Userform. Wenn ich es richtig
verstehe, ist die Definition der Variablen identisch, es werden dann nur
innerhalb der Userform die entsprechenden Abfrage-Boxen definiert.
Anfang Juni bin ich in Urlaub, da nehme ich es mal mit.

Danke für deine Hilfe, wie so oft.

Gruß

Harald Friis
Claus Busch (23.05.2019, 21:47)
Hallo Harald,

Am Thu, 23 May 2019 20:56:19 +0200 schrieb Harald Friis:

> klappt beides, vielen Dank. Ich habe jetzt noch etwas weiter geforscht.
> Zwei Input-Befehle gehen wohl nur über die Userform. Wenn ich es richtig
> verstehe, ist die Definition der Variablen identisch, es werden dann nur
> innerhalb der Userform die entsprechenden Abfrage-Boxen definiert.
> Anfang Juni bin ich in Urlaub, da nehme ich es mal mit.


was meinst du mit 2 Input-Befehle? Meinst du 2 verschiedene Eingaben,
die dann in verschiedene Zellen sollen?
Das geht auch mit einer Input-Box. Die beiden Werte müssen dann mit
einem Trennzeichen, z.B. Semikolon eingegeben werden.
Dann kann man den String der Input-Box am Trennzeichen splitten.
varTmp = Split(Ein,";")
Range("A1")=varTmp(0)
Range("B1")=varTmp(1)

Mit freundlichen Grüßen
Claus
Harald Friis (27.05.2019, 19:21)
Hallo Claus,

Am 23.05.2019 um 21:47 schrieb Claus Busch:

> was meinst du mit 2 Input-Befehle? Meinst du 2 verschiedene Eingaben,
> die dann in verschiedene Zellen sollen?
> Das geht auch mit einer Input-Box. Die beiden Werte müssen dann mit
> einem Trennzeichen, z.B. Semikolon eingegeben werden.
> Dann kann man den String der Input-Box am Trennzeichen splitten.
> varTmp = Split(Ein,";")
> Range("A1")=varTmp(0)
> Range("B1")=varTmp(1)


Die Idee von mir war: in der aktiven Zelle wird die Uhrzeit abgefragt
und gleichzeitig ein Kommentar eingetragen. Der Kommentar hat i.d.R.
einen Default-Text im Sinne von "Einzelgespräch bei [UserName]". So
machen wir das derzeit händisch. Die Uhrzeit eines Gesprächs eintragen
und dann in den Kommentar schreiben, mit wem das Gespräch stattfindet.
Das ist in den meisten Fällen der aktive User, ggf. aber auch eine
Vertretung. Deshalb der Kommentar nur als Default mit der Möglichkeit
der Veränderung.

Wegen der Übersichtlichkeit müssten es also zwei getrennte Einträge sein:

'Uhrzeit: ____________'
'Kommentar: Einzelgespräch bei Claus Busch'

Ich habe gelesen, dass dies nur über UserForm geht. Jetzt lese ich von
dir zum ersten Mal, dass auch verschiedene Eingaben, dann aber wohl in
eine Zeile möglich sind. Das ist allemal eine interessante Info, vielen
Dank dafür.

Gruß

Harald Friis
Claus Busch (27.05.2019, 20:42)
Hallo Harald,

Am Mon, 27 May 2019 19:21:54 +0200 schrieb Harald Friis:

> Wegen der Übersichtlichkeit müssten es also zwei getrennte Einträge sein:
> 'Uhrzeit: ____________'
> 'Kommentar: Einzelgespräch bei Claus Busch'
> Ich habe gelesen, dass dies nur über UserForm geht. Jetzt lese ich von
> dir zum ersten Mal, dass auch verschiedene Eingaben, dann aber wohl in
> eine Zeile möglich sind.


probiere es mal so:

Sub UhrUndKommentar()
Dim Ein As String
Dim varTmp As Variant

Ein = Application.InputBox("Gebe die Uhrzeit und den Kommentar
semikolon-getrennt ein" _
, "Uhrzeit und Kommentar", Default:="07:00;Einzelgespräch bei", Type:=2)

If Ein <> "" And Ein <> "Falsch" Then
varTmp = Split(Ein, ";")
With ActiveCell
.Value = TimeValue(varTmp(0))
.NumberFormat = "hh:mm"
.AddComment varTmp(1)
End With
End If
End Sub

Man kann aber auch eine InputBox für die Uhrzeit erstellen und dann beim
Übertrag in die Zelle eine zweite InputBox für den Kommentar aufpoppen
lassen.

Mit freundlichen Grüßen
Claus
Harald Friis (20.06.2019, 17:56)
Hallo,

hat etwas gedauert mit der Antwort, sorry:

Am 27.05.2019 um 20:42 schrieb Claus Busch:

[..]
> End With
> End If
> End Sub


im Urlaub habe ich mal mit der von mir schon erwähnten UserForm
herumgespielt. Vorteil ist, dass du wirklich diverse getrennte Eingaben
erfassen und verarbeiten kannst.

Die UserForm wird über ein klitzekleines Makro gestartet:

Sub Uhrzeit()

'Starten der UserForm "FormUhrzeit"

FormUhrzeit.Show

End Sub

Die UserForm wird Datei/Einfügen/UserForm mehr oder minder händisch
zusammengebaut. Die einzelnen Elemente werden dann gesteuert durch
Private Sub:

Private Sub UserForm_Initialize()

FormUhrzeit.Text_Kommentar.Value = "Einzelgespräch mit " &
Application.UserName

End Sub
Private Sub Text_Uhrzeit_Change()

'Eingabe Uhrzeit in richtiges Format

If Text_Uhrzeit.Tag <> "1" = True Then
If Len(Text_Uhrzeit) = 2 Then
If InStr(Text_Uhrzeit, ":") = 0 Then
' Doppelpunkt nach 2 Zeichen, falls noch nicht vorhanden
Text_Uhrzeit = Text_Uhrzeit & ":"
End If
End If
End If
End Sub

Private Sub Button_Cancel_Click()

' Eingabefenster schließen

Unload FormUhrzeit

End Sub

Private Sub Button_OK_Click()

'Eingaben in die aktive Zelle einfügen

Dim msg As String, Kommentar As String

ActiveCell = CDate(FormUhrzeit.Text_Uhrzeit.Value)
ActiveCell.NumberFormat = "hh:mm"

With ActiveCell
If .Comment Is Nothing Then
msg = FormUhrzeit.Text_Kommentar.Value
.AddComment
.Comment.Visible = False
.Comment.Text Text:=Application.UserName & ": " & vbCrLf & msg
Else
Kommentar = Selection.Comment.Text
msg = FormUhrzeit.Text_Kommentar.Value
.Characters.Font.Bold = False
.Comment.Text Text:=Kommentar & vbCrLf & vbCrLf &
Application.UserName & ": " & vbCrLf & msg

End If

End With

Unload FormUhrzeit

End Sub

Funktioniert ziemlich gut, allein das Formatieren der Kommentarfelder
will mir noch nicht so recht gelingen. Ansonsten habe ich die Funktionen
scharf geschaltet und bislang keine Klagen gehört ;-)

Danke - wieder einmal und wieder einmal ernst gemeint und von Herzen
kommend - dir für deine Unterstützung.

Gruß

Harald Friis
Ähnliche Themen