PDA

Vollständige Version anzeigen : Optionsfelder / Buttons, um Arbeitskraftdarstellung zu ändern


Lucarelli
21.09.2016, 12:24
Hallo zusammen,

ich habe folgendes Problem. Ich habe eine große Tabelle erstellt, die es mir ermöglicht in bestimmten Projekten Ressourcen für die nächsten Jahre zu planen.
Die benötigten Arbeitskräfte bzw. Kapazitäten werden in Stunden angezeigt. Jetzt würde ich es dem Benutzer gerne ermöglichen zwischen Stunden und Manntagen (7 Stunden pro Manntag) durch zwei Optionsfelder "Stunden" und "Manntage" zu switchen.
D.h. Klick auf das Optionsfeld "Manntage" --> Alle Werte werden in Manntage umgerechnet.

Ich kenne mich mit VBA-Programmierung leider überhaupt nicht aus und hoffe auf eure Unterstützung.

Vielen Dank im Voraus :)

R J
21.09.2016, 12:29
Hi Lucarelli,

wozu extra VBA? Nimm eine Zelle mit Gültigkeitsprüfung, zugelassen als Liste sind Stunden und Manntage, und werte in Deiner Berechnung den Wert dieser Zelle entsprechend aus.

Lucarelli
21.09.2016, 12:42
Vielen Dank für die schnelle Antwort. Verstehe nur nicht ganz was du meinst.

Habe eine Beispieldatei hochgeladen. Vielleicht hilft dir das :)

Lucarelli
21.09.2016, 12:45
Hier noch mal ein Screenshot.

Die Werte die jetzt eingetragen sind müssten nur durch 7 dividiert werden. Das soll mit Hilfe des Optionsfeldes "Manntage" geschehen

R J
21.09.2016, 19:35
...füge in ein allgemeines Modul folgenden Code ein:

Option Explicit

Sub Optionsfeld1_Klicken()
Umrechnen "Stunden"
End Sub
Sub Optionsfeld2_Klicken()
Umrechnen "Manntage"
End Sub

Sub Umrechnen(Zu As String)
Dim ber As Range, var
Set ber = Tabelle1.Range("D9:AI13") 'ggf. anpassen
For Each var In ber
var.Value = IIf(Zu = "Stunden", var.Value * 7, var.Value / 7)
Next
Set ber = Nothing
End Sub

Beverly
21.09.2016, 19:52
Hi,

weise dieses Makro beiden Optionsfeldern zu:

Sub Switchen()
Dim rngBereich As Range
Dim rngZelle As Range
Dim lngLetzte As Long
Dim intLetzte As Integer
lngLetzte = IIf(IsEmpty(Cells(Rows.Count, 3)), Cells(Rows.Count, 3).End(xlUp).Row, Rows.Count)
intLetzte = ActiveSheet.Cells.Find(What:="*", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
Set rngBereich = Range(Cells(9, 4), Cells(lngLetzte, intLetzte))
With ActiveSheet.Shapes(Application.Caller)
For Each rngZelle In rngBereich
If rngZelle <> "" Then rngZelle = IIf(.AlternativeText = "Stunden", rngZelle * 7, rngZelle / 7)
Next rngZelle
End With
Set rngBereich = Nothing
Set rngZelle = Nothing
End Sub



Im Code wird die letzte belegte Spalte sowie in Spalte D die letzte belegte Zeile ermittelt, sodass der Bereich selbstständig festgestellt wird.

<hr width="20%" align="left"><img src="http://excel-inn.de/images/grusz.gif" height=35" align="left" alt="Grußformel"><a href="http://excel-inn.de/"><img border="0" src="http://excel-inn.de/images/logo1.gif" height=35" align="middle" alt="Beverly's Excel - Inn"></a>