Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1348to1352
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

Frage zu Makro

Frage zu Makro
16.02.2014 10:02:43
Christian
Hallo alle zusammen,
habe eine Frage zu unten stehendem Makro. Gibt es da eine Beschränkung, auf welche Zeilen sich das Makro in Tabelle Hyperlinks Spalte D und E, bzw. Tabelle4 Spalte A bezieht?
Oder wird einfach jede Zeile genommen, die in den entsprechenden Zellen einen Inhalt hat, unabhängig davon wieviele es sind?
Eine andere Frage noch, in meiner Tabelle4 gibt es einige Leerzeilen in Spalte A, lässt sich das Ausführen des Makros beschleunigen, wenn ich die Tabelle so sortiere, das keine Leerzellen zwischen den Zellen mit Inhalt vorhanden sind?
Danke
Christian
Option Explicit
Public Sub SearchHyperlinks()
Dim lngRow As Long
Dim objCell As Range
Dim objRegEx As Object, objMatch As Object
Dim strSearchName As String, strFoundName As String
Dim strFirstAddress As String, strHyperlinkAddress As String
Dim strSearch2 As String
With Application
.Calculation = xlCalculationManual
.EnableEvents = False
.ScreenUpdating = False
End With
Set objRegEx = CreateObject("VBScript.RegExp")
With Worksheets("Hyperlinks")
For lngRow = 1 To .Cells(.Rows.Count, 2).End(xlUp).row
strSearchName = Trim$(.Cells(lngRow, 4).Value)
strSearch2 = Trim$(.Cells(lngRow, 5).Value)
If strSearchName  vbNullString Then
With Worksheets("Tabelle4")
Set objCell = .Columns(1).Find(What:=strSearchName, _
After:=.Cells(.Rows.Count, 1), _
LookIn:=xlValues, LookAt:=xlPart, MatchCase:=False)
End With
If Not objCell Is Nothing Then
strFirstAddress = objCell.Address
Do
If objCell.Hyperlinks.Count  0 _
And InStr(1, objCell.Text, strSearch2) > 0 Then
If InStr(objCell.Hyperlinks.Item(1).Address, "profile.php") Then
strHyperlinkAddress = Split(objCell.Hyperlinks.Item(1).Address, "&")(0)
Else
strHyperlinkAddress = Split(objCell.Hyperlinks.Item(1).Address, "?")(0)
End If
strFoundName = Trim$(objCell.Value)
If strFoundName  strSearchName Then
With objRegEx
.IgnoreCase = True
.Pattern = "^" & strSearchName & " | " & strSearchName & "$" _
_
_
_
_
Set objMatch = .Execute(strFoundName)
End With
If objMatch.Count = 1 Then
If objMatch.Item(0).Value = strSearchName & " " Or _
objMatch.Item(0).Value = " " & strSearchName Then _
Call WriteLink(strHyperlinkAddress, lngRow)
End If
Else
Call WriteLink(strHyperlinkAddress, lngRow)
End If
End If
Set objCell = Worksheets("Tabelle4").Columns(1).FindNext(objCell) ' _
Loop Until objCell.Address = strFirstAddress
End If
End If
Next
End With
Set objCell = Nothing
Set objMatch = Nothing
Set objRegEx = Nothing
With Application
.Calculation = xlCalculationAutomatic
.EnableEvents = True
.ScreenUpdating = True
End With
End Sub
Private Sub WriteLink( _
ByVal pvstrHyperlinkAddress As String, _
ByVal pvlngRow As Long)
Dim lngColumn As Long
Dim blnFound As Boolean
With Worksheets("Hyperlinks")
For lngColumn = 3 To .Cells(pvlngRow, .Columns.Count).End(xlToLeft).Column
If .Cells(pvlngRow, lngColumn).Value = pvstrHyperlinkAddress Then
blnFound = True
Exit For
End If
Next
If Not blnFound Then
lngColumn = WorksheetFunction.Max(4, _
.Cells(pvlngRow, .Columns.Count).End(xlToLeft).Column + 1)
.Cells(pvlngRow, lngColumn).Value = pvstrHyperlinkAddress
End If
End With
End Sub

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

Betreff
Datum
Anwender
Anzeige
AW: Frage zu Makro
16.02.2014 10:46:32
Matze
Hallo,
For lngRow = 1 To .Cells(.Rows.Count, 2).End(xlUp).row
strSearchName = Trim$(.Cells(lngRow, 4).Value)
strSearch2 = Trim$(.Cells(lngRow, 5).Value)
lngRow ist hier Maßgebend, die 1.te bis letzte Zeile aus Spalte 2(B) ZB 1-10
strSearchName würde hier Zeile 1-10 , Spalte 4(D)
strSearch2 würde hier Zeile 1-10, Spalte 5(E)
betreffen

AW: Frage zu Makro
16.02.2014 10:52:36
Christian
Hallo,
danke erstmal,
eins wundert mich jetzt, da Makro funktioniert. Jedoch stehen die relevanten Daten in Spalte A, nicht in Spalte B.
Habe ich dich also dann richtig verstanden, es bezieht sich auf alle Zeilen, unabhängig davon, wieviele.
Eine Frage ist mir in der Zwischenzeit noch gekommen, gibt es eine Möglichkeit, da irgend etwas einzubauen, dass nach dem was bislang da steht, die Datei unter dem bereits bestehenden Namen und dem bestehenden Speicherort speichert und Windows herunterfährt?
Gruß
Christian

Anzeige
AW: Frage zu Makro
16.02.2014 11:12:14
Matze
Hallo Christian,
diese Zeile
For lngRow = 1 To .Cells(.Rows.Count, 2).End(xlUp).row
ermittelt mit .Rows.Count,2 die letzte Zeile in Spalte B, das ist dann die ANZAHL
der der Schleifen durchlaufs For lngRow = 1 to ANZAHL
vermutlich ist Spalte B die längste Spalte um sicher zu gehen das er "Alle" Spalten durchläuft.
Auch das kannst du selber testen indem du die 2 in der Zeile in eine 1 umstellst.
Zum speichern: im oberen Makro unten vor

Sub End
ActiveWorkbook.Save 'oder teste Thisworkbook.Save
Thisworkbook.closed 'schließt die Mappe
End Sub
Was runterfahren des PC´s betrifft hab ich keinen Schimmer, da müssen die Experten ran.

Anzeige
Ooops, .closed zu .close machen owT
16.02.2014 11:20:16
Matze

AW: Frage zu Makro
16.02.2014 11:22:21
Christian
Hallo Matthias,
nein das ist dann egal, in der Tabelle Hyperlinks, gibts genauso viele Einträge in Spalte A wie in Spalte B.
Mir geht's ja darum, dass ich wenn ich mit dem Bearbeiten der Tabelle fertig bin, ich nicht das Makro abwarten muss, sondern einkaufen gehen, kann Sport treiben, Schach spielen, schlafen gehen, was auch immer und nicht abwarten muss bis das Makro beendet ist um das Laptop herunterzufahren (Ausfführung kann bei der Größe der Tabelle durchaus mal 20 Minuten dauern.)
Also nur alleine speichern und beenden nutzt mir nichts.
Gruß
Christian

Anzeige
Ich such mal im Google Laden, oder in
16.02.2014 11:35:16
Matze
der Recherche, kann eine Weile dauern,
huch das ist es schon: http://www.activevb.de/tipps/vb6tipps/tipp0418.html
ACHTUNG HINWEIS : FÜR SCHÄDEN WIRD NICHT GEHAFTET der PC fährt Gnadenlos runter.
solche Suche kannste eigentlich allein erledigen,oder? Ich würd es NICHT machen,
soviel Strom frist der PC nicht , kannst ja vorher noch den Monitor ausmachen.
Matze

so gehts natürlich auch ;-) ...owT
16.02.2014 11:42:33
Oberschlumpf

bissel Übertrieben Lach,...Thorsten ...owT
16.02.2014 11:51:54
Matze

AW: Ich such mal im Google Laden, oder in
16.02.2014 11:43:31
Christian
und wie bekomme ich das jetzt da eingebaut, hab das jetztt versucht anstelle von ThisWorkbook.Close
dann sagt er bei Optoion Explicit es wäre innerhalb einer Prozedur ungültig. Lösche ich das, sagt er bei private const ungültiges Attribut in Sub oder Function.
Die 5 Bausteine die mit Private Declare Function anfangen sind bei mir rot geschrieben.
Ich fürchte ich brauche jemanden der diese beiden Makros verbinden kann.
Gruß
Christian

Anzeige
AW: Frage zu Makro
16.02.2014 11:46:40
Christian
also du meinst, die Zeile Shell "shutdown.exe -s -f" in das Makro einfügen, nach Matzes Zeile, die die Mappe speichert?

erst mal meine ich...
16.02.2014 12:02:04
Oberschlumpf
Hi Christian
...das eine Anrede von dir in jedem deiner Beiträge erforderlich is.
Wenn ich NUR eine Frage sehe, fühl ich mich wie n Roboter - oder mein Chef spricht auch so manchmal mit mir...aber damit der das darf, beazahlt er mich.
Deine Frage:
also du meinst, die Zeile Shell "shutdown.exe -s -f" in das Makro einfügen, nach Matzes Zeile, die die Mappe speichert?
meine Frage:
Warum probierst du es nicht aus, bevor du fragst - dann siehst du doch, was passiert.
meine Antwort:
besser wäre es vllt, die Shell-Zeile unterhalb der Zeile von Matzes Zeile zu screiben, in der auch Excel erst mal beendet wird.
Hilfts?
Ciao
Thorsten

Anzeige
AW: Frage zu Makro
16.02.2014 14:23:40
Christian
Hallo Thorsten,
speichern funktioniert, das schließen halbwegs, runterfahren gar nicht.
es bleibt ein leeres Excel-Fenster ohne eine Tabelle darin übrig, fehlermeldung kommt keine.
Gruß
Christian

AW: Frage zu Makro
17.02.2014 06:42:07
Oberschlumpf
Hi Christian
da hatte ich wohl einen Denkfehler.
Ich denke, deine vorherige Frage, den Shell-Befehl unterhalb des Speichern-Befehls zu setzen, hätte ich mit JA beantworten müssen.
Denn alle Befehle, die nach einem Schließen-der-Datei-Befehl kommen, werden nicht mehr ausgeführt - weil die Datei und somit auch der Code geschlossen ist.
Versuch also mal:

ActiveWorkbook.Save
Shell "shutdown.exe -s -f"
Hilft das?
Wenn nicht, dann schau dir den shutdown-Befehl genauer an - in Verbindung mit dem Betriebssystem, welches du benutzt. Wir wissen ja nicht, welches es ist.
Ciao
Thorsten

Anzeige
AW: Frage zu Makro
17.02.2014 16:30:10
Christian
Hallo Thorsten,
Windows 8.1 ist das Betriebssystem. Hatte ehrlich gesagt, als ich danach gefragt habe, nicht daran gedacht dass es relevant sei.
Habe es jetzt mit einer leeren Tabelle4 getestet, damit es schneller geht und es hat funktioniert.
Wenn es mit einer vollen wider Erwarten nicht funktioniert, melde ich mich wieder.
Schonmal vielen Dank
Christian

Zur Tabelle4,...?
16.02.2014 10:53:27
Matze
Hallo Christia,
...kann ich dir nix sagen, teste es doch einfach mal aus, sortiere und vergleiche die die Zeiten.
Glaub kaum das es sich groß ändern wird, wenn dann doch sag mal"bscheid"
Matze
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige