Category Archives: VBA

#Makro bei der #Arbeit – #bittenichtzuschauen

Sie haben ein wunderbares Makro, das Ihnen viel Arbeit abnimmt? Bravo! Allerdings ist das Ding lästig – es lässt Sie mitschauen, was es tut, und Sie haben das Gefühl, wenn es einfach ohne Aufsicht arbeiten würde, wäre es schneller. Damit haben Sie ja so recht! Bauen Sie also folgendes in Ihren Programmcode ein: Am Anfang sorgen Sie dafür, dass Sie nicht mehr zuschauen müssen – Sie machen quasi die Tür zum Arbeitszimmer zu 😉 Application.ScreenUpdating = False Und am Schluss, wenn alles gut gegangen ist…

Read More »

mit #VBA in #Outlook die #Erinnerung #entfernen

geht so: Sub Remove_Reminder()   Dim olApp As Object Dim myNameSpace As Object Dim myFolder As Object Dim myAppointments As Object Dim myAppointment As Object   Set olApp = CreateObject(„Outlook.Application“) Set myNameSpace = olApp.GetNamespace(„MAPI“) Set myFolder = myNameSpace.GetDefaultFolder(9) Set myAppointments = myFolder.Items For Each myAppointment In myAppointments     If myAppointment.Start = dteZeit Then         myAppointment.ReminderSet = False         myAppointment.Save     End If Next olApp.Quit Set myAppointment = Nothing Set myAppointments = Nothing Set myFolder = Nothing Set myNameSpace = Nothing Set olApp = Nothing  …

Read More »

#Excel #VBA #Funktion verkettet Verweisergebnisse

Tipp VBA SVerweisM

Mit VBA können Sie eigene Funktionen kreieren.

Die hier hab ich SVerweisM genannt. Sie sucht wie der SVERWEIS nach dem Vorkommen einen Schlüsselbegriffs, liefert aber eine Textwurst aus allen möglichen Treffern (Trennzeichen ist das vierte Argument).

War übrigens eine Auftragsarbeit 🙂

Public Function SVerweisM(was As Variant, wo As Range, Ergebnisspalte As Long, Trennzeichen As Variant) As Variant
Dim Erg As Variant
Dim Zeile As Long
Erg = „“

For Zeile = 1 To wo.Rows.Count
If wo.Cells(Zeile, 1).Value = was Then
Erg = Erg & IIf(Erg <> „“, Trennzeichen, „“) & wo.Cells(Zeile, Ergebnisspalte)
End If
Next Zeile

SVerweisM = Erg

End Function

#Notizen in #PowerPoint mit #VBA #löschen

Heute gibt’s wieder VBA-Code. Folgendes Häppchen löscht in allen offenen Präsentationen (nach Bestätigung durch den Benutzer oder die Benutzerin) den Inhalt der Notizenfelder: Sub Delete_Notes() Dim myPres As Presentation Dim myPath As Variant Dim mySlide As Slide Dim I As Long On Error GoTo Fehler For Each myPres In PowerPoint.Presentations If MsgBox(„Wollen Sie alle Notizen aus “ & myPres.Name & “ löschen?“ _ & vbCrLf & „(Die modifizierte Datei wird unter neuem Namen gespeichert.)“, vbYesNo, „Notizen löschen“) = vbYes Then myPath = Left(myPres.FullName, Len(myPres.FullName) –…

Read More »

#VBA Codeschnipsel füllt #Luecken in #Excel

Tipp VBA LueckenFuellenZur Abwechslung etwas VBA.

Folgende Prozedur füllt die Lücken in einem markierten einspaltigen Bereich in Excel nach unten aus – und zwar so lange, bis ein neuer Inhalt kommt, dann wird die nächste Lücke mit dem neuen Inhalt gefüllt, und so weiter, …

ach was, genug der Worte: siehe vorher-nachher-Bild!

 

 

Sub LueckenFuellen()

Dim sRng As Range
Set sRng = Selection
Dim aZeile As Long
Dim eZeile As Long
Dim Zeile As Long
Dim Spalte As Long

aZeile = sRng.Row
eZeile = sRng.Row + sRng.Rows.Count – 1
Spalte = sRng.Column
Dim zCont As Variant

For Zeile = aZeile To eZeile
If Not IsEmpty(Cells(Zeile, Spalte)) Then
zCont = Cells(Zeile, Spalte).Value
Else
Cells(Zeile, Spalte).Value = zCont
End If
Next Zeile
End Sub

(Lässt sich übrigens noch ein wenig aufpolieren, klar. Allerdings: weniger dirty bedeutet immer auch weniger quick. Dem Kunden genügt’s jedenfalls auch so 🙂 )

#Spaltenbuchstabe in #Excel per #VBA

#Spaltenbuchstabe in #Excel per #VBA

Jetzt haben Sie in Excel VBA mühevoll die Nummer einer Spalte herausgefunden, brauchen aber nun für eine Situation (Möglichkeiten gibt’s da viele – Sortieren, Duplikatsuche, …) den passenden Spaltenbuchstaben?

Hier ist eine hübscher Ausdruck, der genau das liefert:

Split(Cells(1, myCol).Address, „$“)(1)

myCol = die Zahl, die in einen Spalten-buchstaben umgewandelt werden soll, z.B. 28
Cells(1,myCol).Address ist dann nämlich z.B. „AB1“
Und Split nimmt aus dieser Textwurst das Häppchen nach dem ersten und vor dem zweiten Dollarzeichen  AB

#VBA #Excel #Datenverbindungen dokumentieren

Ihr Excel steckt voller Datenverbindungen? Sie hätten das gern übersichtlich aufgeschrieben, mögen’s aber nicht abtippen? Benutzen Sie folgenden VGA-Codeschnipsel, um Name und Beschreibung aller Datenverbindungen in den Direktbereich zu „drucken“ – von da geht’s ja ganz leicht mit Copy&Paste weiter in beispielsweise ein schönes Word-Dokument. Sub Verbindungen() Dim myConn As WorkbookConnection For Each myConn In ActiveWorkbook.Connections Debug.Print myConn.Name, myConn.Description Next myConn Set myConn = Nothing End Sub

Read More »

#VBA #Array #Split

Wie knackt man eine Textwurst? Zum Beispiel diese: „a b c d e f g“ – ich hätte gerne mundgerechte Häppchen, immer bis zum nächsten Leerzeichen. Eine einfache Methode gibt’s mit VBA: Public Sub ArrayBsp() Dim TextVar As Variant     ‚TextVar ist mal Variant, damit kann noch viel daraus werden Dim I As Long                    ‚I brauchen wir als Laufvariable, um das Ergebnis zu demonstrieren ‚Jetzt wird es ernst: TextVar = Split(„a b c d e f g“, “ „)     ‚Die Funktion Split teilt eine Textwurst überall…

Read More »

#VBA #Shape #Rainbow

#VBA #Shape #Rainbow

Regenbogen leicht gemacht:
Linie zeichnen, Makro ausführen. Das Makro versechsfacht die gerade markierte Linie mit Versatz (von der Stärke der Linie abhängig), und weist ihr jeweils eine der vorhandenen Linienformatvorlagen zu – wenn die Theme Colours einen Regenbogen ergeben, wird’s farbenprächtigst. Am Schluss wird noch gruppiert, damit das spätere Handling leichter wird.
Was, Sie wollen sich das Makro nicht selbst ausdenken? Bitte sehr, nehmen Sie dieses:

Sub Rainbow()

 Dim myShp As ShapeRange
 Dim I As Long
 Dim FF(6) As String
 Dim Style(6) As Long
 Dim Offset As Long
 'Styles (Formatvorlagen) muss man einfach abzählen - 14 ist zB der letzte der moderaten Styles
 Style(1) = msoLineStylePreset14
 Style(2) = msoLineStylePreset9
 Style(3) = msoLineStylePreset11
 Style(4) = msoLineStylePreset13
 Style(5) = msoLineStylePreset10
 Style(6) = msoLineStylePreset12
 
 Set myShp = Selection.ShapeRange
 Offset = myShp.Line.Weight * 0.75 'Versatz muss weniger sein als die Linie dick ist
 FF(1) = myShp.Name
 myShp.ShapeStyle = Style(1)
 For I = 2 To 6
 Selection.Copy
 Selection.PasteAndFormat (wdPasteDefault)
 Set myShp = Selection.ShapeRange
 FF(I) = myShp.Name
 ActiveDocument.Shapes.Range(Array(FF(I))).Select
 myShp.Left = myShp.Left + Offset
 myShp.Top = myShp.Top + Offset
 myShp.ShapeStyle = Style(I)
 Next I

 ActiveDocument.Shapes.Range(Array(FF(1), FF(2), FF(3), FF(4), FF(5), FF(6))).Select

 Selection.ShapeRange.Group
End Sub

#VBE-Objekt – und #VBA schreibt VBA

Für ein aktuelles Projekt entsteht ein VBA-Programm, das in Makro-enthaltenden Word-Templates die Makros umschreibt. Das geht, wenn man die Bibliothek Microsoft Visual Basic for Applications Extensibility einbindet. Zur Info die wichtigsten Methoden des Codemodule-Objekts: .InsertLine .ReplaceLine .DeleteLine Und leichter geht’s, wenn man als erstes die Zeilenumbrüche von hinten nach vorn rausschmeißt, und man somit die unleserliche, aber klare 1-Befehl-pro-Zeile Layoutierung gewährleistet. Sonst sucht man sich deppert 🙂

Read More »