2016-07-04 9 views
0

Ich bin neu in VBA also bitte bitte mit mir. Ich habe eine harte Zeit mit diesem Code:Wie man ein Array in eine Variable speichert - VBA

Dim arrayAC() As Variant 
Dim arrayW() As Variant 
Dim DD As date 
Dim LrowAC As Integer 
Dim LrowW As Integer 
LrowAC = Worksheets("A").Columns(29).Find(What:="*", LookIn:=xlValues, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row 
LrowW = Worksheets("A").Columns(23).Find(What:="*", LookIn:=xlValues, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row 
ReDim arrayAC(1 To LrowAC + 1) 
ReDim arrayW(1 To LrowW + 1) 

For i = 3 To LrowAC + 1 
    arrayAC(i) = Worksheets("A").Cells(i, 29) 
Next i 
i = 3 

For h = 3 To LrowW + 1 
    arrayW(h) = Worksheets("A").Cells(h, 23) 
Next h 
h = 3 

For i = 3 To LrowAC + 1 
For h = 3 To LrowW + 1 
If arrayAC(i) = arrayW(h) Then 
DD = arrayAC(i) 
Worksheets("A").Cells(i, "X").Value = DD 
end if 
next h 
next i 

DD erhält keinen Wert! Ich weiß nicht, wie man das ArrayAC (i) in der DD-Variable speichert, die später im Excel-Blatt gedruckt wird. Danke,

+0

Was ist 'DD', deklarieren Sie es nicht im Code Sie habe zur Verfügung gestellt. Die Zuweisung: 'DD = arrayAC (i)' - hast du einen Haltepunkt in diese Zeile gesetzt, um zu sehen, ob er getroffen wird? –

+0

Ich nahm an, dass: Dim DD Als Datum – Zapata

+0

Mein Fehler habe ich zuerst nicht gesehen. Hast du noch debuggen? –

Antwort

1

Ich vermutete, dass sich die Arrays auf Zellbereiche beziehen? Wenn ja, ist es am einfachsten, sie in "Variante" zu konvertieren. Sie am Ende als 2D-Arrays können Sie durchsuchen:

Sub MatchData() 
    Dim ArrayAC As Variant, ArrayW As Variant, i As Long, j As Long, k As Long 

    ArrayAC = ThisWorkbook.Sheets("AC").Range("A2:A250").Value 
    ArrayW = ThisWorkbook.Sheets("W").Range("A2:A250").Value 

    For i = 1 To UBound(ArrayAC) 
     For j = 1 To UBound(ArrayW) 
      If ArrayAC(i, 1) = ArrayW(j, 1) Then 
       DD = ArrayAC(i,1) 
      End If 

     Next 
    Next 



End Sub 
+0

Nein Ich suche 1D das ist mein Problem! Dies soll am Ende eine Zelle füllen. – Zapata

+0

@ Zapata funktional, das sollte nicht wichtig sein, Ein Zellbereich ist standardmäßig 2d (dh, * rows * und * Spalten *), können Sie es auf 1d durch eine doppelte Transponieren Operation erzwingen, aber das sollte nicht wirklich nötig sein. –

0

dies tun, und wenn Sie das Meldungsfeld zu sehen, sollte der Wert auf Spalte X. geschrieben werden, wenn Sie das Meldungsfeld nicht sehen, dann ist etwas anderes falsch mit deinen Annahmen. Wenn Sie das Meldungsfeld mehr als einmal sehen, überschreiben Sie möglicherweise die Zelle in Spalte x, weiteres Debugging wäre erforderlich ...

Verwandte Themen