Anzeige
Archiv - Navigation
1340to1344
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Reifegrad in Exceltabelle

Reifegrad in Exceltabelle
26.11.2013 12:13:48
Peter
Hallo Zusammen,
ich erstelle zur Zeit eine Exceltabelle die bei der Produktentwicklung helfen soll. Einzelne Zellen werden über Button eingefärbt und beschriftet. Zum Beispiel mit 'passed, green' und 'not passed,red'.
Dabei habe ich schon einiges an Programmierung geschafft. Jedoch trotzdem noch einige Fragen.
1) Wenn ich Zellen in der Tabelle markiere, und den Button drücke, sollen alle Zellen mit der Funktion, welche hinter dem Button steckt, behandelt werden. Das heißt z.B. ( alle Zellen sollen grün werden mit dem Text 'passed') Zur Zeit geschieht dies nur mit der Zelle oben links.
Den Code den ich dafür benutze:
ActiveCell.FormulaR1C1 = "OK"
With ActiveCell.Characters(Start:=1, Length:=2).Font
.Name = "Arial"
.FontStyle = "Standard"
.Size = 12
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = xlAutomatic
End With
2) Falls Felder noch weiß sind, würde ich gerne das in all diese Felder reingeschreiben wird 'Please add a status'. Die Farben der Felder lese ich mir in einer Schleife aus.
3)Weiß jemand wieso der Haken für rückgänging bei der makroprogrammierung nicht mehr funktioniert? Das ist wirklich nervig.
Ich wäre euch dankbar, wenn jemand eine Idee hat, und mir helfen könnte.
Mit freundlichen Grüßen,
Peter

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Reifegrad in Exceltabelle
26.11.2013 12:56:24
Marc
Hallo Peter
1)
With Selection
.FormulaR1C1 = "OK"
With .Characters(Start:=1, Length:=2).Font
.Name = "Arial"
.FontStyle = "Standard"
.Size = 12
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = xlAutomatic
End With
End With
Falls diese Standardeinstellungen nicht geändert werden wurden, kannst du dir die Zeilen
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = xlAutomatic
auch sparen.
2)
Ergänze die Schleife mit:
if [zellen_variabel].colorindex = xlnone then [zellen_variabel].value = "Please add a status"
3)
Das würde bedeuten, dass jede Zeile des programmierten codes rückgängig gemacht werden müsste, daher ist das nicht möglich. Alternativ solltest du bei der händischen Wiederherstellung deines Ursprungszustandes einfach das als Makro aufzeichnen und entsprechend wieder ablaufen lassen, wenn´s nötig ist. Nach der Testphase kannst du das dann ja löschen.
Viel Erfolg!
Gruß, MCO

Anzeige
AW: Reifegrad in Exceltabelle
27.11.2013 11:13:57
Peter
Hallo,
danke schon mal für deine Antwort. Das hat mir schon weitergeholfen.
Es klappt jedoch noch nicht ganz, weil ich es eingestellt habe, dass eine showmessage kommt, wenn werte in der Tabelle geändert wurden. Wenn jetzt bestimmte Werte nicht ausgefüllt sind, und ausgefüllt werden sollen, bekomme ich jedes Mal die Message Box. Ich weiß, dass ich es einfach nur ausßerhalb der Schleife laufen lassen möchte aber irgendwie bekomme ich das nicht hin:
Hier der Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range
' The variable KeyCells contains the cells that will
' cause an alert when they are changed.
Set KeyCells = Range("F9:AA63")
If Not Application.Intersect(KeyCells, Range(Target.Address)) _
Is Nothing Then
z1 = 0
z2 = 0
z3 = 0
z4 = 0
For r = 9 To 69
For s = 6 To 26
t = Cells(r, s).Interior.ColorIndex
If t = 37 Then z1 = z1 + 1
If t = 4 Then z2 = z2 + 1
If t = -4142 Then z3 = z3 + 1
If t = 3 Then z4 = z4 + 1
Next s
Next r
MsgBox "Cell " & Target.Address & " has changed."
End If
End Sub

Wo müsste ich nun dieses einfügen -> 'ActiveCell.FormulaR1C1 = "Please add a status" ?
Ich möchte das er zu beginn, alle leeren Felder mit dem String verzeichnet und ab dann bei jeder Änderung die Tabelle aktualisiert und mit msgbox die geänderte Zelle ausgibt.
Übrigens:
Wie bekomme ich bei des MsgBox die DollarZeichen bei der Ausgabe weg? Sodass dort z.B. einfach steht:
'Cell F9 has changed' und nicht 'Cell $F$9 has changed'.
Ich wäre euch sehr dankbar, wenn ihr mit weiterhelfen könnten und vielen Dank noch mal für deine Antwort. Das andere hat alles super geklappt.
GLG

Anzeige
AW: Reifegrad in Exceltabelle
27.11.2013 13:36:12
Marc
Mahlzeit!
Für
If t = 37 Then z1 = z1 + 1
If t = 4 Then z2 = z2 + 1
If t = -4142 Then z3 = z3 + 1
If t = 3 Then z4 = z4 + 1
mach mal folgendes:
Select case t
case 37 : z1 = z1 + 1
case  4 : z2 = z2 + 1
case  -4142 : z3 = z3 + 1
case  3 : z4 = z4 + 1
end select
Um Adressen lokal auszugeben nimm

Target.Address(0,0)
Du könntest meiner Meinung nach besser die Adressen im String sammeln und als gesammelten String ausgeben, oder?
Adr_Str = Adr_Str & vbcr & Target.address(0,0)
msgbox Adr_Str
Rückmeldung wär toll....
Gruß, Marc

Anzeige
AW: Reifegrad in Exceltabelle
27.11.2013 14:54:17
Peter
Hallo Marc,
danke schon mal. An die Case Anweisung habe ich auch schon gedacht. Aber da es so funktioniert hat, habe ich es damals nicht geändert. Habe es aber jetzt, gemacht. Ist dadurch übersichtlicher, danke.
Jedoch habe ich mit den anderen beschrieben Dingen noch Probleme, weil mir einfach noch die Kenntnisse fehlen. Ich beschäftige mich erst seit einer Woche mit der Excel VBA Programmierung :(
Kannst du mir vielleicht noch mal genauer helfen, was ich wo eingeben muss? Was genau macht der Befehl target.adress(0,0)?
Lieben Gruß

Target
28.11.2013 09:41:02
Marc
Moin!
Du hast die ganze Prozedur angelegt als
Worksheet_Change(ByVal Target As Range). Das bedeutet, dass die geänderte (Ziel-)Zelle (Target) als Bezug innerhalb der Prozedur zur Verfügung steht.
mit target.address gibst du die Eigenschaft "Absolute Adresse" wieder. Dahinter kannst du optional schreiben, ob "Row absolute = false, column absolute = false" sein sollen. Standardwert = True
Statt false oder true kannst du 0 bzw 1 schreiben, die Parameter müssen nicht explizit ausgeschrieben werden, es reicht also "0,0"
ausgeschrieben, wie Standard: target.address (RowAbsolute = True,ColumnAbsolute = True)
entspricht: target.address (RowAbsolute = 1,ColumnAbsolute = 1)
entspricht: target.address (1,1)
entspricht: target.address
Nicht absolut: target.address (0,0)
Weiter Andwendung findest du in der Excel VBA-Hilfe unter dem Stichwort "Address"
oder schneller: Wort anklicken, F1
Schreib das in die Schleife:
Adr_Str = Adr_Str & vbcr & Target.address(0,0)

Schreib das ans Ende vom Code:
msgbox Adr_Str
Gruß, Marc

Anzeige
AW: Target
28.11.2013 13:37:16
Peter
Hallo,
danke für deine Antwort.
Ich habe es jetzt gemacht und er gibt mir auch die Zelle aus, die ich geändert habe. Jedoch gibt er mir die Zelle so auf aus, wie es ingesamt Anzahl an Zellen im abgefragten Bereich gibt.
Es steht dort dann:
E13
E13
E13
E13
E13
E13
usw, wenn ich die Zelle geändert habe.
Ich entschuldige mich für diese nervigen Fragen, aber mir fehlt da echt noch ein bisschen das Verständnis.
Herzlichen Dank.

AW: Target
29.11.2013 12:39:53
Marc
Hallo!
Leider kann ich da jetzt auch nur raten, bwz dir raten, den Code mit F8 in einelzschritten durchzugehen, bzw Haltepunkte an den entsprechenden Stellen zu setzen, damit du hinzuzufügenden Werte prüfen kannst.
Alternativ kannst du auch eine Beispieltabelle mit dem aktuellen Stand hochladen.
Gruß, Marc

Anzeige
AW: Target
02.12.2013 10:16:03
Peter
Danke für den Tipp.
Ich habe es geschafft. Kann geschlossen werden!
Dank an alle Beteiligten.

13 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige