RSS Feed

VBA: Hintergrundfarbe einer UserForm an eine andere übergeben

Freitag 20. Aug 2010 um 12:00 Uhr

Das hat man davon, wenn man direkt von Anfang an ein “schönes” Programm schreiben will: Man schlägt sich stundenlang mit optischem Schnickschnack herum und die eigentliche Funktion des Programms kommt später. Ich muss dringend an meiner Programmierreihenfolge arbeiten ;-)

Mein Ziel ist, dass der Benutzer des Programms die Farbe der Oberfläche selbst festlegen kann. Für das erste Formular, auf dem sich die Farbwahlbuttons befinden, klappt das prima. Aber wie übernehmen die nächsten Formulare das? So:

Public Sub cmdButtonzumFormular2_Click()
‘erst im Hintergrund laden
Load frmFormular2
‘die Hintergrundfarbe des aktuellen Formulars wird als Tag an frmFormular2 übergeben
frmFormular2.Tag = Me.BackColor
‘erst jetzt darf das aktuelle Formular geschlossen werden
Unload Me
‘das Formular 2 wird gezeigt
frmFormular2.Show
End Sub

Ich bin übrigens leider nicht alleine auf die Idee gekommen, das so zu lösen. Hilfreich für mich war ein Artikel auf dailydoseofexcel.
Viel Spaß beim Ausprobieren.

Tags für diesen Beitrag:

Dreieckszahlen

Mittwoch 10. Feb 2010 um 23:26 Uhr

Ich habe mir gerade eine VBA-Prozedur für geschrieben, die mir Primzahlen ausgibt. Hier zunächst der Code zum nachmachen:

Sub Primzahlen()

Dim i As Long, j As Long, Primzahl As Boolean
Dim zeile As Integer
Dim ende As Integer
ende = 32000
zeile = 1

Application.ScreenUpdating = False
For i = 1 To ende: Primzahl = True
For j = 2 To ende
If i Mod j = 0 And i <> j Then Primzahl = False
Next j
If Primzahl = True Then
Cells(zeile, 1) = i
zeile = zeile + 1
End If
Next i

Application.ScreenUpdating = True

End Sub

Bei diesem Code streicht Excel bei ende=32000 die Segel in Form eines Laufzeitfehlers “Überlauf”. 33000 darf ich schon gar nicht prüfen lassen. Also habe ich gegrübelt, wie viele Rechenschritte das sind. Die Suchmaschine stupste mich daraufhin auf die Dreieckszahlen, und mit der Formel dazu konnte ich die Anzahl der Rechenschritte ausrechnen lassen. Bei Primzahlen bis 10 sind es 55 Schritte, die das Programm durchprobieren muss. Bis 100 sind es schon 5050, bei 1000 500500, bei 10000 50005000 und bei den 32000 dann 512016000 Rechenschritte.

Interessant fand ich auch: Wenn ich die Anzahl der Schritte noch als inkrementierte Variable mit in den Code nehme, erfolg der Laufzeitfehler schon bei ende=2000. Excel ist schon komisch…

Und noch eine Auffälligkeit: Die Primzahlen bis zur 36 (=6*6) werden in 666 Schritten getestet.

Wem fällt noch mehr auf?

PS:

Tags für diesen Beitrag: ,

Syntaxfehlermeldung in VBA

Donnerstag 26. Mrz 2009 um 13:11 Uhr

Nehmen wir eine if-Anweisung als Beispiel. Während ich sie schreibe fällt mir auf, dass ich noch eine Variable deklarieren muss. Das will ich sofort nachholen, klicke an der passenden Stelle in den Code und schwupps ploppt mir eine Fehlermeldung auf. Muss das sein? Nein!

Extras | Optionen | Editor bietet als allererstes eine Checkbox “Automatische Syntaxüberprüfung”. Sobald diese deaktiviert ist, wird fehlerhafter Code zwar noch in rot dargestellt, aber die Fehlermeldung fällt weg. Ein Nervfaktor weniger.

Tags für diesen Beitrag:

Dim aa as Range

Samstag 07. Mrz 2009 um 11:31 Uhr

Mein nächster Knackpunkt, während ich ein kleines Spiel zu programmieren versuche:

Ich bin schlicht zu faul, ständig Range(“A4″) zu schreiben. Wäre doch toll, wenn ich die in meinem Fall benötigten 9 Zellen in Variablen packen kann, gell? Also habe ich Folgendes versucht:

Dim aa As Range
aa=Range(“A4″)

Tja, klappt aber nicht. Des Rätsels Lösung:

Da Range ein Objekt ist, muss Set benutzt werden. Also:

Dim aa As Range
Set aa=Range(“A4″)

Und schon funktioniert die ganze Geschichte. Wie gut, dass es fast immer eine faulere Schreibweise gibt, als dieses ganze komplizierte VBA-Gedöns. Ich bau dann mal weiter, meine nächste Herausforderung ist der Zufallsgenerator, der mir von den 9 Zellen immer 4 gelb und 5 blau füllt. Aber durcheinander bitteschön.

Tags für diesen Beitrag:

Schriftfarben im VBA-Editor

Mittwoch 04. Mrz 2009 um 13:02 Uhr

Mal wieder etwas, das ich gerade erst suchen musste.

Die Idee der Programmierer war schon gut: Kommentare werden z.B. grün dargestellt und Schlüsselwörter blau. Aber mal ehrlich… die “bunten” Texte unterscheiden sich kaum vom Rest des Codes. Doch man kann sich das ganz beliebig einstellen:

Im VBA-Editor auf Extras | Optionen | Editorformat und dann dort etwas grellere Farben aussuchen. Dann klapp’ts auch mit nem Beamer ;-)

Tags für diesen Beitrag:

PERSONL.XLS zickt

Montag 02. Mrz 2009 um 15:49 Uhr

Bau ich nun Anwendertipps auf meiner Website bzw. in meinem Blog ein? Oder säg ich damit an meinem eigenen Stuhl? Letzteres glaub ich nicht, dafür sind die Tipps auf viel zu hohem Niveau, zu vereinzelt und zu durcheinander. Wer solche Sachen versteht, kommt komplett ohne Schulung zurecht, weil er Suchmaschinen bedienen kann. Also werde ich ab sofort Tipps aufschreiben. Vor allem die, die ich mir selbst zusammensuchen musste. Wer Excel nicht mag oder nicht braucht, muss halt weglesen.

Problem:
Wenn ich ein Makro aufgezeichnet habe und ausführen will, wird gemeckert, ich solle die personl.xls einblenden. Einiges Rumprobieren, bei dem u.a. beim Programmstart direkt die personl.xls geöffnet wird. Noch mehr Rumprobieren…

Lösung:
Alle Arbeitsmappen bis auf die personl.xls schließen, diese dann speichern, ausblenden (Fenster | Ausblenden) und Excel schließen. Danach wird beim Neustart wie gewohnt die leere “Mappe1″ angelegt und die Makros aus der personl.xls sind auch abrufbar.

Tags für diesen Beitrag: