Excel-Programmierung F.Steyer Zwischen Ausführungsmodus und Entwicklungsmodus wechseln: -> Extras -> Makros -> Sicherheit: auf „Mittel“ setzen Ausführungsmodus: “Makros aktivieren“ Entwicklungsmodus: “Makros deaktivieren” (1) Grundfunktionen Anwendungsfall Golfstatistik Zeilen haben Zahlen, Spalten haben Buchstaben als Koordinaten Die aktive Zelle wird angezeigt. Mit Überschriften anfangen. Dann Zellen einfügen, evtl. Inhalte versetzen (ausschneiden/einfügen). Es gibt drei Datentypen (Text/Zahl/Formel mit =). Formatierungen (-> Format -> Zellen) Log rückwärts (-> Bearbeiten -> eingeben rückgängig) Automatische Vervollständigung Spalten ein- und ausblenden (-> Format -> Spalte explizit) Berechnungen Summe, Mittelwert, Anzahl, Minimum, Maximum als Funktionen, mit Menü Diagramme Datenbereich markieren, F11 drücken es erscheint ein Balkendiagramm, ändern mit -> Diagramm -> Diagrammtyp oder mit Menü Eingabemasken Datenbereich markieren, -> Daten -> Maske (2) VBA-Anschluss (2.1) Command Button -> Ansicht/Symbolleisten/Steuerelement-Toolbox (2.2) einfache Programme Private Sub CommandButton1_Click() MsgBox ("Hallo") End Sub Private Sub CommandButton2_Click() Dim xlDatei As Workbook Dim xlTabelle As Worksheet Dim xlZelle As Range Set xlDatei = Application.Workbooks("Button.xls") Set xlTabelle = xlDatei.Sheets("Tabelle1") Set xlZelle = xlTabelle.Range("E6") MsgBox xlZelle.Value End Sub Private Sub CommandButton3_Click() Dim xlDatei As Workbook Dim xlTabelle As Worksheet Dim xlZelle As Range Set xlDatei = Application.Workbooks("Button.xls") Set xlTabelle = xlDatei.Sheets("Tabelle1") Set xlZelle = xlTabelle.Range("E9") xlZelle.Value = "Titanic1" End Sub Private Sub CommandButton4_Click() Dim xlDatei As Workbook Dim xlTabelle As Worksheet Dim xlZelle As Range Dim zeile, spalte As Integer zeile = 11 spalte = 5 Set xlDatei = Application.Workbooks("Button.xls") Set xlTabelle = xlDatei.Sheets("Tabelle1") Set xlZelle = xlTabelle.Cells(zeile, spalte) xlZelle.Value = "Titanic2" End Sub (3) Datenbankzugriff Access-Datenbank liegt in F:\Frank\ExcelWord\db1.mdb einbinden „Microsoft ActiveX DAO ObjectLibrary 3.6“ Private Sub CommandButton1_Click() Dim db As DAO.Database Dim rs As DAO.Recordset Dim sql As String Set db = OpenDatabase("F:\Frank\ExcelWord\db1.mdb") sql = "SELECT pnr FROM person" Set rs = db.OpenRecordset(sql) MsgBox (rs!pnr) End Sub Private Sub CommandButton2_Click() Dim db As DAO.Database Dim rs As DAO.Recordset Dim sql As String Set db = OpenDatabase("F:\Frank\ExcelWord\db1.mdb") sql = "SELECT pname FROM person" Set rs = db.OpenRecordset(sql) Dim xlDatei As Workbook Dim xlTabelle As Worksheet Dim xlZelle As Range Dim zeile, spalte As Integer zeile = 11 spalte = 5 Set xlDatei = Application.Workbooks("Button2.xls") Set xlTabelle = xlDatei.Sheets("Tabelle1") Set xlZelle = xlTabelle.Cells(zeile, spalte) xlZelle.Value = rs!pname End Sub (4) Makros Aufzeichnung und Ausführung -> Extras -> Makros -> Aufzeichnen Dialog mit Abfragen nach: - Makroname - Tastenkombination - Gültigkeitsbereich - Beschreibung Aufgezeichneter Code Sub Wochenplan_einfügen() ' ' Wochenplan_einfügen Makro ' Erzeugt das Gerüst eines Wochenplans ' ' ActiveCell.FormulaR1C1 = "Wochenplan" ActiveCell.Offset(1, 1).Range("A1").Select ActiveCell.FormulaR1C1 = "Montag" ActiveCell.Offset(0, 1).Range("A1").Select ActiveCell.FormulaR1C1 = "Dienstag" ActiveCell.Offset(0, 1).Range("A1").Select ActiveCell.FormulaR1C1 = "Mittwoch" ActiveCell.Offset(0, 1).Range("A1").Select ActiveCell.FormulaR1C1 = "Donnerstag" ActiveCell.Offset(0, 1).Range("A1").Select ActiveCell.FormulaR1C1 = "Freitag" ActiveCell.Offset(1, -5).Range("A1").Select ActiveCell.FormulaR1C1 = "8:00" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "9:00" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "10:00" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "11:00" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "12:00" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "13:00" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "14:00" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "15:00" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "16:00" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "17:00" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "18:00" ActiveCell.Offset(1, 0).Range("A1").Select End Sub Nachbearbeitung des Codes ist möglich. (5) Besonderheit: Kreuztabelle Unterschiedliche Tabellenkonzepte in Access und Excel x y z y x z ACCESS-Tabelle ACCESS-Tabelle EXCEL-Tabelle dazu Andere Beispiele für Kreuztabelle Geg.: 3 Tabellen EXCEL-Tabelle Datenmodell dazu Kunde KNr Kname kauft Artikel Kadresse Anr Aname Stück Abfrage mit Stück aus allen drei Tabellen Kreuztabelle neue Abfrage, mit Assistent, stellt drei Fragen: nach - Zeilenüberschrift, - Spaltenüberschrift, - Wert im Kreuzungspunkt APreis Abfrage mit Preis Abfrage mit Preis aus allen drei Tabellen Kreuztabelle neue Abfrage, mit Assistent, stellt drei Fragen: nach - Zeilenüberschrift, - Spaltenüberschrift,