2017-05-17 5 views
-1

Ich habe eine Telefonliste, die ich brauche Hilfe beim Erstellen. In Blatt 1 werden die Informationen angezeigt. Blatt 2 enthält die Daten. Ich habe 3 Kategorien, Mitarbeiter, Telefonnummern und Supervisors Ich habe etwa 70 Mitarbeiter (gleiche mit Telefonnummern) und etwa 6 SupervisorenErstellen von VBA zum Ausfüllen von Informationen aus einer Liste in bestimmte Zellen

Was ich versuche zu tun, wenn ich auf Blatt 1 ein Supervisor-Schlüssel sie habe leere Zellen unter ihnen und ich möchte, dass der Angestellte, der mit dieser Aufsichtsperson auf Blatt 2 verbunden ist, unter die Aufsichtsperson auf Blatt 1 in der nächsten leeren Zelle gesetzt wird. Ebenso mit der Telefonnummer mit dem Arbeitnehmer verkeilt ist in der benachbarten Zelle eingegeben wird neben den Namen des Mitarbeiters

Auf Blatt 2, Spalte 1 ist Mitarbeiter Spalte 2 ist die Telefonnummer und Spalte 3 Supervisor

Ist das möglich erreicht werden? Wenn ja, wie würde die VBA aussehen?

Vielen Dank für jede Hilfe und jeden, der sich der Herausforderung stellt.

+1

Dies ist eine dieser "Bilder sind mehr als tausend Worte" Situationen. Es ist sehr schwierig zu verfolgen, wie Ihre Daten aussehen und wie sie aussehen sollen. Es klingt jedoch sehr machbar. Tatsächlich klingt es so, als ob es mit einer Formel gemacht werden könnte, um die Information in Ihre leeren Zellen zu ziehen, d. H. '= INDEX (MATCH())'. Wenn Sie die Supervisor-Spalte zuerst auf Sheet2 setzen, können Sie dies mit einem '= Vlookup()' tun (glaube ich). – JNevill

+0

Ja, das ist möglich. Wenn der Supervisor, auf den Sie klicken (Taste?) Auf Sheet1, seinen Namen irgendwo auf Sheet2 hat - zusammen mit seinem Telefon und seiner Adresse - dann ist es möglich, dies zu tun. Was hast du bisher versucht? –

Antwort

0

Als Antwort auf die grundlegende Frage: "Wie würde es aussehen?" Sie können den Namen des Supervisors entweder manuell eingeben oder eine Auswahlliste verwenden. Ich nehme manuelle Eingabe an. Sie wollen ein Änderungsereignis auf sheet1, die wie folgt aussieht:

Private Sub Worksheet_Change(ByVal Target As Range) 
If Not Intersect(Target, Target.Worksheet.Range("A1")) Is Nothing Then 
    If Range("rngSupervisor") <> "" Then 
     List_the_Subordinates 
    Else 
     Target.Worksheet.Range("A1").Select 
    End If 
End If 
End Sub 

Wenn Sie den Vorgesetzten des Namens in A1 eingeben und drücken Sie die Eingabetaste (oder die Zelle verlassen), das Änderungsereignis ausgelöst wird. Dies überprüft, ob Daten in Zelle A1 eingegeben wurden, und wenn dies der Fall ist, wird das Unterprogramm "List_the_Subordinates" ausgeführt.

Jetzt könnte das Subroutine, um die Untergebenen aufzulisten, eine für nächste Schleife sein, nach dem Namen des Super suchen und die Information der Untergebenen über kopieren. So etwas (sehr einfach).

Sub List_the_Subordinates() 
Dim sh1Bottom As Long, sh2Bottom As Long, rowCount As Long 
Sheet2.Activate 
'get bottom row of sheet 2 
sh2Bottom = Sheet2.Cells(Rows.Count, 1).End(xlUp).Row 

Sheet1.Activate 
sh1Bottom = Sheet1.Cells(Rows.Count, 1).End(xlUp).Row + 1 
For rowCount = 1 To sh2Bottom 
    If Sheet2.Cells(rowCount, 3) = Sheet1.Cells("A1") Then 
     sh1Bottom = Sheet1.Cells(Rows.Count, 1).End(xlUp).Row + 1 
     Sheet1.Cells(sh1Bottom, 1) = Sheet2.Cells(rowCount, 1) 
     Sheet1.Cells(sh1Bottom, 2) = Sheet2.Cells(rowCount, 2) 
    End If 
Next rowCount 
End Sub 

Wie gesagt, das ist sehr einfach. Die meisten Leute werden dir sagen, dass du nicht aktivierst und auswählst, wenn du es vermeiden kannst, aber ich habe nie herausgefunden, wie man die untere Reihe des Blattes erreicht, ohne es zu aktivieren :) Die for next-Schleife ist auch eine Art roher Gewalt. Sie könnten Suche oder Übereinstimmung oder was auch immer verwenden, aber da Sie so wenige Zeilen haben, wird dies nicht lange dauern.

Es ist ein Ort zu beginnen. Spiel damit, und lass es für dich singen und tanzen.

Verwandte Themen