Anzeige
Archiv - Navigation
1552to1556
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

Erweiterung eines Makros um eine Messagebox

Erweiterung eines Makros um eine Messagebox
28.04.2017 10:59:47
Jenny
Hallo an euch alle,
habe soweit unten stehendes, funktionierendes Makro.
Ich würd das Ganze alllerdings um eine Messagebox erweitern und bitte um eure Hilfe da ich sowas noch nie gemacht habe.
Es geht darum, dass wie ihr sicher seht 9 Adressen von Hyperlinks nach Tabelle2 kopiert werden.
Ich suche eine Möglichkeit, dass wenn weniger als 9 Adressen da sind (weniger als 9 in den Zellen in denen das Makro sucht, nicht in der gesamten Spalte) dass ich dann ne Meldung bekomme und entscheiden kann ob trotzdem kopieren oder abbrechen.
Ist das machbar?
Danke für eure Hilfe
Jenny
PS: Da ich heut Geburtstag hab und mitten in den Vorbereitungen stecke, eilt es nicht ganz so.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim lngZeile As Long
Dim lngZiel As Long
Dim shaShape As Shape
If Target.Cells(1).Address(False, False) = "A1" Then
With Worksheets("Tabelle2")
If .Range("A1") = "" Then
lngZiel = 1
Else
lngZiel = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 1).End(xlUp).  _
_
Row, .Rows.Count) + 1
End If
For lngZeile = 8 To 104 Step 12
If Cells(lngZeile, 1).Hyperlinks.Count > 0 Then
.Cells(lngZiel, 1) = Cells(lngZeile, 1).Hyperlinks(1).Address
lngZiel = lngZiel + 1
End If
Next lngZeile
End With
Application.EnableEvents = False
ActiveSheet.Cells.Clear
Application.EnableEvents = True
For Each shaShape In ActiveSheet.Shapes
shaShape.Delete
Next shaShape
End If
End Sub

16
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Nachtrag
28.04.2017 11:21:09
Jenny
Ich stelle leider gerade fest, dass sich die Datenquelle im Internet geändert hat, seit ich das Makro zum letzten mal benutzt habe.
Das heißt auch das bisherige Makro müsste geändert werden, bzw. brauche eure Hilfe dabei.
Bislang sind ja die Zeilen festgelegt, aus denen das Makro die Adressen holt.
Geht einfach in Zukunft, das jeder zweite (also der 1. 3. 5. 7. usw.) Hyperlink genommen wird, egal in welcher Zelle er steht?
Das mit der Messagebox hat sich dann damit erledigt.
Gruß
Jenny
AW: Nachtrag
28.04.2017 11:33:53
EtoPHG
Hallo Jenny,
Das ändert alles ;-)
...aber auch ab Zeile 8 bis 104 ?
Und maximal 9? oder mit jeder zweiten wären es dann maximal 49?
Also bitte nochmals über die Bücher und die Fragen beantworten, die Torte muss warten!
Gruess Hansueli
Anzeige
AW: Nachtrag
28.04.2017 12:25:50
Jenny
Hallo Hansueli,
das stimmt leider diese Feststellung das das bisherige Makro nicht mehr zu gebrauchen ist hat alles über den Haufen geworfen.
Es soll zukünftig von Zeile 1 bis 104 gehen und im Regelfall also 99% der Fälle sollten es 9 Hyperlinks sein (insgesamt 18 aber es soll ja nur jeder 2. genommen werden).
Die Tabelle besteht nur aus Texten mit Hyperlinks und Bildern. und ner menge Leerzellen dazwischen.
In den anderen 1% der Fälle sind es weniger als 9, auf keinen Fall mehr.
Danke
Jenny
AW: Erweiterung eines Makros um eine Messagebox
28.04.2017 11:29:39
EtoPHG
Hallo Jenny,
Herzlichen Glückwunsch, Sie haben eine Gratisprogrammierung gewonnen ;-)
Private Sub Worksheet_Change(ByVal Target As Range)
Dim lngZeile As Long
Dim lngZiel As Long
Dim copyCount As Long
Dim doCopy As Boolean
Dim shaShape As Shape
If Target.Cells(1).Address(False, False) = "A1" Then
With Worksheets("Tabelle2")
If .Range("A1") = "" Then
lngZiel = 1
Else
lngZiel = IIf(IsEmpty(.Cells(.Rows.Count, 1)), _
.Cells(.Rows.Count, 1).End(xlUp).Row, _
.Rows.Count) + 1
End If
' Test wieviel Hyperlinks kopiert werden.
' Abfrage wenn weniger wie 9, trotzdem kopieren
For lngZeile = 8 To 104 Step 12
If Cells(lngZeile, 1).Hyperlinks.Count > 0 Then _
copyCount = copyCount + 1
Next lngZeile
doCopy = copyCount = 9
If Not doCopy Then
doCopy = (vbYes = MsgBox("Es würden nur " & copyCount & _
" Links kopiert!" & vbCrLf & _
"Wollen Sie trotzdem kopieren?", _
vbYesNo + vbExclamation, "Kopieren?"))
End If
If doCopy Then
For lngZeile = 8 To 104 Step 12
If Cells(lngZeile, 1).Hyperlinks.Count > 0 Then
.Cells(lngZiel, 1) = Cells(lngZeile, 1).Hyperlinks(1).Address
lngZiel = lngZiel + 1
End If
Next lngZeile
End If
End With
Application.EnableEvents = False
ActiveSheet.Cells.Clear
Application.EnableEvents = True
For Each shaShape In ActiveSheet.Shapes
shaShape.Delete
Next shaShape
End If
End Sub
Gruess Hansueli
Anzeige
AW: Erweiterung eines Makros um eine Messagebox
28.04.2017 13:24:41
Jenny
Hallo Hansueli,
da ist jetzt aber mein Nachtrag noch nicht dabei oder?
Gruß
Jenny
AW: Erweiterung eines Makros um eine Messagebox
28.04.2017 14:24:28
EtoPHG
Hallo Jenny,
ändere die beiden Codezeilen:
For lngZeile = 8 To 104 Step 12

in
For lngZeile = 1 To 104 Step 2

Gruess Hansueli
AW: Erweiterung eines Makros um eine Messagebox
28.04.2017 14:33:47
Jenny
Hallo Hansueli,
ich fürchte da gab es ein Missverständnis.
For lngZeile = 1 To 104 Step 2
sagt doch jede 2. Zeile oder?
Ich meinte jedoch jeden zweiten Hyperlink, unabhängig von der Zeile, in der er steht.
Man kann jedoch ausschließen dass es weiter als Zeile 104 geht, daher kann man diesen Rahmen beibehalten.
Ich weiß das ist was völlig anderes als das ursprüngliche Makro, aber das meinte ich ja damit dass mein Test alles über den haufen geworfen hat.
Gruß
Jenny
Anzeige
AW: Erweiterung eines Makros um eine Messagebox
28.04.2017 14:53:22
EtoPHG
Dann halt so:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim lngZeile As Long
Dim lngZiel As Long
Dim copyCount As Long
Dim doCopy As Boolean
Dim flipflop As Boolean
Dim shaShape As Shape
If Target.Cells(1).Address(False, False) = "A1" Then
With Worksheets("Tabelle2")
If .Range("A1") = "" Then
lngZiel = 1
Else
lngZiel = IIf(IsEmpty(.Cells(.Rows.Count, 1)), _
.Cells(.Rows.Count, 1).End(xlUp).Row, _
.Rows.Count) + 1
End If
' Test wieviel Hyperlinks kopiert werden.
' Abfrage wenn weniger wie 9, trotzdem kopieren
For lngZeile = 1 To 104
If Cells(lngZeile, 1).Hyperlinks.Count > 0 Then
flipflop = Not (flipflop)
If flipflop Then copyCount = copyCount + 1
Next lngZeile
doCopy = copyCount = 9
If Not doCopy Then
doCopy = (vbYes = MsgBox("Es würden nur " & copyCount & _
" Links kopiert!" & vbCrLf & _
"Wollen Sie trotzdem kopieren?", _
vbYesNo + vbExclamation, "Kopieren?"))
End If
flipflop = False
If doCopy Then
For lngZeile = 1 To 104
If Cells(lngZeile, 1).Hyperlinks.Count > 0 Then
flipflop = Not (flipflop)
If flipflop Then
.Cells(lngZiel, 1) = Cells(lngZeile, 1).Hyperlinks(1).Address
lngZiel = lngZiel + 1
End If
End If
Next lngZeile
End If
End With
Application.EnableEvents = False
ActiveSheet.Cells.Clear
Application.EnableEvents = True
For Each shaShape In ActiveSheet.Shapes
shaShape.Delete
Next shaShape
End If
End Sub
Das wird ein teurer Geburtstag :-)
Gruess Hansueli
Anzeige
Korrektur der Erweiterung...
28.04.2017 15:20:41
EtoPHG
Hallo,
Nach

If flipflop Then copyCount = copyCount + 1
fehlt noch ein
                End If
Gruess Hansueli
AW: Korrektur der Erweiterung...
28.04.2017 16:36:12
Jenny
Auf jeden Fall danke für das Geschenk,
komme aber wegen den Vorbereitungen erst später zum testen.
Gruß
Jenny
AW: Korrektur der Erweiterung...
28.04.2017 17:42:51
Jenny
Hallo Hansueli,
ich blicke nicht mehr durch
Ich hab jetzt das Makro in Tabelle2 gepackt und es sagt mir es würden nur 10 Links kopiert werden,
dabei sind es doch nur 9 Links die kopiert werden sollen
Außerdem blicke ich nicht mehr durch, wohin das Makro die Links kopiert.
https://www.herber.de/bbs/user/113184.xlsm
Da mal eine Beispieldatei
die Adressen der Hyperlinks die linksbündig da stehen, also der 1. 3. 5. 7. usw soll nach Tabelle1 kopiert werden.
Und so dass sich das wiederholen lässt also ich mehrere Texte einfügen kann und alle Links von allen Texte untereinander eingefügt werden.
Der einzige Unterschied zu dem was ich vorher hatte ist, dass man es nicht mehr auf feste Zellen festlegen kann.
Gruß
Jenny
Anzeige
Ein Durcheinander, nun aufgeräumt,
01.05.2017 09:22:04
EtoPHG
Hallo Jenny oder Christian oder wer auch immer,
1. Der Code gehört in Tabelle1 und nicht Tabelle2
2. Muss in der Tabelle2 die Zelle A1 verändert werden, obwohl ich nicht ganz verstehe, warum du das Änderungsereignis zum Auslösen des Codes anwendest, ich würde das eher auf ein Doppelklick-Ereignis oder einen Button legen.
3. Werden jetzt unabhängig von den Abständen oder Leerzeilen, einfach die Hyperlink-Adressen nach Tabelle2 kopiert, die nicht eingerückt sind!
Private Sub Worksheet_Change(ByVal Target As Range)
Dim lngZeile As Long
Dim lngZiel As Long
Dim copyCount As Long
Dim doCopy As Boolean
Dim shaShape As Shape
If Target.Cells(1).Address(False, False) = "A1" Then
With Worksheets("Tabelle2")
If .Range("A1") = "" Then
lngZiel = 1
Else
lngZiel = IIf(IsEmpty(.Cells(.Rows.Count, 1)), _
.Cells(.Rows.Count, 1).End(xlUp).Row, _
.Rows.Count) + 1
End If
' Test wieviel Hyperlinks kopiert werden.
' Abfrage wenn weniger oder mehr wie 9, trotzdem kopieren
For lngZeile = 1 To 104
If Cells(lngZeile, 1).Hyperlinks.Count > 0 Then
If Cells(lngZeile, 1).IndentLevel = 0 Then copyCount = copyCount + 1
End If
Next lngZeile
doCopy = copyCount = 9
If Not doCopy Then
doCopy = (vbYes = MsgBox("Es würden " & copyCount & _
" Links kopiert!" & vbCrLf & _
"Wollen Sie trotzdem kopieren?", _
vbYesNo + vbExclamation, "Kopieren?"))
End If
If doCopy Then
For lngZeile = 1 To 104
If Cells(lngZeile, 1).Hyperlinks.Count > 0 Then
If Cells(lngZeile, 1).IndentLevel = 0 Then
.Cells(lngZiel, 1) = Cells(lngZeile, 1).Hyperlinks(1).Address
lngZiel = lngZiel + 1
End If
End If
Next lngZeile
End If
End With
Application.EnableEvents = False
ActiveSheet.Cells.Clear
Application.EnableEvents = True
For Each shaShape In ActiveSheet.Shapes
shaShape.Delete
Next shaShape
End If
End Sub
Gruess Hansueli
Anzeige
AW: Ein Durcheinander, nun aufgeräumt,
01.05.2017 10:01:24
Jenny
? Wie kommst du auf Christian?
aso, der Autor der Datei, oder was meinst du?
Ja saß am Laptop von meinem Mann als ich die Bsp Datei gemacht habe.
Allerdings zu dem Makro,
ich bekomme die Meldung das 10 Links kopiert würden,
wenn ich ja klicke, wird der erste Link 2x in Tab2 eingetragen, die 8 weiteren Links nur einmal.
Was klappt, ist das jetzt die richtigen Links ausgewählt werden.
Danke schonmal für die Mühe
JENNNY!!!!!!!!!!!!!
Weil du den Link 1 in 2 Zellen hast,
01.05.2017 11:07:57
EtoPHG
Jenny,
Das ist der Grund. Nämlich in A1 (ohne Text) und in A8
Wenn du A1 löschst, werden genau 9 Links kopiert!
Gruess Hansueli
Anzeige
AW: Weil du den Link 1 in 2 Zellen hast,
01.05.2017 11:23:00
Jenny
Hallo Hansueli,
siehst du mal das war mir gar nicht aufgefallen.
Hab jetzt 3 Möglichkeiten, wie du sagst die Zeile von Hand löschen,
2. in Tab2 Duplikate zu entfernen
3. das Makro fügt den doppelten Link nur einmal ein.
Bevorzugen würde ich natürlich den 3. Fall
habe mir dann gedacht, du änderst dann einfach das Makro an beiden Stellen in
For lngZeile = 2 To 104
aber dann werden immer noch 10 Links kopiert.
Du musst das so sehen, das sind Inhalte von ca. 1300 Seiten und der einzige Zweck der Datei ist die Hyperlinks zu sammeln. Daher mache ich es auch vollautomatisch statt über eine Schaltfläche oder eine Tastenkombi, es geht bei sovielen Seiten einfach deutlich schneller.
Gruß
Jenny
Anzeige
sorry Dummheitsfehler von mir
01.05.2017 11:28:40
mir
hab das Makro in der Testdatei geändert aber dann in der Originaldatei getestet,
dann ist ja klar dass er weiterhin 10 Links kopiert.
Jetzt mit der geänderten Originaldatei klappt es natürlich.
Gruß
Jenny

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige