Language: Deutsch English















Last Update: 2017 - 07 - 09





Visual Basic for Applications

Inhalt

  • Telefonnummer aufteilen
  • Zahlen Filtern
  • Verzeichnisgröße ermitteln
  • ZIP-Archiv mit der Shell32-Bibliothek erstellen
  • Kalenderwoche und Jahr anhand eines Datums ermitteln
  • Einführung in Objekten und Klassenmodulen in VBA
  • Die 'Better VBA' Videoserie



  • Telefonnummer aufteilen

    Mit diesen Funktionen kann man eine Telefonnummer, die im Format Landeskennzahl(Vorwahl)Rufnummer (Beispiel: +49(069)555666) gespeichert ist, in ihre Bestandteile zu zerlegen.

    Die folgenden Funktionen benötigen jeweils die komplette Telefonnummer als String und geben dann den jeweiligen Bestandteil zurück.


    Function Rufnummer(Telefonnummer As String)
      Rufnummer = Trim$(Right$(Telefonnummer, _
                   Len(Telefonnummer) - InStr(1, Telefonnummer, ")")))
    End Function
    
    Function Vorwahl(Telefonnummer As String)
      Vorwahl = Trim$(Mid$(Telefonnummer, _
                 InStr(1, Telefonnummer, "(") + 1, _
                 InStr(1, Telefonnummer, ")") _
                 - InStr(1, Telefonnummer, "(") - 1))
    End Function
    
    Function Landeskennzahl(Telefonnummer As String)
      Landeskennzahl = Trim$(Left$(Telefonnummer, _
                   InStr(1, Telefonnummer, "(") - 1))
    End Function
    


    Zurück zur Übersicht

    Zahlen Filtern

    Um effektiv nach Telefonnummern suchen zu können, ist es oft sinnvoll alle Zeichen mit Ausnahme der Zahlen aus aus der Telefonnummer herauszufiltern. Genau das mach die folgende Funktion unter Zuhilfenahme der ASCII-Codes für die Ziffern 0 bis 9.

    Function numbersOnly(strInput As String) As String
      Dim x As Integer
      Dim strNumber As String
    
      For x = 1 To Len(strInput)
        If (Asc(Mid(strInput, x, 1)) > 47 And Asc(Mid(strInput, x, 1)) < 57) Then
          strNumber = strNumber & Mid(strInput, x, 1)
        End If
      Next
      numbersOnly = strNumber
    End Function
    


    Zurück zur Übersicht

    Verzeichnisgröße ermitteln

    Durch rekursives Aufrufen der Dir()-Funktion und dem Addieren der mit FileLen() bestimmten Dateigröße aller enthaltenen Dateien ist es relativ einfach möglich mit den Bordmitteln von VB die Dateigröße eines kompleten Verzeichnisbaumes zu ermitteln.

    Hierbei entstehen allerdings eine Differenz zu dem durch das Verzeichnis tatsächlich belegten Speicherplatzes, da nur die Länge aller Dateien in Bytes summiert wird, aber nicht berücksichtigt wird, dass Blocks die nur teilweise belegt sind, als Speicherplatz vollständig verloren gehen. Besonders Verzeichnisse mit vielen Dateien auf Partitionen mit großen Blocks erzeugen in diesem Kontext deutliche Differenzen.

    Der folgende Code, den man sinvollerweise komplett in ein Modul kopiert, ist ein Beispiel für die Ermittlung der Verzeichnisgröße. Der Aufruf erfolgt über

    verz_pr("C:\der\VerzeichnisName")

    und liefert die Summe der Größe aller enthaltenen Dateien in KB.

    Option Explicit
    
    ' *********************************************
    ' Prozedur aufrufen mittels ? Verz_pr("d:\daten")
    ' *********************************************
    
    Dim Verz(1 To 1000) As String
    Dim ebene As Integer
    
    Function VZG(Wurzel As String) As Boolean
      Dim sum As Long
      Dim Dname As String
      
      Dname = Dir(Wurzel, vbDirectory)
      Do While Dname <> ""
        If (Dname <> ".") And (Dname <> "..") And _
          ((GetAttr(Wurzel & Dname) And _
          vbDirectory) = vbDirectory) _
        Then
          ebene = ebene + 1
          Verz(ebene) = Wurzel & Dname & "\"
        End If
    
        Dname = Dir
      Loop
    
      VZG = True
    End Function
    
    Function verz_pr(w As String) As Long
      Dim i As Integer
      Dim d As Boolean
      Dim sum As Long
    
      i = 1
      ebene = 1
      
      If Right(w, 1) <> "\" Then w = w & "\"
      Verz(1) = w
    
      Do Until Verz(i) = ""
        d = VZG(Verz(i))
        sum = sum + Filelaenge(Verz(i))
        Verz(i) = ""
        i = i + 1
      Loop
    
      verz_pr = sum / 1024
    End Function
    
    Function Filelaenge(Wurzel As String) As Long
      Dim sum As Long
      Dim DName As String
      
      DName = Dir(Wurzel)
      Do While DName <> ""
        If (DName = ".") Or (DName = "..") Or _
            ((GetAttr(Wurzel & DName) And _
            vbDirectory) = vbDirectory) Then
        Else
          sum = sum + FileLen(Wurzel & DName)
        End If
        DName = Dir
      Loop
      Filelaenge = sum
    End Function
    

    Herzlichen Dank an Thomas Röske, der freundlicherweise die hier präsentierten Prozeduren für die Ermittlung der Verzeichnisgröße zur Verfügung gestellt hat.




    Zurück zur Übersicht

    ZIP-Archiv mit der Shell32-Bibliothek erstellen

    Ein langer und ausführlicher Artikel darüber wie man ein ZIP-Archiv mit VBA und der Shell32-Bibliothek erstellt. Die Shell32-Bibliothek ist in jeder Windows Installation ab Windows 2000 enthalten. Der Artikel behandelt ebenfalls das Extrahieren von Datein aus einem Archiv und enthält umfangreichen, funktionerenden Beispielcode, den du direkt per Copy&Paste in deine VBA-Anwendung übernehmen kannst.



    Zurück zur Übersicht

    Kalenderwoche und Jahr anhand eines Datums ermitteln

    Die Ermittlung der Kalenderwoche anhand eines Datums mit VBA ist eigentlich kinderleicht. Allerdings kann um den Jahreswechsel herum ein Problem auftreten. – Wie man dieses löst, beschreibt der Artikel Kalenderwoche und Jahr aus einem Datum ermitteln.



    Zurück zur Übersicht

    Einführung in Objekten und Klassenmodulen in VBA

    Verbessere deine VBA-Programmierkenntnisse mit dieser Einführung in die Programmierung von Objekten und Klassenmodulen in VBA. Lerne die Grundkenntnisse der objektorientierte Programmierung mit Klassenmodulen in VBA.



    Zurück zur Übersicht

    Die 'Better VBA' Videoserie

    Ich veröffentliche eine Videoserie auf YouTube über Techniken und Werkzeuge um besseren VBA Code zu schreiben.

    Willst du besseren VBA Code schreiben?

    Begleite mich auf dem Weg besseren VBA Code zu schreiben!

    .

    Zurück zur Übersicht

    Abonniere meinen Newsletter

    *

    Ich werde Deine Email-Addresse niemals weitergeben. Du kannst den Newsletter jederzeit abbestellen.



    © 1999 - 2017 by Philipp Stiefel