Yes, a func_tracktrain. Give it some path_tracks to run on, firstly. Then you'll want to have an Output from the button that has OnPress (or whatever the equivalent is; it should be fairly obvious and if you want a further explanation of each output, the Valve Developer Wiki or pressing the "Help" button in the entity window will walk you through what each output means, most of the time) | *Elevator Name Here* | SetSpeedDirAccel | 1 | 1.
In general, though, buttons and elevators are a bad gameplay mechanic in TF2. If you MUST have a non-Payload elevator, it's best to have a trigger_multiple parented to the elevator, so when the player steps on the elevator will automatically go up. You can handle going down either automatically when the player steps out or have it only go down when the next player hops in.
The former is simplest.
Output:
Code:
OnEndTouchAll | *Elevator Name* | SetSpeedDirAccel | -1 | 1
The latter is more difficult. You'll need 2 trigger_multiples, one for going up and one for going down.
Up output:
Code:
OnStartTouchAll | *Elevator Name* | SetSpeedDirAccel | 1 |1
OnEndTouchAll |*Other Trigger Name* | Enable| <none> | 0
OnEndTouchAll | !self | Disable |<none> | 0.10
The other trigger would be set up with the same outputs, only with -1 for the parameter in SetSpeedDirAccel. Make sure the trigger for going down has "Start Disabled" set to "Yes."