Direkt zum Inhalt
Menü
  • Über mich / Kontakt
  • Impressum / Datenschutz
  • Meeting
  • Suche
  • Über mich / Kontakt
  • Impressum / Datenschutz
  • Meeting
excel-sprechstunde

Tipps

Wiki für Kursteilnehmer

VBA-Wiki für Kursteilnehmer

Tipps zur Excel, Access, etc.

Excel Blätter

Excel Blätter

Neues Blatt anlegen und benennen
Dim Sh as Worksheet
 Set Sh = Worksheets.add
 Sh.name = "Neues Blatt"
Alle gewählen Blätter durchlaufen

Durch alle markierten Blätter der Mappe durchlaufen.
Der Name des Blatts wird im Direktbereich mit debug.print ausgegeben.
In jedes Blatt wird in der Zelle „A1“ der Text „Hallo“ geschrieben.

Sub AlleBlätter()
 Dim B As Worksheet 'Objektvariable anlegen
 For Each B In ActiveWindow.SelectedSheets 'Auflistung der markierten Blätter
 Debug.Print "Ausgewählt:" & B.Name 'Name des Blatts ausgeben
 B.Cells(1, 1) = "Hallo" 'in jede Zelle A1 "Hallo" schreiben
 Next
End Sub
Alle Blätter in der aktiven Mappe durchlaufen
Sub AlleBlätter()
  Dim E As Object
  'Alle Blätter Diagramme und Arbeitsblätter
  For Each E In Sheets
    Debug.Print E.Name, TypeName(E)
  Next
End Sub
Sub AlleWorksheets()
  Dim E As Worksheet
  'Nur Arbeitsblätter
  For Each E In Worksheets
    Debug.Print E.Name, TypeName(E)
  Next
End Sub
Sub AlleDiagramme()
  Dim E As Chart
  'Nur Diagramme
  For Each E In Charts
    Debug.Print E.Name, TypeName(E)
  Next
End Sub
Blätter verschieben
Sub AnErsteStelle()
  Dim Sh As Worksheet
  Set Sh = ActiveSheet
  Sh.Move Sheets(1)
End Sub
Sub AnLetzterStelle()
  Dim Sh As Worksheet
  Set Sh = ActiveSheet
  Sh.Move , Sheets(Sheets.Count)
End Sub
Neues Blatt erstellen und Verweis auf Blatt
Function MacheBlatt(n As String) As Worksheet

'Neues Blatt wird erstellt, wenn es noch nicht vorhanden ist
'Rückgabewert: Verweis auf Blatt

 Dim S As Worksheet, gefunden As Boolean
 For Each S In Worksheets
   If S.Name = n Then
     gefunden = True
     Exit For
   End If
 Next

 If gefunden = False Then 'Blatt nicht vorhanden
    Set S = Worksheets.Add(Sheets(1))
    S.Name = n
 End If

 Set MacheBlatt = S
End Function
Bereichsnamen
In welchem benannten Bereich ist die Zelle
Function BereichsName(oCellA As Range) As Variant

'In welchem benannten Bereich ist eine Zelle
   Dim oCell As Range
   Dim oName As Name
   'Set oCell = Range(oCellA.Formula)
   Set oCell = oCellA
   For Each oName In ThisWorkbook.Names
      If oName.RefersToRange.Parent Is oCell.Parent Then
         If Not Intersect(oCell, oName.RefersToRange) Is Nothing Then
            BereichsName = oName.Name
            Exit Function
         End If
      End If
   Next

End Function
Funktionen

Excel Functions

Zahlen und Leerzeichen aus einer Zelle Filtern

z.B. aus NurZahlen(„ABC123 XYZ456X“) wird 123 456

Function NurZahlen(Text As String)
 Dim Z As String
 Dim i As Integer
 Dim Erg As String
 For i = 1 To Len(Text)
 Z = Mid(Text, i, 1)
 If Z = " " Then
 Erg = Erg & Z
 ElseIf IsNumeric(Z) Then
 Erg = Erg & Z
 End If
 Next
 NurZahlen = Erg
 End Function
 Werte subtrahieren statt addieren
Function SumDif(B As Range)

'Subtrahiert alle Werte des Bereichs vom ersten Wert
 'z.B. bei 10;20;30
 'Ergebnis = 10-20-30 = -40
 Dim E As Range, i As Integer
 Dim Res As Double

For Each E In B
 If i = 0 Then 'erstes Element
 Res = E.Value
 Else
 Res = Res - E.Value
 End If
 i = i + 1
 Next
 SumDif = Res
 End Function
Weitere
Längsten Eintrag in einer Spalte finden (mit Matrix-Funktion)

Eine Excel-Liste soll nach Access importiert werden.
Um die Felder der Tabelle anzupassen wird die Anzahl der Zeichen des längsten Eintrags einer Spalte benötigt.
Das kann mit einer Kombination der Funktionen MAX und LÄNGE als Matrix-Funktion erreicht werden, z.B.

{=MAX(LÄNGE(D3:D6147))}

Liefert das Maximum der Längenberechnung in den Zellen D3:D6147.
Die Formel muß als Matrix-Funktione gespeichert werden, statt der Enter-Taste bitte Shift+STRG+Enter drücken.

LÄNGE(D3:D6147) berechnet für jede Zelle die Anzahl der Zeichen und speichert das Ergebnis in einer Matrix im Speicher.
MAX() findet in dieser Matrix den größten Wert und liefert das Ergebnis der Formel.

Excel Log-Datei schreiben

Erzeugt die Datei sys.log im gleichen Verzeichnis und protokolliert alle Änderungen an der Mappe

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
 Open ActiveWorkbook.Path & "\sys.log" For Append As 1
 Write #1, Now() & "," & Application.UserName & "," _
 & Sh.Name & "," & Target.Address & "," & Target.Value
 Close #1
 End Sub
Blattschutz aufheben Excel 2010

Der Excel-Blattschutz schützt vor versehentlichem Überschreiben einer Zelle.
Mit der folgenden Prozedur kann das Blatt entsperrt werden:

Sub unprotectX()
 Dim i As Integer, j As Integer, k As Integer
 Dim l As Integer, m As Integer, n As Integer
 Dim i1 As Integer, i2 As Integer, i3 As Integer
 Dim i4 As Integer, i5 As Integer, i6 As Integer
 On Error Resume Next
 For i = 65 To 66: For j = 65 To 66: For k = 65 To 66
 For l = 65 To 66: For m = 65 To 66: For i1 = 65 To 66
 For i2 = 65 To 66: For i3 = 65 To 66: For i4 = 65 To 66
 For i5 = 65 To 66: For i6 = 65 To 66: For n = 32 To 126

kennwort = Chr(i)& Chr(j) & Chr(k) & Chr(l) & Chr(m) & Chr(i1) & Chr(i2) & Chr(i3) & Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)
 ActiveSheet.Unprotect kennwort
 If ActiveSheet.ProtectContents = False Then
 MsgBox "Fertig" & vbCr & "Das alternative Kennwort lautet:" & vbCr & kennwort
 Debug.Print kennwort
 Exit Sub
 End If
 Next: Next: Next: Next: Next: Next
 Next: Next: Next: Next: Next: Next
 End Sub
Excel Pivot Gesamtes Feld erweitern/reduzieren

Eigene Buttons für „Gesamtes Feld erweitern“ und „gesamtes Feld reduzieren“ bei einer Pivot-Table

Sub Pivot_Minus()
 On Error Resume Next
 ActiveSheet.PivotTables(ActiveCell.PivotTable.Name) _
 .PivotFields(ActiveCell.PivotCell.PivotField.Name).ShowDetail = False
End Sub

Sub Pivot_Plus()
 On Error Resume Next
 ActiveSheet.PivotTables(ActiveCell.PivotTable.Name) _
 .PivotFields(ActiveCell.PivotCell.PivotField.Name).ShowDetail = True
End Sub
Andere Office-Anwendungen

Andere Office-Anwendungen

Powerpoint Pfad auf allen Folien

Schreibt den Pfad und Namen der Präsentation als Textfeld auf alle Folien

Sub AlleSlides()
  Dim S As Slide
  For Each S In ActivePresentation.Slides
    S.Select
    S.Shapes.AddLabel(msoTextOrientationHorizontal, 248, 515, 6.875, 13.75).Select
    ActiveWindow.Selection.ShapeRange.TextFrame.TextRange.Text = _
    ActivePresentation.FullName
  Next
End Sub

... hier geht es weiter

1 -- Moodle auf Excel-Sprechstunde.de
2 -- Moodle auf 3D-Academy.org
3 -- Moodle1 auf 3D-Academy.org
4 -- Moodle2 auf 3D-Academy.org

 

Join-Meeting

Was kann ich für Sie tun?

Oliver Ochssner

Dipl. Informatiker FH
Independent software developer

Spezialist für VBA-Entwicklung
Trainer für Excel und Access

 

 

 

Copyright © 2025 excel-sprechstunde. All Rights Reserved.

Codilight Theme von FameThemes