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

Excel-Suchfenster mit Makro wieder schließe

Excel-Suchfenster mit Makro wieder schließe
17.08.2015 15:54:34
Werner
Hallo zusammen,
ich suche mithilfe eines Makro und dem Befehl:
range("e:e").find(trim(zwi_abl)).activate
nach dem Inhalt der Zwischenablage.
Nun möchte ich - in einem zweiten Makro - das noch geöffnete Suchfenster wieder schließen.
Leider zeichnet der Makro-Rekorder keinen Befehl zum Schließen des Such-Fensters auf.
Kann mir jemand mit dem entsprechenden Code weiterhelfen?
Vielen Dank.

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

Betreff
Datum
Anwender
Anzeige
AW: Excel-Suchfenster mit Makro wieder schließe
19.08.2015 13:38:38
Werner
Hallo zusammen,
sorry, ich habe den falschen Befehl geposted.
Dieser Befehl öffnet das Suchfenster:
Application.CommandBars.ExecuteMso "FindDialogExcel"

AW: Excel-Suchfenster mit Makro wieder schließe
20.08.2015 16:02:51
Mullit
Hallo,
da stellt sich mir zunächst die Frage, wenn Du schon über VBA suchst, warum willst Du überhaupt den Suchen-Dialog öffnen und nutzt nicht, wie in Deinem ersten Code, die .Find-Methode?
Gruß, Mullit

AW: Excel-Suchfenster mit Makro wieder schließe
21.08.2015 00:05:35
Werner
Hallo Mullit,
vielen Dank für Deine Antwort.
Konkret nutze ich das Makro um in Spalte E in der ersten freien Zelle einen Kunden-Nach-Name aus den Zwischenspeicher einzutragen und anschließend automatisch mit dem Suchen-Dialog zu prüfen ob der Kundenname bereits existiert.
Da dies jedoch bei häufig vorkommenden Namen eine längere Sache werden kann, habe ich ein zweites Makro dazu gebastelt, welches - nur bei Bedarf - analog in Spalte D den Vor-Name einträgt und danach beide Namen gleichzeitig sucht.
Das funktioniert auch einwandfrei, nur nervt es etwas, immer vor Ausführung des zweiten Makros das Suchfenster manuell schließen zu müssen.
Deshalb wollte ich in dieses zweite Makro einen entsprechenden Befehl am Anfang einbauen.
Hier ist der komplette Code des ersten Makros:
Sub KundenNameEinfuegenSuchen()
Dim oData As New DataObject
Dim Zwi_Abl_Inh_KundenNameEinfuegenSuchen As String
On Error Resume Next             ' Fehler bei falschen Formaten abfangen
oData.GetFromClipboard           ' Zwischenablage lesen
Zwi_Abl_Inh_KundenNameEinfuegenSuchen = oData.GetText      ' Zwischenablage in Variable  _
speichern
Sheets("Kundendaten").Select
Cells(65536, 5).End(xlUp).Offset(1, 0).Value = Trim(Zwi_Abl_Inh_KundenNameEinfuegenSuchen)    _
' 1. freie Zelle in Spalte E wird mit ZwiAbl gefüllt
Dim Bereich As Range
With Application
.ScreenUpdating = False
.EnableEvents = False
.Calculation = xlCalculationManual
End With
Range("E:E").Find(Trim(Zwi_Abl_Inh_KundenNameEinfuegenSuchen)).Activate
With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = xlCalculationAutomatic
End With
ActiveWindow.SmallScroll Down:=-5
ActiveWindow.LargeScroll ToRight:=-1
Columns("E:E").Select
If Not CommandBars.FindControl(ID:=1849) Is Nothing Then
Application.CommandBars.ExecuteMso "FindDialogExcel"
End If
End Sub

Gruß Werner

Anzeige
AW: Excel-Suchfenster mit Makro wieder schließe
21.08.2015 12:58:39
Mullit
Hallo Werner,
Du kannst doch das Suchen der Namen auch mit der .Find-Methode erledigen, ohne den Dialog zu öffnen:
Option Explicit

Public Sub test()
Dim objCell As Range, objUnion As Range
Dim strFirstAddress As String
With Range("E:E")
    Set objCell = .Find(What:=ActiveSheet.Cells(ActiveSheet.Rows.Count, 5).End(xlUp).Offset(1, 0).Value, _
         LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False)
    If Not objCell Is Nothing Then
        strFirstAddress = objCell.Address
        Do
            If Not objUnion Is Nothing Then
              Set objUnion = Union(objCell, objUnion)
            Else
              Set objUnion = objCell
            End If
            Set objCell = .FindNext(After:=objCell)
        Loop While Not objCell Is Nothing And objCell.Address <> strFirstAddress
    End If
End With
objUnion.Select
Set objCell = Nothing
Set objUnion = Nothing
End Sub


VBA/HTML - CodeConverter für Office-Foren
AddIn für Excel/Word 2000-2010 - komplett in VBA geschrieben von Lukas Mosimann
Projektbetreuung durch mumpel



Code erstellt und getestet in Office 14

Gruß, Mullit

Anzeige
AW: Excel-Suchfenster mit Makro wieder schließe
21.08.2015 13:25:16
Mullit
Hallo,
ooops, so ist's besser:
Option Explicit

Public Sub test()
Dim objCell As Range, objUnion As Range
Dim strFirstAddress As String
With Range("E:E")
    Set objCell = .Find(What:="test", _
         LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False)
    If Not objCell Is Nothing Then
        strFirstAddress = objCell.Address
        Do
            If Not objUnion Is Nothing Then
              Set objUnion = Union(objCell, objUnion)
            Else
              Set objUnion = objCell
            End If
            Set objCell = .FindNext(After:=objCell)
        Loop While Not objCell Is Nothing And objCell.Address <> strFirstAddress
        objUnion.Select
        Set objCell = Nothing
        Set objUnion = Nothing
    End If
End With
End Sub


VBA/HTML - CodeConverter für Office-Foren
AddIn für Excel/Word 2000-2010 - komplett in VBA geschrieben von Lukas Mosimann
Projektbetreuung durch mumpel



Code erstellt und getestet in Office 14

Gruß, Mullit

Anzeige
AW: Excel-Suchfenster mit Makro wieder schließe
21.08.2015 23:59:15
Werner
Hallo Mullit,
vielen Dank für Deine Antwort und den Code.
Ich habe jedoch bewusst das geöffnete Suchfenster mit dem eingetragenen Namen als Suchbegriff im ersten Makro eingebaut, um von Hand vom ersten zum nächsten Suchergebnis springen zu können.
Deshalb würde ich ungern auf die .Find-Methode wechseln wollen.
Ich suche nur nach einer Möglichkeit dieses geöffnete Suchfenster danach wieder per Makro zu schließen (im zweiten Makro).
Gruß Werner

AW: Excel-Suchfenster mit Makro wieder schließe
22.08.2015 20:45:55
Mullit
Hallo Werner,
ok, ich würd's ja weiterhin mit der .Find-Methode machen, die kannst Du in einer kleinen UserForm mit nur einem CommandButton aufrufen, und dann selbst manipulieren:
' ********************************************************************** 
' Modul: UserForm1 Typ: Userform 
' ********************************************************************** 

Option Explicit

Private Sub CommandButton1_MouseUp( _
   ByVal Button As Integer, _
   ByVal Shift As Integer, _
   ByVal X As Single, _
   ByVal Y As Single)
   Call prcSearch
End Sub

Private Sub prcSearch()
Static sobjCell As Range
Static sstrFirstAddress As String
With ActiveSheet.Range("E:E")
    If sobjCell Is Nothing Then
        Set sobjCell = .Find(What:=ActiveSheet.Cells(ActiveSheet.Rows.Count, 5).End(xlUp).Offset(1, 0).Value, _
             LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False)
        If Not sobjCell Is Nothing Then
           With sobjCell
                sstrFirstAddress = .Address
                .Select
           End With
        End If
    Else
        Set sobjCell = .FindNext(After:=sobjCell)
        With sobjCell
            If Not sobjCell Is Nothing And .Address <> sstrFirstAddress Then
              .Select
            Else
              MsgBox "Suche beendet..."
              Call Unload(Object:=Me)
            End If
        End With
    End If
End With
End Sub


VBA/HTML - CodeConverter für Office-Foren
AddIn für Excel/Word 2000-2010 - komplett in VBA geschrieben von Lukas Mosimann
Projektbetreuung durch mumpel



Code erstellt und getestet in Office 14

Es geht aber im Prinzip auch mit Deinem Excel-Dialog, wenn Du Api's ins Spiel bringst.
Wenn die Api's sich in XL2013 genauso, wie in XL2010 verhalten und Du eine 32-Bit Version von Office hast, könnte das gehen:
' ********************************************************************** 
' Modul:  Typ: Standardmodul 
' ********************************************************************** 

Option Explicit

Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" ( _
     ByVal lpClassName As String, _
     ByVal lpWindowName As String) As Long
Private Declare Function DestroyWindow Lib "user32.dll" ( _
     ByVal hwnd As Long) As Long
Private Declare Function SetTimer Lib "user32.dll" ( _
     ByVal hwnd As Long, _
     ByVal nIDEvent As Long, _
     ByVal uElapse As Long, _
     ByVal lpTimerFunc As Long) As Long
Private Declare Function KillTimer Lib "user32.dll" ( _
     ByVal hwnd As Long, _
     ByVal nIDEvent As Long) As Long

Private Const GC_CLASSNAMEMSEXCELDIALOG As String = "bosa_sdm_XL9"

Private llngHwnd As Long

Public Sub test()
 llngHwnd = FindWindow(GC_CLASSNAMEMSEXCELDIALOG, "Suchen und Ersetzen")
 Call prcStartTimer
End Sub

Private Sub prcStartTimer()
 Call SetTimer(Application.hwnd, 0&, 10&, AddressOf TimerProc)
End Sub

Private Sub prcStopTimer()
 Call KillTimer(Application.hwnd, 0&)
End Sub

Private Sub TimerProc(ByVal hwnd As Long, ByVal nIDEvent As Long, _
     ByVal uElapse As Long, ByVal lpTimerFunc As Long)
     On Error Resume Next
     Call prcStopTimer
     Call DestroyWindow(llngHwnd)
End Sub


VBA/HTML - CodeConverter für Office-Foren
AddIn für Excel/Word 2000-2010 - komplett in VBA geschrieben von Lukas Mosimann
Projektbetreuung durch mumpel



Code erstellt und getestet in Office 14

Gruß, Mullit

Anzeige
AW: Excel-Suchfenster mit Makro wieder schließe
24.08.2015 01:29:35
Werner
Hallo Mullit,
vielen Dank für Deine erneute Antwort und Deine beiden Codes.
Ich hätte nicht erwartet, dass ein einfaches Schliessen des Fensters so kompliziert ist, deshalb ein ganz besonders Dankeschön.
Ich habe Deine erste Variante mit den Api's eingebaut (dann brauche ich sonst nichts zu ändern) und sie funktioniert wunderbar, auch in Excel 2013 in der 32-Bit Version.
Genau diese Lösung habe ich gesucht, Du hast mir mit Deinem professionellem Fachwissen sehr geholfen.
Nochmals Vielen Dank
Werner

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige