|
vorherige Seite
| Seite 1 | nächste Seite
Benutzerdefiniertem
Symbol einen Meldungstext zuweisen
Nachfolgend sehen Sie ein Beispiel-Makro, in welchem eine
Symbolleiste und ein Symbol eingefügt und diesem Symbol ein Makro und ein Text zugewiesen
werden.
A1: Eigenes Symbol
A2: =SYMBOLLEISTE.EINFÜGEN("Symbolleiste2")
A3: =SYMBOL.HINZUFÜGEN("Symbolleiste2";;C2:J2)
A4: =RÜCKSPRUNG()
Nachfolgend sehen Sie die achtspaltige Definitition für die Zellen C2:J2, die für das
Argument "Symbol_Bezug" der Makro-Funktion SYMBOL.HINZUFÜGEN benötigt werden.
C2: 215
D2: Makro1.XLS!Testmakro
E2: Falsch
F2: Wahr
G2:
H2: Meldungstext
I2: Makro
J2:
Der Makrobefehl SYMBOLLEISTE.EINFÜGEN wird nur benötigt, wenn die Symbolleiste noch
nicht vorhanden ist. Der zweite Parameter in der Funktion SYMBOL.HINZUFÜGEN gibt die
Position an, an der das Symbol eingefügt wird; ansonsten wird das benutzerdefinierte
Symbol an das Ende der Leiste angefügt.
Makro ausführen ohne
Auto_Öffnen
Folgende Prozeduren zeigen, wie das Problem mit der Methode
"OnSheetActivate" gelöst werden kann.
Damit das gezeigte Makro direkt lauffähig ist sollte die Datei ONSHEET.XLS heißen und
ein Blatt mit dem Namen "OffeneDateien" enthalten. Das Blatt ist nötig, um die
Namen der offenen Dateien zwischenzuspeichern.
'Mit diesem Makro kann erreicht
werden, daß nur beim ersten Öffnen einer Datei 'ein bestimmtes Makro ausgeführt wird.
'Es muß in der betreffenden Datei kein Schlüsselwort AUTO_ÖFFNEN mit dem
'entsprechenden Makro zugeordnet werden.
'Allerdings wird das Makro nach dem Schließen und Wiederöffnen einer Datei nicht 'erneut
ausgeführt. Hierzu muß die Arbeitsmappe ONSHEET.XLS erneut geladen werden |
Public Book As Object
Sub Auto_Open()
Set Book = Workbooks("ONSHEET.XLS").Sheets("OffeneDateien")
Book.Range("A:A").ClearContents
Application.OnSheetActivate = "Probe"
End Sub
Sub Probe()
'bei Makrodatei nicht ausführen
If ActiveWorkbook.Name = "ONSHEET.XLS" Then
Exit Sub
End If
'Überprüfen aller Mappen, ob Sie bereits vorhanden sind
For I = 1 To Workbooks.Count '
If Book.Cells(I, 1).Value = ActiveWorkbook.Name Then
Exit Sub
End If
Next
'Das eigentliche Makro
Call Ihre_eigene_Prozedur
'Merken aller offenen Mappen
For I = 1 To Workbooks.Count
Book.Cells(I, 1).Value = Workbooks(I).Name
Next
End Sub
'Hier können Sie Ihr eigenes Makro entwerfen
Sub Ihre_eigene_Prozedur()
MsgBox "Hallo, Sie haben gerade eine neue Datei geöffnet"
End Sub
'Beim schließen der Makrodatei .OnSheetActivate wieder deaktivieren
Sub Auto_Close()
Application.OnSheetActivate = ""
End Sub
Erste
leere Zelle nach einem variablen Bereich bestimmen
Am einfachsten geht dies mit Hilfe der END-Methode des RANGE-Objekts.
Damit kann - unter Verwendung einer Konstanten - das Ende eines zusammenhängenden
Bereichs ermittelt werden.
Sub AnsUntereEnde()
Selection.End(xlDown).Offset(1, 0).Select
End Sub
Sub AnsRechteEnde()
Selection.End(xlToRight).Offset(0, 1).Select
End Sub
Sub AnsLinkeEnde()
Selection.End(xlToLeft).Offset(0, -1).Select
End Sub
Sub AnsObereEnde()
Selection.End(xlUp).Offset(-1, 0).Select
End Sub
Beachten Sie bitte, daß unter Umständen abgefragt werden muß, ob die Verschiebung der
Auswahl in einen gültigen Zellbereich fällt, da sonst Laufzeitfehler entstehen können.
Natürlich können die einzelnen Anweisungen auch kombiniert werden. Um z.B. die Zelle in
der ersten freien Zeile der ersten Spalte unterhalb eines Bereiches zu ermitteln, sind
folgende Zeilen notwendig:
Selection.End(xlToLeft).Select
Selection.End(xlDown).Offset(1, 0).Select
Zuerst wird also die erste Spalte des Bereichs ermittelt, dann die erste
freie Zeile unterhalb dieses Bereichs.
Markierten Bereich
erweitern mit VBA
Problem: Sie beziehen sich
in einem VISUAL BASIC Programm auf einen Bereich, welcher vom Benutzer frei wählbar sein
soll. In diesem Bereich sollen Operationen durchgeführt werden. Danach soll dieser
Bereich um genau eine Zeile erweitert werden. Sie können dies mit der folgenden kleinen
VBA-Routine erledigen:
Sub BereichErweitern()
Dim ZeileAnfang As Integer
Dim ZeileEnde As Integer
Dim SpalteAnfang As Integer
Dim SpalteEnde As Integer
'Bereichsgröße bestimmen:
SpalteAnfang = Selection.Column
SpalteEnde = Selection.Columns.Count
ZeileAnfang = Selection.Row
ZeileEnde = Selection.Rows.Count
ZeileAnfang = ZeileAnfang
'Hier könnte eine Prozedur zum Bearbeiten des markierten
'Bereiches stehen
'Bereich erweitern:
ZeileEnde = ZeileEnde + ZeileAnfang
SpalteEnde = SpalteEnde + SpalteAnfang - 1
Range(Cells(ZeileAnfang, SpalteAnfang), Cells(ZeileEnde,
SpalteEnde)).Select
End Sub
Anzahl
und Namen geöffneter Arbeitsmappen ermitteln
Problem: Sie möchten die
Namen aller derzeit geöffneten Arbeitsmappen mittels VISUAL BASIC für Applikationen
(VBA) ermitteln?
Die nachfolgenden zwei Beispiele demonstrieren, wie dieses Problem mit Hilfe von VBA
gelöst werden kann. Abhängig davon, ob im Menü unter EXTRAS -OPTIONEN, im Register
"Modul allgemein" die Sprache auf Englisch oder Deutsch eingestellt ist, können
Sie eines der unten stehenden Beispiele verwenden.
Beispiel Deutsch:
Sub CheckOpenWorkbooks()
Dim i Als Ganz
Dim t Als ZeichenF
t = "Anzahl geöffneter Arbeitsmappen: " & ArbeitsmappeListe.Anzahl &
Zn$(13)
Für i = 1 Bis ArbeitsmappeListe.Anzahl
t = t & Zn$(13) & "Datei " & i & ": " &
ArbeitsmappeListe(i).Name
Nächste
MeldungsDlg t
Ende Sub
Beispiel Englisch:
Sub CheckOpenWorkbooks()
Dim i As Integer
Dim t As String
t = "Anzahl geöffneter Arbeitsmappen: " & Workbooks.Count & Chr$(13)
For i = 1 To Workbooks.Count
t = t & Chr$(13) & "Datei " & i & ": " &
Workbooks(i).Name
Next
MsgBox t
End Sub
Word Dokument
aus Excel mit Shell öffnen
Für das Öffnen der Datei können Sie folgende Funktionen verwenden:
Sub Worddatei_öffnen()
Dim dat As String
Dim p As Object
'Hier den Dokumenten-Pfad eintragen:
dat = "C:\Eigene Dateien\Bilanz.doc"
On Error GoTo s 'Probieren, ob Word schon gestartet ist
AppActivate "Microsoft Word"
GoTo n
s: 'Word starten
Application.ActivateMicrosoftApp (xlMicrosoftWord)
n:
'Dokument über OLE Automation öffnen
Set p = CreateObject("Word.basic")
p.DateiÖffnen dat
End Sub
Diese Prozedur überprüft außerdem, ob WORD bereits gestartet ist. Somit wird, im
Gegensatz zur Verwendung des SHELL Befehls, keine 2. Instanz des Programms geöffnet. Mit
den Befehlen AppActivate und ActivateMicrosoftApp erspart man sich die Angabe des
Programm-Pfades. Das Öffnen der Datei erfolgt dann über OLE Automation.
Alternative:
Über das Menü EINFÜGEN - OBJEKT, Register "Aus Datei erstellen", mit der
Option "Als Symbol", können Sie auch ein Symbol anstelle der Schaltfläche in
Ihre Tabelle einfügen. Für den Doppelklick - anstelle eines einfachen Klicks ersparen
Sie sich jegliche Programmierung.
Dezimalzahlen am Komma
ausrichten
Es gibt die Möglichkeit, über ein benutzerdefiniertes Zahlenformat
Dezimalzahlen am Komma auszurichten. Gehen Sie dazu wie folgt vor:
1. Markieren Sie die auszurichtenden Zellen.
2. Wählen Sie über das Menü FORMAT - ZELLEN... , das Register ZAHLENFORMAT (in
Microsoft EXCEL 4.0 für WINDOWS, FORMAT - ZAHLENFORMAT) aus und geben in dem Feld FORMAT
die Zeichenfolge "0,????" ein (Eingabe erfolgt ohne Anführungszeichen).
Beachten Sie bitte, daß die Anzahl der Fragezeichen "?" abhängig von der
Anzahl der maximalen Nachkommastellen in der Spalte ist.
Dezimalzahlen als
Uhrzeit darstellen
Es gibt in EXCEL 7.0 keine fertige Formel, welche Dezimalzahlen in
Uhrzeiten umwandeln kann. Sie können sich aber eine entsprechende Formel selbst
zusammenstellen. Hier ein Beispiel für eine Formel, die den Wert 8,75 in die Uhrzeit 8:45
umrechnet:
=(GANZZAHL(8,75)&":"&(8,75-GANZZAHL(8,75))*60)*1
Die Formel arbeitet folgendermaßen:
Die Ganzzahl der Dezimalzahl 8,75 entspricht dem Stundenwert 8 und wird mit der Funktion
GANZZAHL(8,75) ermittelt. Die Nachkommastellen müssen für die Minuten mit dem Wert 60
multipliziert werden. Um die Nachkommastellen zu ermitteln, wird die Ganzzahl von der
Dezimalzahl abgezogen. Durch die Funktion 8,75-GANZZAHL(8,75))*60 hat man somit die
Minuten ermittelt. Die Stunden und die Minuten werden anschließend durch das Zeichen
"&" und einem Doppelpunkt verbunden. Da das Ergebnis als Text vorliegt, wird
es mit der Zahl "1" multipliziert. So entsteht eine serielle Zahl, mit der auch
gerechnet werden kann. Zu guter Letzt versieht man die Zelle noch mit einem Uhrzeit
Zahlenformat aus dem Register "Zahlen", welches man über das Menü FORMAT -
ZELLEN auswählen kann.
Runden auf das
Vielfache einer Zahl
EXCEL stellt ab der Version 5.0 eine Funktion zur Verfügung, um
Zahlen auf das Vielfache einer Zahl zu runden. Es handelt sich um die Funktion VRUNDEN.
Diese Funktion gehört nicht zum Standardumfang von EXCEL, sondern ist in dem Add-In
"Analyse-Funktionen" definiert. Sie sollten also zuerst über den Add-In-Manager
(im Menü EXTRAS) die "Analyse-Funktionen" einbinden.
Hier einige Beispiele zur Anwendung der Funktion VRUNDEN:
FUNKTION: ERGEBNIS: BESCHREIBUNG:
=VRUNDEN(128,341;0,05) 128,35 rundet auf 0,05
=VRUNDEN(128,341;0,01) 128,34 rundet auf 2 Nachkommastellen
=VRUNDEN(128,341;0,5) 128,5 rundet auf 0,5
=VRUNDEN(128,341;0,1) 128,3 rundet auf 1 Nachkommastelle
=VRUNDEN(128,341;1) 128 rundet auf die ganze Zahl
=VRUNDEN(128,341;10) 130 rundet auf volle Zehner
Bemerkung:
Sind im Betriebssystem "schweizerdeutsche" Einstellungen definiert, so sind
in den oben genannten Beispielen jeweils das Komma durch einen Punkt und das
Semikolon durch ein Komma zu ersetzen.
Zeiten
addieren, deren Summe größer als 24 Std. ist
Die Summen überschreiten z.T die 24-Stunden-Grenze. Angezeigt wird
aber nur eine Zeit, die kleiner 24 Stunden ist. Das Problem dabei ist das Zahlenformat.
Wird das Standardzeitformat ("h:mm:ss") vergeben, so wird das Ergebnis wie oben
beschrieben formatiert. Verwenden Sie dagegen das Format "[h]:mm:ss" - versehen
also die Stunden mit eckigen Klammern - so zeigt die Summe der Stunden auch über 24
Stunden hinausgehende Werte an. |
|