2016-04-04 6 views
1

Danke für jede Hilfe. Versucht, ein paar Stunden zu suchen. Ich habe fast das Makro funktioniert perfekt, ich weiß nur nicht, wie eine leichte Modifikation zu tun:Excel VBA - Funktioniert für 1 Zelle, kann nicht geändert werden, um mehrere Zeilen zu machen

Dieser funktioniert perfekt, aber nur für 1 Reihe:

Sub UpdateStatusTest01() 

Dim s1 As Worksheet, s2 As Worksheet 
Set s1 = Sheets("test") 
Set s2 = Sheets("SIGNUPS") 
v1 = s1.Range("A2") 
v2 = s1.Range("B2") 
s2.Activate 
For Each r In Intersect(ActiveSheet.UsedRange, Range("A:A")) 
    If r.Value = v1 Then 
     r.Offset(0, 1).Value = v2 
    End If 
Next 
End Sub 

Ich würde es gerne bewegen auf die nächste Zeile des "SIGNUPS" -Blattes setzen und die Daten der Spalte B für die Zeilen nach B2 suchen/vergleichen/ersetzen. Wenn ich

v1 = s1.Range("A2") 
v2 = s1.Range("B2") 

In

v1 = s1.Range("A:A") 
v2 = s1.Range("B:B") 

Der Code wird

Sub UpdateStatusTest01() 

Dim s1 As Worksheet, s2 As Worksheet 
Set s1 = Sheets("test") 
Set s2 = Sheets("SIGNUPS") 
v1 = s1.Range("A:A") 
v2 = s1.Range("B:B") 
s2.Activate 
For Each r In Intersect(ActiveSheet.UsedRange, Range("A:A")) 
    If r.Value = v1 Then 
     r.Offset(0, 1).Value = v2 
    End If 
Next 
End Sub 

zu ändern versuchen, aber zeichnen diese Linie nicht mag:

If r.Value = v1 Then 

Es geschieht nur, wenn die Der modifizierte Bereich wird von 1 Zelle in geändert eine ganze Spalte. Der genaue Fehler ist "Laufzeitfehler '13': Typenkonflikt".

Ich weiß, dass ich diese lästige Linie ändern soll, aber ich weiß nicht, was ich für einen Bereich mit mehreren Zellen berücksichtigen soll. Ich würde mich über jede Hilfe freuen! Vielen Dank!!

Antwort

0

VBA einfach nicht verstehen, was Sie wollen. Entweder Iterierte Trog jede Möglichkeit oder führen Sie eine Lookup wie folgt aus:

Sub UpdateStatusTest01() 
    Dim s1 As Worksheet, s2 As Worksheet 
    Dim v1 As Range, v2 As Range 
    Set s1 = Sheets("test") 
    Set s2 = Sheets("SIGNUPS") 
    Set v1 = s1.Range("A:A") 
    Set v2 = s1.Range("B:B") 
    s2.Activate 
    For Each r In Intersect(ActiveSheet.UsedRange, Range("A:A")) 
    If IsNumeric(Application.Match(r.Value, v1, 0)) Then 
     r.Offset(0, 1).Value = Application.Index(v2, Application.Match(r.Value, v1, 0)) 
    End If 
    Next 
End Sub 

Hoffentlich ist das, was Sie suchen (für mich ist es nicht 100% klar, was Sie wollen).

Es prüft einfach v1, um den Wert zu haben, den Sie wünschen, und druckt den Wert v2 von der gleichen Reihe.

Der Fehler selbst ist einfach, weil Sie versuchen, ein Array zu vergleichen, das für VBA nicht möglich ist (=).

jedoch eine Aufgabe wie diese einfache, auch über Arbeitsblatt-Formeln getan werden könnte;)

+0

Wow du bist der Mann! Dies ist perfekt. Ahhh ich verstehe es jetzt vollkommen. Am Ende bekomme ich viel SQL in den Kopf und leide darunter. Danke x1000 – Clickbeast

+0

Sie sind willkommen :) –

Verwandte Themen