Excel 2010 > Fehler 1004 : Anwendungs- oder objektdefinierter Fehler

spiiido

Grünschnabel
Hallo

Ich wollte in Excel über VBA ein Balkendiagramm aufgrund einer vorhandenen Tabelle erstellen:

Tabellendefinition:
Code:
A-----B------C-----D-----usw

1   980

2     98

3    111

4       76
u.s.w


B1 = 100%

Balkenmaximalänge = 100 Spalten für 100%, d.h. 980 = 100 Spalten

Für die Spalten 2 bis .. soll ab Spalte 3 ein Balken dargestellt werden, der über soviele Spalten geht, wie der Wert der entsprechenden Zeile in Spalte 2 in Prozent von B1 entspricht.

Die Farbe des Balkens soll der Farbe entsprechen, die als Interior.ColorIndex der Zelle dieser Zeile eingestellt ist, die die Zahl enthält.

Beispiel:
B2 = 98 entspricht 10% Balkenlänge von 100 Spalten, entspricht 10 Spalten.
Also für Zeile 2 soll ab Spalte 3 ein Balken von 10 Spalten länge dargestellt werden.
In der Farbe, die B2 hat.

Das habe ich mit fogender Sub versucht:
Visual Basic:
Sub Balken(ByVal n100Proz As Integer, ByVal nAktProz As Integer)

 On Error GoTo Err_Balken
 
 Dim tCellAdr As String
 Dim iBalkenLaenge As Integer
 Dim nZeile As Long
 Dim nSpalte As Long
 
 tCellAdr = ActiveCell.Address   ' $Spalte$Zeile
 iBalkenLaenge = Int(100 / n100Proz * nAktProz)
 nZeile = CInt(Mid$(tCellAdr, 4, Len(tCellAdr) - 3))
 
 For nSpalte = 3 To 3 + iBalkenLaenge
    Cells(nZeile, nSpalte).Interior.ColorIndex = Cells(nZeile, 2).Interior.ColorIndex
 Next nSpalte
 Exit Sub

Err_Balken:
  MsgBox Err.Number & " " & Err.Description

End Sub

In der Zelle C2 steht: =Balken(A2;B2)


Leider funktioniert das so nicht!

Wenn ich aber während der Programmausführung im Direktfenster foglendes Eingebe:
Cells(nZeile, nSpalte).Interior.ColorIndex = Cells(nZeile, 2).Interior.ColorIndex

während auf genau dieser Zeile in der Sub Balken ein Haltepunkt steht, funktioniert die Ausführung der Anweisung und die entsprechende Zelle in der Tabelle wir mit der korrekten Farbe hinterlegt.

Wo ist der Fehler?

Was mache ich falsch?

Für weiterführende Hinweise bin ich dankbar.
 
Zuletzt bearbeitet von einem Moderator:
Ein Makro muss von extern getriggert werden.

Es wäre mir neu, dass man eine Makro-Funktion per Aufruf in einer Zelle auslösen kann.

Du musst das Change-Event verwenden.

Visual Basic:
Private Sub Worksheet_Change(ByVal Target As Range)

     'Me.Cells(1,2) ist B1, Target.Value ist die Zelle in B, die geändert wurde. Die If-Abfrage nimmt nur Werte aus Spalte B (Column=2)

     if Target.Column=2 then

           Call Balken (Me.Cells(1,2), Target.Value)

    End if

End Sub
 
Ich muss mir gerade selbst widersprechen: Der Aufruf einer VBA-Funktion aus Excel in einer Zelle heraus ist doch möglich, jedoch muss genannte Funktion als Public in einem Standard-Modul deklariert sein.

Dann kann man es wie eine beliebige Excel-Funktion in einer Zelle "=MeineFunktion(Zahl1, Zahl2)" verwenden.

Nur so für diejenigen die es interessiert.
 
Zurück