Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
376to380
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
376to380
376to380
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

noch offen: Makroproblem Kommentar

noch offen: Makroproblem Kommentar
10.02.2004 16:05:14
Peter
Hallo zusammen,
leider habe ich keine Programmierkenntnisse und habe mir diese Routine aus der VBA-Hilfe und vielem Lesen der Forumsbeiträge zusammengestrickt.
Ich möchte die Bezeichnungen der Tage aus Tabelle 2 (Feiertage) dem entsprechenden Tag in Tabelle 1 (Kalender) als Kommentar zuweisen.
Hier die Tabelle:
https://www.herber.de/bbs/user/3529.xls
Dazu habe ich folgendes probiert, was aber nicht funktioniert. Was läuft hier falsch?
Sub Main()
Call KommentareEintragen
End Sub


Private Sub KommentareEintragen()
Dim TB As Worksheet
Dim q1 As Range, q2 As Range, q3 As Range, q4 As Range, Bereich As Range
Dim i%
Set TB = ThisWorkbook.Worksheets("Feiertage")
Set q1 = ThisWorkbook.Worksheets("Kalender").Range("C4:CO4")
Set q2 = ThisWorkbook.Worksheets("Kalender").Range("C8:CO8")
Set q3 = ThisWorkbook.Worksheets("Kalender").Range("C12:CP12")
Set q4 = ThisWorkbook.Worksheets("Kalender").Range("C16:CP16")
i = 5
Do Until IsEmpty(TB.Cells(i, 2))          'Datum Feiertage
Set Bereich = Union(q1, q2, q3, q4).Cells(TB.Cells(i, 2))
Bereich.NoteText TB.Cells(i, 3)       'Bezeichnung Feiertage
i = i + 1
Loop
i = 5
Do Until IsEmpty(TB.Cells(i, 5))          'Datum Spezielle Tage
Set Bereich = Union(q1, q2, q3, q4).Cells(TB.Cells(i, 5))
Bereich.NoteText TB.Cells(i, 6)       'Bezeichnung Spezielle Tage
i = i + 1
Loop
End Sub

Ideal wäre es, die "alten" Kommentare bei Änderung der Jahreszahl in Zelle A3 (Tabelle 1) zu löschen und dann die neuen Kommentare einzutragen. Eine Formatierungsmöglichkeit des Kommentars sollte auch möglich sein.
Kann mir hier jemand helfen?
Vielen Dank im Voraus
Gruß Peter

18
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: noch offen: Makroproblem Kommentar
11.02.2004 09:03:26
Danke
Danke für die Hilfe, werde ich mal versuchen auf meine Bedürfnisse umzustricken. Leider bin ich erst am Anfang, was VBA betrifft ... ich muss eben noch viel lernen ...
Gruß Peter
AW: noch offen: Makroproblem Kommentar
11.02.2004 11:50:27
Was macht ... for f=2 to r???
Hi,
nochmal eine Frage:
Bei 'Feiertage in Kommentarfenster eintragen
Was macht die Schleife ... for f=2 to r ???
r beschreibt die Zeile, in der deine Feiertage anfangen, was beschreibt f = 2???
Gruß Peter
Anzeige
uuups
11.02.2004 12:10:49
Peter
Sorry,
habe den Betreff vorhin in die Namenszeile geschrieben ...
Gruß Peter
AW: noch offen: Makroproblem Kommentar
10.02.2004 19:45:47
Alex K.
Hallo Peter,
habe deine Prozedur komplett umgeschrieben. So funktioniert es bei mir. Normalerweise geht es noch eleganter mit "Find(Datum)" anstat der Schleife "For each dat..." . Aber leider funktioniert bei mir der "Find(Datum)" Befehl nicht. Deshalb zur Sicherheit die Schleife.

Private Sub KommentareEintragen()
Dim kal As Worksheet
Dim dat As Range
Dim Bereich As Range
Dim i As Integer
With Application.Worksheets("Feiertage")
Set kal = Application.Worksheets("Kalender")
For Each Bereich In .Range("B5:B" & .Cells(.Rows.Count, 5).End(xlUp).Row _
& ", E5:E" & .Cells(.Rows.Count, 5).End(xlUp).Row)
For Each dat In kal.Range("C4:CP" & kal.Cells(kal.Rows.Count, 3).End(xlUp).Row)
If dat.Value = Bereich.Value Then
If dat.Offset(-1, 0).Comment Is Nothing Then
dat.NoteText Bereich.Offset(0, 1).Value
End If
Exit For
End If
Next dat
Next Bereich
End With
End Sub

Anzeige
AW: noch offen: Makroproblem Kommentar
11.02.2004 08:58:00
Danke :-)) funktioniert prächtig
Hallo Alex,
danke für die Routine, ich kapiere zwar noch nicht, wie sie mit den ranges arbeitet, aber da lese ich mich rein.
Gruß Peter
Danke für die Rückmeldung oT
11.02.2004 09:46:37
Alex K.
An Peter - Optimierte Lösung
11.02.2004 10:47:03
Alex K.
Hallo Peter,
habe endlich einen Weg gefunden, schnell und einfach nach Datum über VBA zu suchen. Deshalb hier meine optimierte Lösung für das Eintragen von Kommentaren. Zusätzlich werden bei einem Jahreswechsel die alten Kommentare gelöscht.

Private Sub KommentareEintragen()
Dim kal(1 To 4) As Range
Dim Bereich     As Range
Dim col         As Long
Dim i           As Integer
Dim com         As Comment
With Application.Worksheets("Kalender")
Set kal(1) = .Range("A4:CP4")
Set kal(2) = .Range("A8:CP8")
Set kal(3) = .Range("A12:CP12")
Set kal(4) = .Range("A16:CP16")
On Error Resume Next
'Alte Kommentare löschen nach Erstellung neues Jahr
For Each com In .Comments
com.Delete
Next com
End With
With Application.Worksheets("Feiertage")
For Each Bereich In .Range("B5:B" & .Cells(.Rows.Count, 5).End(xlUp).row _
& ", E5:E" & .Cells(.Rows.Count, 5).End(xlUp).row)
For i = 1 To 4
col = Application.WorksheetFunction.Match(Bereich.Value2, kal(i), 0)
If Err.Number <> 0 Then
Err.Clear
Else
Exit For
End If
Next i
If i <= 4 Then
kal(i).Cells(1, col).NoteText Bereich.Offset(0, 1).Value
End If
Next Bereich
End With
End Sub

Zusätzlich kannst du in VBA in der "Tabelle1" folgenden Code einfügen. Dieser bewirkt, dass bei einer Änderung des Jahreszahl in A3 automatisch die Feiertage neu eingetragen werden.

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Address = "$A$3" Then
Tabelle2.Main
End If
End Sub

Anzeige
AW: An Peter - Optimierte Lösung
11.02.2004 12:01:01
Super Engagement
Danke Alex,
werde ich gleich ausprobieren. Muss das Makro noch anpassen, weil ich unterhalb der Datumszeilen noch andere Zeilen habe (Urlaubsplaner ;-)),
Userbild

deshalb war auch mein Versuch, die Bereiche mit den Datumszeilen direkt anzusprechen.
Set q1 = ThisWorkbook.Worksheets("Kalender").Range("C4:CO4")
Set q2 = ThisWorkbook.Worksheets("Kalender").Range("C8:CO8")
Set q3 = ThisWorkbook.Worksheets("Kalender").Range("C12:CP12")
Set q4 = ThisWorkbook.Worksheets("Kalender").Range("C16:CP16")
Set Bereich = Union(q1, q2, q3, q4)
Leider hab ich dein Makro noch nicht so weit, dass es funktioniert :-((, aber irgendwie muss es ja gehen :-)), trotz meiner nichtvorhandenen VBA-Kenntnisse.
Also, nochmal vielen Dank für deine engagierte Hilfe
Gruß Peter
Anzeige
Super Engagement - Berichtigung
11.02.2004 12:06:12
Peter
Danke Alex,
werde ich gleich ausprobieren. Muss das Makro noch anpassen, weil ich unterhalb der Datumszeilen noch andere Zeilen habe (Urlaubsplaner ;-)),
Userbild

deshalb war auch mein Versuch, die Bereiche mit den Datumszeilen direkt anzusprechen.
Set q1 = ThisWorkbook.Worksheets("Kalender").Range("C5:CO5") '1. Quartal
Set q2 = ThisWorkbook.Worksheets("Kalender").Range("C28:CO28") '2. Quartal
Set q3 = ThisWorkbook.Worksheets("Kalender").Range("C51:CP51") '3. Quartal
Set q4 = ThisWorkbook.Worksheets("Kalender").Range("C74:CP74") '4. Quartal
Set Bereich = Union(q1, q2, q3, q4)
Leider hab ich dein Makro noch nicht so weit, dass es funktioniert :-((, aber irgendwie muss es ja gehen :-)), trotz meiner nichtvorhandenen VBA-Kenntnisse.
Also, nochmal vielen Dank für deine engagierte Hilfe
Gruß Peter
Anzeige
AW: Super Engagement - Berichtigung
11.02.2004 12:21:34
Alex K.
Hallo Peter,
zur Anpassung musst du nur die Zeilen mit den Datumswerten in den vier kal()-Ranges eintragen. Dann läuft es auf jeden Fall. Aber bitte nicht die Bereiche mit Union() zusammenfassen und dann versuchen, mit Match das Datum zu finden. Das läuft nicht!!!
Falls es wirklich nicht laufen sollte, dann sende lade die Datei noch einmal hoch, ich passe es dann entsprechend an. Würde mich nämlich ägern, wenn all die Mühe umsonst gewesen sein sollte :-)
Zusatz
11.02.2004 13:55:37
Peter
... ist mir schon fast peinlich, aber wie kann ich in deiner Routine auch noch Formatierungskriterien für das Kommentarfeld und den Test reinbringen?
Danke dir im Voraus
Gruß Peter
Kommentare schliessen gelöst
11.02.2004 15:09:21
Peter
Hi Alex,
das mit den offenstehenden Kommentaren hab ich gelöst.
...
If i <= 4 Then
q(i).Cells(1, col).NoteText Bereich.Offset(0, 1).Value
q(i).Cells(1, col).Select
q(i).Cells(1, col).Comment.Visible = False
End If
...
Gruß Peter
Kommentare ausblenden / Boxgröße
11.02.2004 18:11:59
Alex K.
Hallo Peter,
hier noch die angefragten Änderungen:

Sub KommentareEintragen()
Dim q(1 To 4) As Range
Dim Bereich     As Range
Dim col         As Long
Dim i           As Integer
Dim com         As Comment
With Application.Worksheets("Urlaubsplaner")
Set q(1) = .Range("C5:CO5")
Set q(2) = .Range("C28:CO28")
Set q(3) = .Range("C51:CP51")
Set q(4) = .Range("C74:CP74")
On Error Resume Next
'Alte Kommentare löschen nach Erstellung neues Jahr
For Each com In .Comments
com.Delete
Next com
End With
With Application.Worksheets("Feiertage")
For Each Bereich In .Range("B5:B" & .Cells(.Rows.Count, 5).End(xlUp).Row _
& ", E5:E" & .Cells(.Rows.Count, 5).End(xlUp).Row)
For i = 1 To 4
col = Application.WorksheetFunction.Match(Bereich.Value2, q(i), 0)
If Err.Number <> 0 Then
Err.Clear
Else
Exit For
End If
Next i
If i <= 4 Then
q(i).Cells(1, col).NoteText Bereich.Offset(0, 1).Value
With q(i).Cells(1, col).Comment.Shape
.Height = 15
.Width = 80
End With
'Ist normalerweise nicht nötig, da die Kommentare bei Neuanlage nicht
'angezeigt werden. Über das Menü "Ansicht -> Kommentare können
'alle Kommentar ein- bzw. ausgeblendet werden
q(i).Cells(1, col).Comment.Visible = False
End If
Next Bereich
End With
End Sub

Anzeige
Super, bin begeistert
12.02.2004 08:30:00
Peter
Hi Alex,
1000 Dank, es funktioniert genau so, wie ich mir es vorgestellt hatte.
Durch deine Hilfe habe ich als Neueinsteiger in VBA sehr viel gelernt.
Hut ab, vor so viel Engagement und Hilfsbereitschaft deinerseits!
Gruß Peter
Danke für die Rückmeldung
12.02.2004 09:58:03
Alex K.
Hallo Peter,
im Moment habe ich etwas Zeit und helfe gerne. Ich habe durch die paar Tage Hilfe mehr über Excel gelernt als in den Jahren zuvor. Vor allem, weil man in Bereich kommt, die man sonst nie benötigt hat.
Learning by doing :-)
AW: Danke für die Rückmeldung
12.02.2004 12:02:21
Peter
Hi Alex,
freut mich, dass auch du daraus profitieren konntest.
Gruß Peter

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige