Makro für Excel

Azad

Mitglied
Grüsse.

Mein Problem:
Ich will (bzw. mein Chef), dass er in der Excel Tabelle auf eine Zahl aus einem Raster klicken kann, sich diese dann färbt (bzw. einfach von den anderen im Raster vorhandenen Zahlen abhebt) und gleichzeitig noch in eine andere Zelle übertragen wird. Die andere Zelle ist fest vorgegeben und dient zur Berechnung. Er könnte die Zahl einfach eingeben, richtig, aber das ist zu wenig Komfort *grinst*.

Ein Beispiel: Die Zellen A1-A5 haben je einen Wert der sich voneinander unterscheidet. Diese Zahl muss in die Zelle A6. Er klickt jetzt z.B. auf die Zelle A2 (Wert: 25) und diese färbt sich Blau. Mit dem gleichen Klick (oder noch besser, Doppelklick) sollte 25 in der Zelle A6 erscheinen.

Jetzt hab ich mir vorgestellt dass man ein "Wenn-Dann-Makro" machen kann. Mit einer Funktion wird das ja wohl kaum gehen oder? Da ich aber keinen Schimmer von Makros habe... hab ich gedacht ich frag mal hier.

Ich hoffe mir kann jemand helfen. *smile*

Greez
Azad
 

FloHoCH

Stammgast
Keine Ahnung, ob meine Ideen in der Tat umsetzbar sind! Leider kann ich es momentan nicht selber versuchen, also schreibe ich sie und lasse es offen ...

1) Gibt es in Excel keine Buttons?

2) Lässt sich sowas ev. mit (internen) Hyperlinks lösen?

3) Spalte A = Off / Spalte B = ON (Werte werden wie Schalter hin und her gezigen)

Sonst kommst du wahrscheinlich nicht ums Makto herum.

Muss es denn zwingend in Excel realisiert werden?
 

Azad

Mitglied
Ja, leider muss es Excel sein.

zu Punkt 1) Ich hab schon ein wenig rumprobiert, aber leider nichts gefunden was meinen Anforderungen entspricht... die ja, zugegeben, nicht gerade die geringsten sind.

zu Punkt 2) Was kann man denn mit einem Hyperlink alles anstellen? Also, ich verlinke einfach eine Zelle, und der Cursor springt dann zu der vorgegebenen Zelle. Kann der noch mehr?

zu Punkt 3) Wie würde das denn genau funktionieren? Gibts da dann 2 Spalten mit dem gleichen Wert? Und dann schieb ich einfach den Regler nach links wenn der Wert übernommen werden soll und nach rechts wenn er nicht übernommen werden soll?
 

host07

Stammgast
Ich habe hier einen kleinen Versuch gemacht. ACHTUNG: Bevor du eine neue Zelle mit einem Doppelklick markierst, musst du die alte Markierung zuerst mit einem Doppelklick wieder löschen!!

Ist somit noch nicht gut gelöst, aber ne erste funtionierende Idee:


Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range,  Cancel As Boolean)
         
    Dim Wert As Double
    Wert = ActiveCell.Value
        
    If ActiveCell.Interior.ColorIndex = 6 Then
        Selection.Interior.ColorIndex = xlNone
        'Kann weggelassen werden, wenn Wert stehen bleiben soll
        Range("A6").Value = ""
    
    Else
        
        With Selection.Interior
            .ColorIndex = 6
            .Pattern = xlSolid
        End With
        Range("A6").Value = Wert
        
    End If

End Sub
 
Zuletzt bearbeitet:

Officer

Stammgast
Hallo Azad

Hier meine Version:

Code im VBE in die Tabelle einfügen, welche die Anweisungen ausführen soll. Die Daten werden dann in Zelle "A6" übernommen:

'======= Code start =======
Option Explicit
Dim rngLastActiveCell As Range

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim lngCellColorIndex As Long, lngFontColorIndex As Long, lngPattern As Long
Dim rngCellOperation
10 If Not (rngLastActiveCell Is Nothing) Then
20 lngCellColorIndex = xlAutomatic
30 lngFontColorIndex = xlAutomatic
40 lngPattern = xlNone
50 Set rngCellOperation = rngLastActiveCell
60 GoSub DoColor
70 End If
80 lngCellColorIndex = 5
90 lngFontColorIndex = 2
100 lngPattern = xlSolid
110 Set rngCellOperation = Target
120 GoSub DoColor
130 Set rngLastActiveCell = Target
140 Range("A6").Value = Target.Value
150 Exit Sub
DoColor:
160 With rngCellOperation
170 .Interior.ColorIndex = lngCellColorIndex
180 .Interior.Pattern = lngPattern
190 .Font.ColorIndex = lngFontColorIndex
200 End With
210 Return
End Sub
'======= Code =======

Was Du noch einbauen musst, dass nur die Zellen geändert/im Code einbezogen werden, welche auch die Daten enthalten.
 
Zuletzt bearbeitet:

Azad

Mitglied
Also danke schonmal für den Vorschlag. Aber es funktioniert irgendwie nicht... @ den ersten Vorschlag


@Officer
Ok, ich probier das mal aus. Vielen Dank schonmal.
 

Officer

Stammgast
Hatte gerade Zeit und Spass, meinen Code zu verbessern, inkl. Einschränkung der Zellen, wo der Code abläuft, einfacher Fehlerbehandlung und Kommentare :

' =========== Code start ===========
Option Explicit
Dim rngLastActiveCell As Range

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim lngCellColorIndex As Long, lngFontColorIndex As Long, lngPattern As Long
Dim rngCellOperation as Range
10 On Error GoTo Err_Worksheet_SelectionChange
' Alte Zelle zurücksetzen
20 If Not (rngLastActiveCell Is Nothing) Then
30 lngCellColorIndex = xlAutomatic
40 lngFontColorIndex = xlAutomatic
50 lngPattern = xlNone
60 Set rngCellOperation = rngLastActiveCell
70 GoSub DoColor
80 End If
' Code nur in Spalte A (Column 1) und bis Zeile 5 (Row > 5) ausführen
90 If Target.Column > 1 Or Target.Row > 5 Then GoTo Exit_Worksheet_SelectionChange
' Formate neue Zelle setzen
100 lngCellColorIndex = 5
110 lngFontColorIndex = 2
120 lngPattern = xlSolid
130 Set rngCellOperation = Target
140 GoSub DoColor
' Zelle in Variable referenzieren
150 Set rngLastActiveCell = Target
' Wert in Berechnungszelle setzen
160 Range("A6").Value = Target.Value
Exit_Worksheet_SelectionChange:
170 On Error GoTo 0
180 Exit Sub
' Fehlerbehandlung
Err_Worksheet_SelectionChange:
190 MsgBox Err.Number & vbCrLf & Err.Description
200 Resume Exit_Worksheet_SelectionChange
DoColor:
' Subfunktion: Zellen formatieren
210 With rngCellOperation
220 .Interior.ColorIndex = lngCellColorIndex
230 .Interior.Pattern = lngPattern
240 .Font.ColorIndex = lngFontColorIndex
250 End With
260 Return
End Sub

' =========== Code end ===========
 

Azad

Mitglied
*freu* Mal testen.

Aber noch eine Frage. Also ich hab ja verschiedene kleine Tabellen in der Excel Tabelle (so eine Übersicht über die Werte) und, je nach Spalte bzw. Zeile muss der Wert in ein anderes Zielfeld.

Welche Befehle muss ich genau kopieren?
 

Officer

Stammgast
Ich hab's erst jetzt kapiert, was Du möchtest. Du hattest nicht geschrieben, dass es verschiedenen Zeilen/Spalten sind. Erklär doch 'mal im Detail, welche Spalten, welcher Wert wo rein muss und so. Dann müssen wir die genannten Zeilen anpassen, aber dann wird es etwas komplizierter. Aber sicher machbar...
 

FloHoCH

Stammgast
Ich hatte mittlerweile Excelzugang, aber ihr arbeitet da an einer viel besseren Lösung, ich klinke mich also aus ;)
 

host07

Stammgast
Also danke schonmal für den Vorschlag. Aber es funktioniert irgendwie nicht... @ den ersten Vorschlag


Die Frage ist, wo du den Quelltext hin kopierst hast. Muss in Tabelle 1 sein (siehe Bild).


Du kannst die Datei mit dem Makro sonst hier runter laden.
 

Anhänge

  • Makro.jpg
    Makro.jpg
    38,9 KB · Aufrufe: 6
Zuletzt bearbeitet:
Oben