2016-04-02 4 views
0

Ich bin ein ziemlich neuer VBA-Benutzer und habe nur wenige Codes lernen, wie ich gehe und Foren lesen.Navigieren in mehreren Blättern in VBA je nach Zellenwert

Jetzt möchte ich etwas programmieren und ich konnte keinen Weg finden, es zu tun/einen Hinweis in den Foren, also komme ich, um um Ihre freundliche Hilfe zu bitten.

Ich habe viele Tabellen mit Namen als Titel, Ausgaben dieser Menschen darstellt. Mein Ziel ist es, eine Datei zu erstellen, in der ich die Tabellen neu gruppiere, und dann die Ausgabenreferenzen in der Tabelle "Home" extrahieren möchte. Die relevanten Flächen werden in derselben Zeile mit "Y" gekennzeichnet.

In der Tabelle "Home" habe ich Namen von Personen auf der ersten Seite, z. "Paul", "Marie", "Pierre" etc .... in der gleichen Spalte.

Ich möchte einen Code erstellen, der die Namen in der Kalkulationstabelle "Home" betrachten und Daten aus der "benannten" Kalkulationstabelle zurück auf die "Home" kopieren konnte.

Format wäre das gleiche für die "benannte Kalkulationstabelle", so dass ich immer in der gleichen Spalte suchen.

Ich habe folgendes versucht, so weit

Sub Expenses() 

    Set wk=ThisWorkbok.sheets("Home") 

    Dim Name as String 
    Dim Expense as Integer 
    line_newexpense = 9 
    rowline = 10 
    start_l =34 

    Do While Name <> "#" 
     Line = wk.Cells(start_l,3) 
     Name = ThisWorkbook.Sheets("Home").Cells(line_newexpense,39).Value 
     Expense = ThisWorkbook.Sheets(Name).Cells(rowline,3).Value 

     For j=50 to 8 
      If ThisWorkbook.Sheets(Name).Cells(25,j).Value="Y" Then 
       Line = ThisWorkbook.Sheets(Name).Cells(3,j).Value 
      End If 
      rowline = rowline+1 
     Next j 

     line_newexpense = line_newexpense + 1 
    Loop 

Das Problem ist, wenn ich versuche, es betreibe ich eine „Error 9 Subscript out of range“ begegnen, so dass nicht sicher, wie ich das Problem begegnen könnte,

Vielen Dank im Voraus für Ihre Hinweise!

Mit freundlichen Grüßen,

+0

Hallo Carolina, willkommen zu Stack Overflow. Ich habe Ihre Frage bearbeitet, um Ihren Code lesbarer zu machen. Ein gut eingerückter Code zieht in der Regel qualitativ bessere Antworten an. Viel Glück! –

+0

Hey Carolina, wenn du 'wk = ThisWorkbok.sheets (" Home ")' machst, ist Arbeitsmappe falsch geschrieben, was bedeutet, dass du nicht auf 'Line = wk.Cells (start_l, 3)' zugreifen kannst, da wk nicht gesetzt ist. Dann, wenn Sie versuchen, j von 50 bis 8 zu iterieren, müssen Sie angeben, dass j j - 1 wie folgt sein wird: 'Für j = 50 bis 8 Schritt-1', aber mit diesem j wird rückwärts gehen und rowline wird vorwärts gehen . –

+0

Bitte fügen Sie Screenshots von "Home" und "Name" Sheets hinzu – user3598756

Antwort

0

Sie brauchen nicht VBA für diese. Sie können INDIRECT Funktion verwenden, um zu erreichen, was Sie wollen.

Zum Beispiel

=INDIRECT(B1&"!$A$1") 

Wo B1 den Namen des Arbeitsblatt hat, sagen Sie „Paul“ und A1 ist die Zelle, die die Daten, die Sie benötigen.

enter image description here

Sie können auch Faktor, der die Y Teil in Ihrer obigen Formel IF Funktion.

+0

Danke für die Kommentare und die Hilfe! Haben versucht, die Änderungen zu implementieren, aber möchten, dass der Auszug auf meiner Titelseite eine Zeile nach der anderen ist, bin ich nicht sicher, dass indirekt die beste Option dafür darstellt. Ich wollte VBA verwenden, da es Flexibilität und Formatierung erlaubt, aber wenn ich indirekt dazu komme, bin ich glücklich, den Trick zu lernen (zB: drei Zeilen Ausgaben, aber ich möchte, dass # 1 und # 3 auf dem "Home" Sheet erscheinen unter dem anderen, wie kann ich das tun? Danke! – Carolina

Verwandte Themen