Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1516to1520
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
VBA Abfrage in Spalte wenn-dann
10.10.2016 22:50:10
Silke
Guten Abend,
VBA Problem- Makro für eine Überprüfung eines Blatt´s
Weil ich sehr viele Zeilen und Spalten bearbeite, möchte ich am Schluss meine Arbeit prüfen. Es kommt vor, das statt Zahlen auch Wörter eingetragen werden.
Allerdings dürfen in bestimmten Zellen nur Wörter, in manchen nur Zahlenwerte stehen.
Um das zu kontrollieren wäre ein Makro von Vorteil-
Ist es möglich Zellbereiche abzufragen, ob Zahlen oder Wörter eingetragen sind?
Wenn ja - gern so:
Eine Userform mit Listenfelder für Auswahl für:
"Spalte" oder "Zeile"
"Was soll gesucht werden? "Wörter" oder "Zahlen"
"Start" entspricht Suche beginnen
"Abbruch" Abbrechen Vorgang
Dann- wenn gestartet:
Bei Fund von ( Zahl, oder Wort ) MSG - Box mit Abfrage: "Es wurden Wörter gefunden!" oder ggf. "Es wurden Zahlen gefunden!"
dann zur nächsten Auswahl:
Funktion1- "Ignorieren?" mit Schließen der Box
Funktion2- "Gehe zu"
dann zur gefundenen Zelle springen
Wer kann mir da helfen-
Meine VBA Kenntnisse sind aber schwach- stehe ja noch am Anfang in der VBA Materie und kämpfe mich da durch.
MfG Silke

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

Betreff
Datum
Anwender
Anzeige
benutze doch Daten Gültigkeit
10.10.2016 23:35:33
Matthias
Hallo Silke
Durch Benutzung von Daten/Gültigkeit wird schon bei der Eingabe in die Zelle
geprüft ob ein erlaubter Wert eingegeben wurde.
Tabelle1

 BC
2Nur TextNur Zahlen
3Hallo-10,5

Datengültigkeit der Tabelle
ZelleZulassenDatenEingabe 1Eingabe 2
B3Benutzerdefiniert =NICHT(ISTZAHL(B3)) 
C3DezimalZellwert ist zwischen -999999999999


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4.8
Hier mal eine Bsp.Datei:
https://www.herber.de/bbs/user/108708.xlsx
Gruß Matthias
Anzeige
AW: VBA Abfrage in Spalte wenn-dann
11.10.2016 05:47:12
fcs
Hallo Silke,
ich hab mir mal die Mühe gemacht etwas entsprechendes zu programieren.
War aber schon etwas aufwendig, um einige Feinheiten hinzubekommen.
Du solltest aber Mathias Vorschlag mit der Daten-Gültigkeitsprüfung übernehmen.
In Verbindung mit dem Autofilter kann man auch nachträglich mit der Datengültigkeitsprüfung gut arbeiten.
Man kann dann in den Spalten nach der Farbe filtern und so schnell unerwünschte Eingaben erkennen.
LO
Franz
Beispieldatei mit Userform und einem Blatt mit Datengültigkeit und Autofilter.
Die Datenültigkeitsprüfung könnte man auch nach der Daten-Eingabe per Makro einrichten.
https://www.herber.de/bbs/user/108709.xlsm
Anzeige
Hinweis / Vorschlag ...
11.10.2016 07:30:08
Matthias
Hallo Franz
Hab das mal getestet und da hast Du Dir ja wirklich viel Mühe gemacht.
Respekt!
Ein kleine Sache ist mir aber aufgefallen.
Beim UserForm_Initialize würde ich nach dem letztem End With noch ein
Me.lbxZeile.ListIndex = 0 einpflegen.
Grund:
Klicke ich auf SUCHEN, ohne eine Zeile in einer der Listbox-Elemente auszuwählen
bekomme ich den VBA-Laufzeitfehler(91), da Me.lbxZeile.ListIndex noch -1 ist.
Gruß Matthias
AW: Hinweis / Vorschlag ...
11.10.2016 14:26:05
fcs
Hallo Mathias,
da hast du recht.
Alternativ kann man im Such-Makro eine entsprechende Prüfung einbauen. Private Sub cmbSuchen_Click() Dim bol1st As Boolean If rngSuche Is Nothing Then MsgBox "Bitte erst eine Zeile oder Spalte auswählen" Exit Sub End If LG
Franz
Anzeige
AW: Hinweis / Vorschlag ...
11.10.2016 16:45:06
Silke
Hallo Franz und Matthias-
-Respekt-
da bin ich sprachlos- Super Teil- hätte ich nicht gedacht, eine Lösung für die komplizierte Aufgabe zu erhalten. Das ist nicht Selbstverständlich!
Dein Aufwand hat sich gelohnt- es funktioniert. EIN ganz GROSSES Dankeschön.
Werde auch noch die Änderung von Matthias übernehmen.
Nun wird das Makro ausgiebig getestet.
Danke für den Hinweis-
Durch Benutzung von Daten/Gültigkeit wird schon bei der Eingabe in die Zelle
geprüft ob ein erlaubter Wert eingegeben wurde.
jedoch bestehen bereits viele Arbeitsmappen. Diese musste ich so übernehmen, kann sie also nur nachträglich bearbeiten.
Für neue Arbeitsmappen ist das eine sehr gute Überwachungsfunktion.
Ist mein erstes VBA Objekt- muss da erst mal etwas dahinter kommen.
Also noch mal recht vielen Dank.
LG Silke
Anzeige
AW: Hinweis / Vorschlag ...
11.10.2016 20:38:42
Silke
Hallo,
Kann das gar nicht fassen- so einen Aufwand betrieben- und es geht!!!
eine Frage hätte ich noch- wenn sich z.B. in einer Zeile leere Zellen befinden- können diese übersprungen werden?
Beispielsweise mit einer Funktion- die nur Zellen auswertet, in denen auch ein Wert, wie ein Wort, oder sich eine Zahl befindet?
Aber bitte nicht mehr alles neu schreiben- das kann ich nicht bezahlen!
MfG Silke
AW: Hinweis / Vorschlag ...
12.10.2016 14:07:09
fcs
Hallo Silke,
deine Problem-Zellen sind nicht leer, sondern enthalten Leerzeichen oder Leerstrings als Formelergebnis oder aus Daten-Importen.
Nachfolend das angepasste Such-Makro im Userform-Code.
Entweder das gesamte Makro austauschen oder die mit "Neu" bzw. "geändert" markierten Zeilen.
LG
Franz
Private Sub cmbSuchen_Click()
Dim bol1st As Boolean
If rngSuche Is Nothing Then                                         'Neu
MsgBox "Bitte erst eine Zeile oder Spalte auswählen"            'Neu
Exit Sub                                                        'Neu
End If                                                              'Neu
If lngE = 0 Then
Me.cmbSuchen.Caption = "weiter Suchen"
bol1st = True
Else
bol1st = False
End If
Do
lngE = lngE + 1
If bol1st = True And lngE > IIf(bolSpalte, Spalte_L, Zeile_L) Then
MsgBox "keine """ & IIf(bolWort, "Wörter", "Zahlen") & """ gefunden!"
Me.cmbSuchen.Caption = "Suchen"
Exit Do
ElseIf lngE > IIf(bolSpalte, Spalte_L, Zeile_L) Then
MsgBox "keine weiteren """ & IIf(bolWort, "Wörter", "Zahlen") & """ gefunden!"
Me.cmbSuchen.Caption = "Suchen"
Exit Do
End If
If bolSpalte Then
If Not Trim(rngSuche.Cells(lngE, 1)) = "" Then                      'geändert
If bolWort And Not IsNumeric(rngSuche.Cells(lngE, 1)) Then
ActiveWindow.ScrollRow = lngE
ZeileZ = lngE
txbZelle = wksData.Cells(ZeileZ, SpalteZ).Address(False, False, xlA1)
txbWert = wksData.Cells(ZeileZ, SpalteZ).Value
Exit Do
ElseIf bolWort = False And IsNumeric(rngSuche.Cells(lngE, 1)) Then
ActiveWindow.ScrollRow = lngE
ZeileZ = lngE
txbZelle = wksData.Cells(ZeileZ, SpalteZ).Address(False, False, xlA1)
txbWert = wksData.Cells(ZeileZ, SpalteZ).Value
Exit Do
End If
End If
Else
If Not Trim(rngSuche.Cells(1, lngE)) = "" Then                      'geändert
If bolWort And Not IsNumeric(rngSuche.Cells(1, lngE)) Then
ActiveWindow.ScrollColumn = lngE
SpalteZ = lngE
txbZelle = wksData.Cells(ZeileZ, SpalteZ).Address(False, False, xlA1)
txbWert = wksData.Cells(ZeileZ, SpalteZ).Value
Exit Do
ElseIf bolWort = False And IsNumeric(rngSuche.Cells(1, lngE)) Then
ActiveWindow.ScrollColumn = lngE
SpalteZ = lngE
txbZelle = wksData.Cells(ZeileZ, SpalteZ).Address(False, False, xlA1)
txbWert = wksData.Cells(ZeileZ, SpalteZ).Value
Exit Do
End If
End If
End If
Loop
End Sub

Anzeige
AW: Hinweis / Vorschlag ...
12.10.2016 21:11:38
Silke
Hallo Franz,
herzlichen Dank für die Mühe- die Du dir gemacht hast, Es funktioniert nun sehr gut.
Das ist schon eine Meisterleistung, ohne das ein Laufzeitfehler kommt. Und auch der Aufbau. Na da kann ich noch viel lernen.
Habe noch etwas geändert in

Private Sub UserForm_Initialize()
. so das es gleich bei Spalte A starten kann:

End With
Me.lbxSpalte.ListIndex = 0 'Startzeile
Me.OptionButton1 = True
Werde mir dann mal die Arbeit machen, die "UF_WortZahl" als Schnellzugriff zu Platzieren.
Ein Einbinden ins rechte Maustasten Dropdown Menü vom Excel- wird sicherlich nicht funktionieren. Würde mich aber Interessieren- ob sowas auch möglich ist.
Macht Spaß, wenn etwas funktioniert.
Danke nochmals.
LG Silke
Anzeige

322 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige