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

Suche/Finde-VBA-> Vorbelegung ?

Suche/Finde-VBA-> Vorbelegung ?
04.01.2007 09:55:05
Fabio
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

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Suche/Finde-VBA-> Vorbelegung ?
04.01.2007 10:02:24
Ramses
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
Vielen Dank !
04.01.2007 10:46:58
Fabio
Hallo,
Danke für die Aufteilung. Jetzt habe ich es auch wieder verstanden !
Fabio
AW: Suche/Finde-VBA-> Vorbelegung ?
04.01.2007 10:10:54
Peter
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.
Anzeige
AW: Suche/Finde-VBA-> Vorbelegung ?
04.01.2007 10:25:07
Ramses
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
Nochmals offen weil Problem -zuviel wird ersetzt
04.01.2007 10:55:39
Fabio
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
Anzeige
AW: Nochmals offen weil Problem -zuviel wird erset
04.01.2007 12:43:53
Ramses
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
Anzeige
Danke - aber
04.01.2007 14:25:56
Fabio
Hallo Rainer,
Danke für Deine Arbeit. Blöde Frage aber dazu: Füge ich Deine beiden Scripte einfach "extra" ein -&gt 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
AW: Danke - aber
04.01.2007 14:59:43
Ramses
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
Anzeige
Fehlermeldung:Argummenttyp unverträglich
05.01.2007 09:23:23
Fabio
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

Anzeige
AW: Fehlermeldung:Argummenttyp unverträglich
05.01.2007 12:37:14
Ramses
Hallo
Sorry, die Zeile muss lauten
Sub StarteWechsel(srcRow As Integer, srcString As String, newText As String)
Gruss Rainer
AW: Fehlermeldung:Argummenttyp unverträglich
05.01.2007 12:46:30
yps
Sub StarteWechsel(srcRow As Long , srcString As String, newText As String)
Sicherheitsoption :-)
05.01.2007 13:10:57
Ramses
Hallo
Danke für dne Hinweis, aber ich glaube/hoffe nicht, dass er mehr als 32000 Einträge hat.
Gruss Rainer
nicht nur Sicherheitsoption ;-)
05.01.2007 13:20:00
yps
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
AW: nicht nur Sicherheitsoption ;-)
05.01.2007 15:04:42
Ramses
Hallo
Das kommt davon, wenn man schnell was zusammenschustert :-)
Danke
Gruss Rainer
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige