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

Weitere Abfrage einbauen

Weitere Abfrage einbauen
24.04.2009 16:20:20
Claudia
Hallo zusammen,
ich habe folgendes Makro (ein Ausschnitt):

Sub TEst()
Dim Mldg, Titel, Voreinstellung, Wert1
Mldg = "Zeile angeben wo das Makro anfangen soll"    ' Aufforderung festlegen.
Titel = "Zeilenanfang"    ' Titel festlegen.
Voreinstellung = "2"    ' Voreinstellung festlegen.
'Meldung, Titel und Standardwert anzeigen.
Wert1 = InputBox(Mldg, Titel, Voreinstellung)
If Wert1 = "" Then
GoTo Zeile2
End If
Range("a2").Select
c = Wert1 - 2
ActiveCell.Offset(c, 0).Select
Do Until ActiveCell.Value = ""
i = i + 1
If i = 20 Then
ActiveWorkbook.Save
i = 1
Else
End If
ActiveCell.Offset(0, 1) = "Test"
ActiveCell.Offset(1, 0).Select
Loop
MsgBox "Ihre Daten sind vollständig bearbeitet worden!"
Exit Sub
Zeile2:
MsgBox "Die Abfrage wurde abgebrochen", vbInformation, "Hinweis!"
Exit Sub
End Sub


Jetzt würde ich gerne noch eine Abfrage einbauen, dass das Makro nur die Zellen bearbeitet, die in Spalte C den Eintrag "Makro" haben. Geht das?
Vielen Dank!
Liebe Grüße
Claudia

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

Betreff
Datum
Anwender
Anzeige
AW: Weitere Abfrage einbauen
24.04.2009 16:52:50
Raist10
Ja klar geht das. ;)
Im Prinzip so:
Dim I As Integer
I = 1 ' oder ab welcher Zeile eben die zu prüfenden Zellen in Spalte C anfangen
With ActiveSheet
Do Until .cells(I, 3).Value = ""
if .cells(I, 3).Value = "Makro" Then
' hier die Anweisungen die zu tun sind, wenn Bedingung erfüllt
End If
I = I + 1
Loop
End With
Einzige Bedingung ist, dass die Zellen in C die nicht die Bedingung "Makro" beinhalten irgendeinen anderen Text haben (z.B. "Kein Makro"), da das Makro aufhört ab der ersten leeren Zelle in C.
Hast Du einen festen Bereich oder einen Bereich den man zählen kann kann man auch mit einer For Next Schleife anstatt Do Loop arbeiten.
Gruß
Rainer
Anzeige
AW: Weitere Abfrage einbauen
24.04.2009 17:01:18
Claudia
Hallo Rainer,
danke schön für die Hilfe. Das Problem ist aber tatsächlich, dass die anderen Zellen leer sind (daher wird auf Spalte A geprüft). Und eine feste Anzahl an Durchläufen habe ich nicht, da sich die andauern ändern.
Zwei Abfragen auf zwei verschiedene Spalten gehen nicht?
AW: Weitere Abfrage einbauen
24.04.2009 17:06:48
Raist10
Doch, geht schon nach dem Motto wenn Bedingung1 wahr dann prüfe Bedingung2.
Wenn die Zellen leer sind, kannst Du es auch so machen:
Do Until i = 5000 ' oder wieviel Zellen Du abarbeiten möchtest ist ja bei Bedingung 1 Prüfung ziemlich schnell erledigt
Oder Du machst eine For Next Schleife:
With ActiveSheet
For i = 1 to activesheet.rows.count ' hoffe die stimmt so, ist nur schnell aus dem Kopf raus
if .cells(I, 3).Value = "Makro" Then
' hier die Anweisungen die zu tun sind, wenn Bedingung erfüllt
Next i
End With
Müsste an sich so richtig sein.
Gruß
Rainer
Anzeige
AW: Weitere Abfrage einbauen
24.04.2009 17:17:20
Claudia
Du hast mich abgehängt. Kenne mich mit VBA nicht so toll aus. Ich weiß jetzt nicht, wo ich was eintragen soll.
Wichtig wäre, dass das Makro schnell arbeitet. Ich habe ca. 40.000 Datensätzen und es sollen natürlich nur die bearbeitet werden, die den Hinweis haben. Alle anderen sollen halt überlesen werden.
Und das wäre wichtig, da ich mit dem Begriff aus Spalte A eine Hostanwendung aufrufe und Daten auslese. Und das soll natürlich nur bei den Zellen passieren, die den Zusatzeintrag haben.
für begriffsstutzige
24.04.2009 17:20:13
Tino
Hallo,
kannst Du nochmal kurz erklären was Dein Makro genau machen soll?
Gruß Tino
Anzeige
AW: für begriffsstutzige
24.04.2009 18:26:09
Claudia
Hallo Tino,
das Makro geht alle Begriffe in Spalte A durch und ruft die entsprechenden Hostanwendungen (dieser Ablauf ist im Makroaausschnitt jetzt nicht enthalten) auf, bis in Spalte A die erste leere Zelle erreicht ist. Nun gibt es aber eine Besonderheit. Das Makro soll schneller werden und deshalb sollen nur die Zellen an die Hostanwendung weitergegeben werden, die in Spalte C das Wort "Makro" haben.
Wichtig wäre mir, dass das eigentliche Makro so bleiben kann, da bei uns alle Makros so laufen und stattdessen nur eine weitere Prüfung eingebaut werden kann, die ich aber auch schnell wieder ausschalten kann. Als Laie ausgedrückt: prüfe ob in Spalte A was drin ist, wenn ja dann prüf in Spalte C ob Makro steht und erst dann wird dieser Begriff aus Spalte A an die Hostnwendung. Das hätte den Vorteile dass die Begriffe die keinen Zusatzhinweis haben einfach überlesen werden und das Makro schneller fertig wäre. Bei ca. 40.000 Datensätzen könnten so ca. 20.000 in Excel überlesen werden. Denn das langsame ist halt der Aufruf der Hostanwendung und das auslesen dort.
Hier das Makro:

Sub TEst()
Dim Mldg, Titel, Voreinstellung, Wert1
Mldg = "Zeile angeben wo das Makro anfangen soll"    ' Aufforderung festlegen.
Titel = "Zeilenanfang"    ' Titel festlegen.
Voreinstellung = "2"    ' Voreinstellung festlegen.
'Meldung, Titel und Standardwert anzeigen.
Wert1 = InputBox(Mldg, Titel, Voreinstellung)
If Wert1 = "" Then
GoTo Zeile2
End If
Range("a2").Select
c = Wert1 - 2
ActiveCell.Offset(c, 0).Select
Do Until ActiveCell.Value = ""
i = i + 1
If i = 20 Then
ActiveWorkbook.Save
i = 1
Else
End If
'das wäre jetzt der Aufruf der Hostanwendung
ActiveCell.Offset(0, 1) = "Test"
ActiveCell.Offset(1, 0).Select
Loop
MsgBox "Ihre Daten sind vollständig bearbeitet worden!"
Exit Sub
Zeile2:
MsgBox "Die Abfrage wurde abgebrochen", vbInformation, "Hinweis!"
Exit Sub
End Sub


Anzeige
AW: für begriffsstutzige
24.04.2009 18:50:34
Tino
Hallo,
ich würde dies in etwa so angehen, mit einer Hilfsspalte.
Kommentare stehen im Code
Sub Test()
Dim Bereich As Range
Dim rZelle As Range
Set Bereich = Range("A2", Cells(Rows.Count, 1).End(xlUp))

'Offset in eine Leere Spalte die nicht benötigt wird 
Set Bereich = Bereich.Offset(0, 7) 'hier mal Spalte H 

'Bedingung mittels Formel erstellen, bei wahr Ergebnis = 0 
'=WENN(UND($A2<>"";$C2="Makro");0;"") 
Bereich.FormulaR1C1 = "=IF(AND(RC1<>"""",RC3=""Makro""),0,"""")"

    'prüfen ob mindestens einmal die Bedingung erfüllt ist, also eine 0 als Ergebnis vorkommt 
    If Application.WorksheetFunction.CountIf(Bereich, 0) > 0 Then
     
        'alle Zellen mit dem Ergebnis 0 durchlaufen und auf die Zelle in Spalte A verweisen 
        For Each rZelle In Bereich.SpecialCells(xlCellTypeFormulas, 1)
          'hier wäre der aufruf Deiner Hostanwendung ******************************* 
           Debug.Print Cells(rZelle.Row, 1) 'ist die ensprechende Zelle in Spüalte A 
          '************************************************************************* 
        Next rZelle
    
    End If

'Hilfszellen löschen 
Bereich.Clear

End Sub


Gruß Tino

Anzeige
AW: für begriffsstutzige
24.04.2009 19:14:29
Claudia
Hallo Tino,
danke schön. Werde ich am Montag direkt ausprobieren.
Viele Grüße und DIr ein schönes Wochenende
Claudia

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige