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

Benötige Hilfe, einen Zellbezug zu ändern

Benötige Hilfe, einen Zellbezug zu ändern
29.10.2013 17:49:17
Christian
Hallo alle zusammen,
habe unten stehendes Makro, welches soweit funktioniert. Da ich aber die Arbeit mit der Arbeitsmappe etwas vereinfachen wollte, wollte ich fragen ob ihr so nett seid und mir dabei helft, dieses Makro ein wenig abzuändern.
Das Makro sucht den Text in B2 der Tabelle Hyperlinks in Spalte A der Tabelle4, wenn ein Treffer gefunden wird, wird geschaut ob ein Hyperlink bei dem Treffer hinterlegt ist und gibt die gefundenen Hyperlinks aus.
An der Ausgabe soll sich nichts ändern, jedoch an den Kriterien nach was gesucht werden soll.
Es soll in Zukunft nur noch ein Hyperlink ausgegeben werden, wenn in einer Zelle nicht nur der Wert in B2 sondern auch der Wert in C2 gefunden wird, also beide Texte in derselben Zelle.
Könnt ihr mir dabei bitte helfen?
Danke
Christian
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
With Application
.Calculation = xlCalculationManual
.EnableEvents = False
.ScreenUpdating = False
End With
Set objRegEx = CreateObject("VBScript.RegExp")
With Worksheets("Hyperlinks") 'gegebenenfalls anpassen !!!!!!!!!!!!!!
For lngRow = 1 To .Cells(.Rows.Count, 2).End(xlUp).Row
strSearchName = Trim$(.Cells(lngRow, 2).Value)
If strSearchName  vbNullString Then
With Worksheets("Tabelle4") 'gegebenenfalls anpassen !!!!!!!!!!!!!!
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 Then
strHyperlinkAddress = Split(objCell.Hyperlinks.Item(1).Address, "?") _
(0)
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) ' _
gegebenenfalls anpassen !!!!!!!!!!!!!!
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") 'gegebenenfalls anpassen !!!!!!!!!!!!!!
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

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Benötige Hilfe, einen Zellbezug zu ändern
29.10.2013 20:03:10
fcs
Hallo Christian,
ich hab deine Hauptprozedur mal angepasst, so dass die gefundenen Zellen mit Wert aus B auch auf Wert in C geprüft werden. Allerdings ohne zu Testen. Die neuen und geänderten Zeilen hab ich gekennzeichnet.
mfg
Franz
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                                                   'NEU
With Application
.Calculation = xlCalculationManual
.EnableEvents = False
.ScreenUpdating = False
End With
Set objRegEx = CreateObject("VBScript.RegExp")
With Worksheets("Hyperlinks") 'gegebenenfalls anpassen !!!!!!!!!!!!!!
For lngRow = 1 To .Cells(.Rows.Count, 2).End(xlUp).Row
strSearchName = Trim$(.Cells(lngRow, 2).Value)
strSearch2 = Trim$(.Cells(lngRow, 3).Value)  '2. Suchwert in Spalte C 'NEU
If strSearchName  vbNullString Then
With Worksheets("Tabelle4") 'gegebenenfalls anpassen !!!!!!!!!!!!!!
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      'GEÄNDERT
strHyperlinkAddress = Split(objCell.Hyperlinks.Item(1).Address, "?") _
(0)
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) ' _
gegebenenfalls anpassen !!!!!!!!!!!!!!
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

Anzeige
AW: Benötige Hilfe, einen Zellbezug zu ändern
29.10.2013 20:25:08
Christian
Hallo Franz,
erstmal vielen Dank. Ich hab ein Problem noch, das mir das Testen erheblich erschwert, ich hab es irgendwie geschafft im VBA Editor links die Spalte auszuwählen, wo man die Arbeitsmappen, die Module usw. auswählen kann, wie bekomme ich die denn wieder eingeblendet?
Danke
Christian

AW: Benötige Hilfe, einen Zellbezug zu ändern
29.10.2013 20:30:15
Mike
STRG+R für Editor
F4 für Eigenschaftenfenster
Oder meinst Du was anderes?

AW: Benötige Hilfe, einen Zellbezug zu ändern
29.10.2013 20:33:06
Christian
nein meinte den Editor, den ich mit Alt+F11 starte und die Tabelle, die ich über Ansicht - Projekt Explorer wieder einblenden kann, nur wenn ich das Fenster schließe und den Editor wiederöffne ist die Tabelle wieder weg. Das Problem ist auch Arbeitsmappen- und sogar Office Programm übergreifend.

Anzeige
AW: Benötige Hilfe, einen Zellbezug zu ändern
29.10.2013 20:37:13
Mike
Was nicht genau was Du jetzt meinst, aber alle Tabellen die unter Excel geschlossen werden, sind auch im Editor nicht mehr sichtbar. Zumindest deren Makros und VBA-Skripte. Oder habe ich das jetzt falsch verstanden? ^^

AW: Benötige Hilfe, einen Zellbezug zu ändern
29.10.2013 20:31:14
Christian
Das Makro funktioniert, aber selbst wenn ich die Spalte über Ansicht - Projekt Explorer wieder einblende, wenn ich das Fenster schließe und wieder öffne ist die Spalte wieder weg.

AW: Benötige Hilfe, einen Zellbezug zu ändern
29.10.2013 20:34:44
Mike
Geh mal unter Ansicht - Symbolleisten und schau mal bei Vorseinstellungen. da sollte eine Haken davor sein. Dann werden alle Einstellungen normal beim nächsten Start so geladen werden, wie Du es zuletzt hattest.

Anzeige
AW: Benötige Hilfe, einen Zellbezug zu ändern
29.10.2013 20:36:32
Christian
hat funktioniert, danke

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige