Herbers Excel-Forum - das Archiv

Suche/Finde-VBA-> Vorbelegung ?

Bild

Betrifft: Suche/Finde-VBA-> Vorbelegung ?
von: Fabio

Geschrieben am: 04.01.2007 09:55:05
Hallo zusammen,
Anfang des letzen Jahres habe ich ein "Suche/finde" VBA hier im Forum bekommen. Wird aufgerufen mit "Call" - und zwar das folgende Script :
Sub SuchenNachAA()
finde = Cells(ActiveSheet.UsedRange.SpecialCells(xlLastCell).Row, 27)
Application.Dialogs(xlDialogFormulaReplace).Show finde
End Sub

Nun öffnet sich der Dialog "Suchen/Ersetzen", nur ist das Feld "suchen nach" nicht mehr vorbelgt (vermutlich weil ich andere Dateien habe).
Soweit ich das in Erinnerung habe, sucht der damit die letzte Zeile :
finde = Cells(ActiveSheet.UsedRange.SpecialCells(xlLastCell).Row, 27)
-> nur - mit welchem "Befehl" ist definiert, das er das "suchen nach" Feld vorbelegt ?
Anders gesagt : Ich suche eine Lösung für :
1. Markiere die Letzte Zeile
2. Öffene das "suchen/ersetzen" Feld
3. Belege das "suche" Feld mit dem Wert vor, der in "der letzen Reihe in der Spalte "AA" steht.
Danke für Tipps, Hinweise - und/oder auch Lösungen.
Fabio
Bild

Betrifft: AW: Suche/Finde-VBA-> Vorbelegung ?
von: Ramses

Geschrieben am: 04.01.2007 10:02:24
Hallo
SuchenNachAA()
'Variable "finde" für den Dialogbegriff füllen
'Dafür wird der Inhalt der letzten Zelle ("xlLastCell") in Spalte 27 verwendet

finde = Cells(ActiveSheet.UsedRange.SpecialCells(xlLastCell).Row, 27)
'Hier wird der Begriff übergeben
'Wenn allerdings die letzte Zelle in Spalte 27 leer ist
'... dann ist auch das "Suchen"-Feld im Dialog leer :-)

Application.Dialogs(xlDialogFormulaReplace).Show finde
Sub
Gruss Rainer
Bild

Betrifft: Vielen Dank !
von: Fabio
Geschrieben am: 04.01.2007 10:46:58
Hallo,
Danke für die Aufteilung. Jetzt habe ich es auch wieder verstanden !
Fabio
Bild

Betrifft: AW: Suche/Finde-VBA-> Vorbelegung ?
von: Peter Feustel

Geschrieben am: 04.01.2007 10:10:54
Hallo Fabio,
das sollte so funktionieren:
Sub SuchenNachAA()
Dim finde As String
Range("AA" & Range("AA65536").End(xlUp).Row).Select
finde = Cells(ActiveSheet.UsedRange.SpecialCells(xlLastCell).Row, 27)
Application.Dialogs(xlDialogFormulaReplace).Show finde
End Sub

Mit der 27 am Ende ist die 27. Spalte - also AA - bezeichnet.
Viele Grüße Peter
Eine kurze Nachricht, ob es läuft, wäre nett - danke.
Bild

Betrifft: AW: Suche/Finde-VBA-> Vorbelegung ?
von: Ramses

Geschrieben am: 04.01.2007 10:25:07
Hallo Peter
Sei mir nicht böse,... aber wozu ?
Wenn "SpecialCells(xlLastCell).Row" leer ist,... dann ist sie nun mal leer.
LEER Heisst ja nciht LEER,... sondern vielleicht eine Formel die KEINEN Wert ausgibt !!!
ODER NUR eine Zelle die formatiert wurde !!!
Ganz abgesehen davon wird die Variable bei Dir ja nicht geändert.
Also ist nicht davon auszugehen, dass es irgendeine Besserung gibt.
Gruss Rainer
Bild

Betrifft: Nochmals offen weil Problem -zuviel wird ersetzt
von: Fabio

Geschrieben am: 04.01.2007 10:55:39
Danke nochmals für die Tipps.
Ich kopiere mittels VBA die "letzte" Zeile
-> dann wird wird per Call das "Suchen/Ersetzen" Script ausgeführt (siehe unten).
Das Problem: Er ersetzt nicht nur die Werte in der letzten Zeile - sondern auch in der Zeile darüber (also die Zeile, die ich kopierte). Weiss jemand warum ? Der soll nur die "letzte" Zeile ersetzen.. ?
a) VBA zum Kopieren der "letzten" zeile :
Sub letzte_zeile_kopieren()
Rows(Range("A65535").End(xlUp).Row).Copy
Rows(Range("A65535").End(xlUp).Row + 1).Insert
Rows(Range("A65535").End(xlUp).Row).Select
Call SuchenNachAA
End Sub

b) VBA zum "Suchen/Ersetzen" :
Sub SuchenNachAA()
ActiveSheet.Range("A65536").End(xlUp).EntireRow.Select
finde = Cells(ActiveSheet.UsedRange.SpecialCells(xlLastCell).Row, 27)
Application.Dialogs(xlDialogFormulaReplace).Show finde
End Sub

Danke
Fabio
Bild

Betrifft: AW: Nochmals offen weil Problem -zuviel wird erset
von: Ramses

Geschrieben am: 04.01.2007 12:43:53
Hallo
"...Er ersetzt nicht nur die Werte in der letzten Zeile -..."
Ist doch klar,... dieser Dialog funktioniert auf Worksheet bzw. Workbook-Ebene.
Schau dir mal die Funktionen Replace oder Substitute in der VBA Hilfe an.
Damit kannst du in einer Schleife einen definierten Bereich abfragen
Sub StartWechsel(srcRow As Integer, srcString As String, newText)
Dim myc As Range
Dim myCounter As Integer
For Each myc In Range(Cells(srcRow, 1), Cells(srcRow, 255))
If InStr(1, myc, srcString, vbTextCompare) > 0 Then
myc = Application.WorksheetFunction.Substitute(myc, srcString, newText)
myCounter = myCounter + 1
End If
Next
MsgBox myCounter & " Ersetzungen durchgeführt"
End Sub

Sub Test()
Call StartWechsel(6, "Alter Text", "Neuer Text")
End Sub

Gruss Rainer
Bild

Betrifft: Danke - aber
von: Fabio

Geschrieben am: 04.01.2007 14:25:56
Hallo Rainer,
Danke für Deine Arbeit. Blöde Frage aber dazu: Füge ich Deine beiden Scripte einfach "extra" ein -> wenn ja - wie starte ich die dann ?
Weil...
a) führe ich "mein" Script "letzte Zeile kopieren" aus
b) Dann Dein "Test"
kommt nur eine "Meldung, das "0" zeichen ersetzt wurden
Fabio
Bild

Betrifft: AW: Danke - aber
von: Ramses

Geschrieben am: 04.01.2007 14:59:43
Hallo
"...wie starte ich die dann ..."
Siehe
Sub Test()
Ich dachte das wäre eigentlich klar
Sub letzte_zeile_kopieren()
Dim lastRow as long
Dim findStr as String
Rows(Range("A65535").End(xlUp).Row).Copy Rows(Range("A65535").End(xlUp).Row + 1)
'Nur zur Vereinfachung der Parameterübergabe
lastRow = Range("A65535").End(xlUp).Row
'ICH würde nicht mit SpecialCells arbeiten
'Weil UsedRange keinen klaren Wert zurückliefert !!!!
'sondern den Wert direkt auslesen
'Dein Code
'findStr = Cells(ActiveSheet.UsedRange.SpecialCells(xlLastCell).Row, 27)
'Mein Code
findStr = Cells(lastRow,27).Value
Call StarteWechsel( lastRow, findStr, "Der text mit dem du ersetzen willst")
End Sub

Gruss Rainer
Bild

Betrifft: Fehlermeldung:Argummenttyp unverträglich
von: Fabio

Geschrieben am: 05.01.2007 09:23:23
Hallo Rainer,
nochmals Danke für die Arbeit, die Du Dir machtest.
Das "unten stehende" habe ich nun eingefügt - allerdings kommt eine Fehlermeldung bei der Zeile "Call StarteWechsel(lastRow" (Er markiert das "lastRow") - mit dem Hinweis Argumenttyp ByRef unverträglich.
Hmm - und nun ?
Danke auf jeden Fall !
Fabio
das Script im Wortlaut :
Sub letzte_zeile_kopieren_0001()
Dim lastRow As Long
Dim findStr As String
Rows(Range("A65535").End(xlUp).Row).Copy Rows(Range("A65535").End(xlUp).Row + 1)
'Nur zur Vereinfachung der Parameterübergabe
lastRow = Range("A65535").End(xlUp).Row
'ICH würde nicht mit SpecialCells arbeiten
'Weil UsedRange keinen klaren Wert zurückliefert !!!!
'sondern den Wert direkt auslesen
'Dein Code
'findStr = Cells(ActiveSheet.UsedRange.SpecialCells(xlLastCell).Row, 27)
'Mein Code
findStr = Cells(lastRow, 27).Value
Call StarteWechsel(lastRow, findStr, "Der text mit dem du ersetzen willst")
End Sub

Sub StarteWechsel(srcRow As Integer, srcString As String, newText)
Dim myc As Range
Dim myCounter As Integer
For Each myc In Range(Cells(srcRow, 1), Cells(srcRow, 255))
If InStr(1, myc, srcString, vbTextCompare) > 0 Then
myc = Application.WorksheetFunction.Substitute(myc, srcString, newText)
myCounter = myCounter + 1
End If
Next
MsgBox myCounter & " Ersetzungen durchgeführt"
End Sub

Sub Test()
Call StartWechsel(6, "Alter Text", "Neuer Text")
End Sub

Bild

Betrifft: AW: Fehlermeldung:Argummenttyp unverträglich
von: Ramses
Geschrieben am: 05.01.2007 12:37:14
Hallo
Sorry, die Zeile muss lauten
Sub StarteWechsel(srcRow As Integer, srcString As String, newText As String)
Gruss Rainer
Bild

Betrifft: AW: Fehlermeldung:Argummenttyp unverträglich
von: yps
Geschrieben am: 05.01.2007 12:46:30
Sub StarteWechsel(srcRow As Long , srcString As String, newText As String)
Bild

Betrifft: Sicherheitsoption :-)
von: Ramses
Geschrieben am: 05.01.2007 13:10:57
Hallo
Danke für dne Hinweis, aber ich glaube/hoffe nicht, dass er mehr als 32000 Einträge hat.
Gruss Rainer
Bild

Betrifft: nicht nur Sicherheitsoption ;-)
von: yps
Geschrieben am: 05.01.2007 13:20:00
hi Rainer,
in der
Sub letzte_zeile_kopieren_0001()
ist der Übergabewert als long deklariert und genau das ergibt seine hübsche Fehlermeldung ;-)
cu Micha
Bild

Betrifft: AW: nicht nur Sicherheitsoption ;-)
von: Ramses

Geschrieben am: 05.01.2007 15:04:42
Hallo
Das kommt davon, wenn man schnell was zusammenschustert :-)
Danke
Gruss Rainer
 Bild