VBA – die neusten Beiträge

Sicherheitsrisiko von Office-Makros im Privaten- vs. Unternehmensumfeld

Die Sicherheit von Makros ist vor allem im Unternehmensumfeld stark umstritten bzw. das Risiko hinter der Nutzung eindeutig und klar. Trotz der unterschiedlichen Methoden wie Passwörter oder Signaturen verzichten viele Unternehmen komplett auf Makros und sperren diese komplett, z.B. via Policies.

Persönlich ist Office bzw. Makros einfach zu bequem und vorteilhaft: Office ist ein weit verbreitetes Tool, zukunftssicherer Support, keine zusätzliche Installation von Software etc. ... Da bösartige Makros oft bereits den Schadcode enthalten und im Rahmen von Phishing oder aus dem Internet in Unternehmen gelangen und Schaden anrichten, frage ich mich wie es mit der Sicherheit dem Einsatz im persönlichen Gebrauch aussieht.

Meiner Meinung nach sind Makros hauptsächlich im Unternehmensumfeld sicherheitskritisch und auch meistens nur dann, wenn diese von nicht-vertrauenswürdigen Quellen (z.B. dem Internet) stammen. Im persönlichen Gebrauch (inkl. Absicherungen wie Passwörter und Signaturen) sehe ich kein großes Sicherheitsproblem die Makros wegen allgemeinen Umstrittenheit komplett zu meiden. Wie seht ihr das?

Zu folgenden Fragen (im privaten Gebrauch) bin ich Froh um eure Meinungen und Input:

  • Kann ich mich mit einem Makro-Passwort gut absichern oder sind diese mittlerweile zu leicht zu knacken?
  • Reicht eine Signatur von Markos aus?
  • Welche weiteren Einstellungen kann ich vornehmen, wenn ich Makros sicher einsetzen möchte?
  • Sehr komplexes und fortgeschrittenes Szenario: Gibt es die Gefahr, dass ich mir Schadsoftware herunterlade welche bereits vorhandene (gutartige) Makros auf meinem PC erkennt und diese dann so manipuliert dass diese Schadcode ausführen können? Ist das realistisch?
Microsoft Excel, Microsoft Office, Makro, VBA

Spalten via VBA ein und Ausblenden lassen, Wenn "Name" im Dropdown Menü?

Hallo Zusammen,

ich erarbeite aktuell ein Formular aus, dass mir und meinen Kollegen die Arbeit erleichtern soll. Jedoch komme ich gerade in VBA nicht weiter.

Hier ein Screenshot vom aktuellen Prototypen

Folgendes ist geplant

1. Anfragetyp
hat 3 Werte, nennen wir Sie "A", "B" und "C".
1.1. Je nach ausgewähltem Wert sollen sich Spalten Ein- und Ausblenden. Wenn kein Wert drinnen steht, aber "Bitte Auswählen" wie oben im Screenshot angezeigt, dann sollen alle Spalten eingeblendet sein.

2. Zusatzanfrage
hat auch 3 Werte, dieselben wie oben "A", "B" und "C".
2.1. Hier möchte ich, dass wenn ich beim Anfragetypen "A" ausgewählt habe, ich die Möglichkeit habe, separat bei Zusatzanfrage "B" oder "C" auszuwählen, oder halt in verschiedenen variationen.
2.2. Meine Problematik hierbei ist, dass wenn ich bei Anfragetyp "A" Ausgewählt habe, dann sollen sich alle anderen Typen ausblenden, sprich, der Punkt Zusatzanfrage muss den Anfragetypen wieder überschreiben.
2.3. Wenn Option ausgewählt ist, soll nichts passieren. Dies dient lediglich als Info.

Vielleicht denke ich, dass auch einfach komplizierter als es ist. :)

3.1. Lieferantenmenü
Für das Dropdownmenü "Lieferant" werde ich ebenfalls über VBA Spalten Ein- und Ausblenden lassen. Ich habe hier 27 verschiedene Daten, die sich über ebenfalls verschiedene Spalten erstecken.
Meine nächste Problematik ist folgende, dass ich bspw. Spalte "F" und dann "S - Z" ausblenden lassen muss, der Rest in den Spalten davor und auch danach soll aber eingeblendet bleiben. Wie kriege ich das vernünftig in den Code von VBA?

Zusatzinformation: Ich bin ein kompletter Laie in VBA und habe davor damit noch nie gearbeitet, versuche mich aber gerade im Coding ein wenig einzulesen. Wenn Ihr mir zusätzlich zu euren Vorschlägen eine kurze Erklärung geben könntet, wie und warum Ihr das genau so aufgebaut wie Ihr es getan habt, würde mir das sehr für die Zukunft helfen.

Ich danke euch vielmals für eure Unterstützung.

Mit freundlichen Grüßen
Ark

Bild zum Beitrag
Microsoft Excel, Makro, VBA, Formel, Excel-Formel

Excel Pivot oder Datenschnitt?

Hey, ich muss unbedingt eine Auswertung bzw. einen Vergleich aufstellen in einer Excel Mappe.

Ich habe 9 Tabellenblätter in einer Excel Mappe (Rohdaten). Diese werden Monat zu Monat ergänzt mit neuen Daten.

Ein Tabellenblatt ist die offizielle vom großem System. Ich muss die restlichen 8 Tabellenblätter vergleichen, ob sie mit unserem großem System übereinstimmen (nur die Summe der Beträge)

D.h., die offizielle Liste vom großem System hat alle Daten (korrekte Daten). Wir müssen nun herausfinden, dass unsere Daten mit der großen Liste übereinstimmen.

Wie kann ich das ganze am besten auf einem Tabellenblatt darstellen? Eine Dynamische Darstellung wäre super. Es sollen alle Tabellenblätter in einem gepackt werden und mit Selektionen dann ausgewählt werden, welche man sehen möchte.

Bsp. ich möchte jetzt sehen, ob wir die große Liste 1zu1 übereinstimmen mit den Daten von Tabellenblatt 2.

Jedes Tabellenblatt hat verschiedene Währungen oder auch die selbe, nur anderes Themengebiet bzw. Produkte.

Es handelt sich hierbei um Beträge in diesen Währungen. Die große Liste hat alle Währungen inkludiert. Die einzelnen Tabellenblätter nur die jeweilige Währung.

Habt ihr da eine Idee wie ich das am besten machen könnte?

Microsoft Word, Microsoft, Microsoft Excel, PDF, Microsoft Office, Access, VBA, Formel, microsoft-access, Tabellenkalkulation, Excel-Formel, Office 365

Excel VBA digitales Signaturfeld in ein vorgegebenes Feld einfügen?

Hallo,

ich habe eine Excel, wo ich mit einer Form einen "Platzhalter" für eine digitale Signatur eingefügt habe. In meinem Makro wird die Excel in eine PDF umgewandelt und es wird auch das digitale Signaturfeld eingefügt, allerdings werden die Felder bei weiteren Rechnern immer an unterschiedlichen Stellen eingefügt.

Wie schreib ich den CODE so um, das das Signaturfeld immer statisch eingefügt wird? Am besten immer in die Form, wo es rein soll.

Die Form ist eine Gruppe aus Textfeldern und Formen. Im Auswahlbereich habe ich dieser Gruppe den Namen "Ersteller" gegeben.

Code:

Sub Signatur_einfügen()

On Error GoTo Err_Handler

Dim pdfPDDoc As Object

Dim oJS As Object

  

strVerzeichnis = "H:\"

strFilename = "Mehrarbeit_" & ActiveSheet.Range("H6") & "_" & ActiveSheet.Range("A1") & ".pdf"

strFName1 = strVerzeichnis & strFilename

strFName2 = strVerzeichnis & strFilename

On Error GoTo Err_Handler

  Set pdfPDDoc = CreateObject("AcroExch.PDDoc")

  If pdfPDDoc.Open(strFName1) Then

    Set oJS = pdfPDDoc.GetJSObject

  'Signature-Feld 1

    Set oSign = oJS.AddField("SignatureField1", "signature", 0, Array(220, 90, 50, 140))

  'Signature-Feld 2

    Set oSign = oJS.AddField("SignatureField2", "signature", 0, Array(322, 90, 505, 140)) 'Position von links, Höhe des Felds, Länge des Felds, Höhe des Felds

  'Speichern

    pdfPDDoc.Save 1, strFName2

  End If

  GoTo Finaly

Exit_Proc:

  Exit Sub

   Err_Handler:

  MsgBox "In test" & vbCrLf & Err.Number & "--" & Err.Description

   Resume Exit_Proc

Finaly:

End Sub

Microsoft Excel, PDF, VBA

Excel 2016 Makros: Button zum Löschen bestimmter Zeilen?

Hey Leute,

ich arbeite derzeit intensiver an einer Excel-Tabelle, wodurch ich mich wahrscheinlich noch öfter mit Fragen rund um diese Tabelle melden werde, wenn ich mal nicht weiter weiß :D. Nun möchte ich diese Tabelle im nächsten Schritt mit Makros bereichern. Leider hatte ich bislang nahezu nichts mit Makros am Hut und benötige aus diesem Grund Hilfe.

Die dargestellte Tabelle bzw. der Ausschnitt soll zukünftig projektbezogen verwendet werden. Es handelt sich dabei um eine Funktionsliste, in der ich in Spalte B Bauteile auswähle, die ich in dem jeweiligen Projekt benötige. Da jedes Projekt individuell ist, habe ich in einigen Projekten mal 20 Bauteile, mal 50. Also nie ein im Voraus festgelegter Wert. Da in einem Projekt mehrere Anlagen vorhanden sein können, die jeweils so eine eigene Funktionsliste benötigen, möchte ich eine Schaltfläche implementieren, die mit einem Makro versehen ist. Durch Anklicken dieser Schaltfläche sollen Zeilen (nicht nur die Inhalte, sondern die gesamte Zeile) in einem bestimmten Bereich (vom dritten Bauteil bis zum letzten Bauteil) gelöscht werden. In dem Bildbeispiel z.B. würde ich wollen, dass die Zeilen 11 bis 17 gelöscht werden. Da es in einem anderen Projekt aber z.B. 20 Bauteile geben kann, müsste ich Zeile 11 bis 30 löschen. Die Ergebniszeile ganz am Ende ist unabhängig von der Tabelle und soll immer bestehen bleiben. Kann mir jemand bei dem Code helfen, um so ein "dynamisches Löschen" durch eine Schaltfläche zu ermöglichen? Unabhängig davon, wie viele Bauteile ich auswähle, soll immer nur bis zum letzten Bauteil gelöscht werden. :)

Bild zum Beitrag
Microsoft, Microsoft Excel, Microsoft Office, programmieren, Makro, VBA, Formel, Tabellenkalkulation, Excel-Formel, Office 365, Excel 2016

Excel-Tabelle trotz Formeln richtig sortieren?

Hey Leute, ich stehe gerade bei meiner Excel-Tabelle etwas auf dem Schlauch…

Ich habe eine Arbeitsmappe „Funktionsliste“, in der ich arbeite, und eine Arbeitsmappe „Datenbank“, in der alle Bauteile mit entsprechenden Datenpunkten aufgelistet sind.

Nun ist die Mappe „Funktionsliste“ dafür da, dass ich in Spalte B mithilfe einer Dropdown-Liste alle Bauteile auswähle, die ich benötige und die in der Mappe „Datenbank“ eingepflegt sind. Mithilfe der SVERWEIS-Funktion übernehme ich die zum Bauteil dazugehörigen Datenpunkte, die ebenfalls in der „Datenbank“ von Spalte F bis Z eingepflegt sind.

Wenn ich nun in der „Funktionsliste“ in Zelle B9 das Bauteil Reparaturschalter auswähle, werden mir durch die SVERWEISE in den Spalten F bis Z alle Datenpunkte aus der „Datenbank“ übernommen. Mein SVERWEIS sieht dann in Spalte F z.B. folgendermaßen aus: =SVERWEIS(Funktionsliste!$B9;Datenbank!$B$9:G$33;6;FALSCH)

Auf die Weise übernimmt mir die Funktionsliste in Spalte F den Wert aus Spalte G aus der Datenbank, wenn das ausgewählte Bauteil in der Funktionsliste in der angegebenen Matrix in der Datenbank findet.

Wenn ich nun in Zelle B10 beispielsweise einen Drucksensor auswähle und das gleiche nun mit =SVERWEIS(Funktionsliste!$B10;Datenbank!$B$9:G$33;6;FALSCH) in Spalte F angebe, werden mir die Datenpunkte für den Drucksensor übernommen.

Jetzt kommt das Hauptproblem: Wenn ich Spalte B alphabetisch sortieren will, werden die Spalten mit den Datenpunkten nicht automatisch mit sortiert. Stattdessen würde durch die alphabetische Sortierung jetzt der Drucksensor in der B9 stehen und der Reparaturschalter in der B10. In der F9 würde dann aber der SVERWEIS nun den Wert aus der B10 suchen und nicht mehr aus der B9, weil die Formel nicht dynamisch mitgenommen wurde beim Sortieren…

Wie kann ich das Problem lösen? :)

Microsoft, Microsoft Excel, Microsoft Office, VBA, Formel, Tabellenkalkulation, Excel-Formel, Office 365

Rechnungen automatisieren?

Mein Vater besitzt ein Reisebüro und derzeitig schreibe ich alle Rechnungen manuell auf. Ich habe zwar einige Schritte automatisiert, durch ein eigenes Python-Programm, sodass Rechnungsnummer, Summe der Kosten, Fluggesellschaft, Name usw. automatisch von der Excel Datei importiert und in eine Word Datei eingetragen werden. Allerdings muss ich die Flugdaten alle selber manuell eingeben, d.h. die Strecke, Abflug und Ankunft und das Datum. Diese muss ich zudem erstmal raussuchen, indem ich die entsprechende Bestätigungs-Mail für den Flug aus dem "E-Mail-Archiv" finde.

Dazu kommt noch, dass er bei verschiedenen Fluggesellschaften bucht, die ihre Daten alle anders in der Mail abbilden, bzw sogar manchmal nur als Datei anhängen, die ich runterladen muss, wodurch es sehr anstrengend ist, diese Rechnungsdaten einzutragen.

Ich denke mir, dass es definitiv eine bessere Methode geben muss, selbst wenn diese Geld kostet, dennoch kann ich mir nicht vorstellen, wie so etwas funktionieren soll, da das Programm, wenn es eins geben sollte, es irgendwie schaffen muss, all diese Daten in den verschiedensten Darstellungsformen zu verstehen.

Hat Jemand Erfahrungen mit sowas bei der Arbeit oder führt möglicherweise selbst ein Reisebüro???

Computer, Microsoft Word, Buchhaltung, Microsoft, Microsoft Excel, Rechnung, E-Mail, IT, Microsoft Office, VBA, B2B, BWL, CRM, Firma, Fluggesellschaft, Formel, Informatik, Rechnungsstellung, Rechnungswesen, Reisebüro, Unternehmen, Excel-Formel, buisnes, Office 365

Bashskript Problem?

Ich habe hier ein Bashskript, welches Dateien überwacht (noch nicht vollständig und absolut unoptimiert). Ich weiß, dass es Tools gibt, aber es ist ein Projekt für die Uni und deshalb ist Optimierung und Effizienz nicht wirklich wichtig. Ich möchte damit die Grundlagen des Shellscriptings einfach etwas lernen.

Das ist bisher das Script:

#!/bin/bash


echo "Das Skript wurde gestartet. Der Typ Ihres Betriebssystem ist "\"$OSTYPE\""."


# If-Abfrage, die das Betriebssystem erkennt und den Pfad zum überwachten Ordner oder Datei festlegt # HIER BITTE DIE PFADE ZUM ZU ÜBERWACHENDEN ORDNER EINTRAGEN   
if [[ "$OSTYPE" == "linux-gnu"* ]]; then
    BASE_DIRECTORY=" " # Übergibt dem überwachten Ordner eine Variable, wenn Betriebssystem = Linux
elif [[ "$OSTYPE" == "darwin"* ]]; then
    BASE_DIRECTORY="/Users/name/Library/CloudStorage/GoogleDrive-email@gmail.com/Meine Ablage/Uni/TestOrdner" # Übergibt dem überwachten Ordner eine Variable, wenn Betriebssystem = MacOs
elif [[ "$OSTYPE" == "win32" || "$OSTYPE" == "msys" || "$OSTYPE" == "cygwin" ]]; then
    BASE_DIRECTORY="/g/Meine Ablage/Uni/TestOrdner" # Übergibt dem überwachten Ordner eine Variable, wenn Betriebssystem = Windows
else    
    echo "Das Betriebssystem ist unbekannt." # Wenn das Betriebssystem unbekannt ist, wird eine Fehlermeldung ausgegeben
    exit 1
fi


DIRECTORY="$BASE_DIRECTORY" # Pfad zum Ordner
FILE="$BASE_DIRECTORY/Datei.txt" # Pfad zur Datei   
FILE2="$BASE_DIRECTORY/Datei2.txt" # Pfad zur Datei2 


cd "$BASE_DIRECTORY" || {
    echo "Wechsel zu $BASE_DIRECTORY fehlgeschlagen!" # Wechselt in den TestOrdner oder gibt eine Fehlermeldung aus
    exit 1;
}



# Funktion, um zu überprüfen, ob Dateien gelöscht wurden
checkIfDeleted() {
    if [ ! -f "$FILE" ]; then 
        echo "Die Datei \"$(basename "$FILE")\" wurde gelöscht, umbenannt oder verschoben."
    elif [ ! -f "$FILE2" ]; then
        echo "Die Datei \"$(basename "$FILE2")\" wurde gelöscht, umbenannt oder verschoben."
    elif [ ! -d "$DIRECTORY" ]; then
        echo "Der Ordner \"$(basename "$DIRECTORY")\" wurde gelöscht, umbenannt oder verschoben."
    fi
}


# Speichert den "ursprünglichen" Hash-Wert der Dateien
ORIGINAL_HASH=$(md5 -q "$FILE")
ORIGINAL_HASH2=$(md5 -q "$FILE2")


checkIfEdited() {
    if [ ! -f "$FILE" ]; then # Wenn $FILE nicht existiert, dann wird das Skript hier beendet
    return
    fi


    if [ ! -f "$FILE2" ]; then # Wenn $FILE2 nicht existiert, dann wird das Skript hier beendet
    return
    fi


    if [ ! -d "$DIRECTORY" ]; then # Wenn $DIRECTORY nicht existiert, dann wird das Skript hier beendet
    return
    fi


    # Berechnet den aktuellen Hash-Wert der Dateien
    CURRENT_HASH=$(md5 -q "$FILE")
    CURRENT_HASH2=$(md5 -q "$FILE2")


    # Hash-Werte werden verglichen
    if [ "$CURRENT_HASH" != "$ORIGINAL_HASH" ]; then
        echo "Die Datei \"$(basename "$FILE")\" wurde bearbeitet."
        # Ursprünglicher Hash-Wert wird für zukünftige Überprüfungen aktualisiert
        ORIGINAL_HASH="$CURRENT_HASH"
    elif [ "$CURRENT_HASH2" != "$ORIGINAL_HASH2" ]; then
        echo "Die Datei \"$(basename "$FILE2")\" wurde bearbeitet."
        # Ursprünglicher Hash-Wert wird für zukünftige Überprüfungen aktualisiert
        ORIGINAL_HASH2="$CURRENT_HASH2"
    fi
}


while true; do # Endlosschleife, die die Funktionen "checkIfDeleted" und "checkIfEdited" alle 10 Sekunden ausführt
    checkIfDeleted
    checkIfEdited
    sleep 10
done

Ja, ich weiß, welche Probleme das Skript mit sich bringt, aber ich habe ein anderes Problem:

Wenn jemand das Skript nutzen möchte, muss er die Pfade seiner Dateien einfügen und sogar neue Variablen definieren.

Man könnte das doch so machen, dass das Skript die Liste des Ordners einliest und dann auf alle Dateien direkt zugreifen muss, ohne dass man sie in das Skript einfügen muss.

Also irgendwie mit dem Befehl "ls". Ich weiß aber nicht, wie ich das implementieren soll.

Kann mir wer helfen bitte?

Visual Basic, Linux, HTML, Webseite, VBA, Bash, Batch, cmd, Code, lua, MySQL, PHP, Programmiersprache, Python, Script, Python 3

Preisvergleich-Tool in Microsoft Excel bauen?

Guten Abend liebe GF-Community.

Ich würde mir gerne für den Privaten gebrauch sowas ähnliches wie diese Preisvergleich Seite in Microsoft Excel bauen wollen. Wenn möglich ohne VBA da ich mich bei Formeln allgemein kaum auskenne und VBA nochmal ne andere Dimension ist die in Richtung Programmierung geht.

Bevor ich das alles aber bauen kann benötige ich erstmals ne Riesen Datenbank mit verschiedensten Daten damit man diese dann die Produkte und Artikel überhaupt erst untereinander Vergleichen kann. Klar könnte ich auch diese Webseite benutzen aber das möchte ich nicht da ich mir mein eigenes Design und so bauen möchte. Außerdem sind die Daten nicht immer aktuell und wenn ich das selber mache schon.

Wozu der Aufwand?

Naja ich möchte das letztendlich für die Planung meiner Einkäufe in Zukunft nutzen wenn ich mir dann meine Liste zusammen schreibe was ich alles benötige. Da wäre dann so ein Tool ultra hilfreich! Natürlich möchte ich auch alles andere so'n bisschen von der Webseite Übernehmen um Artikel oder Produkte besser zu finden in dem ich danach suchen oder gewissen Kriterien Filtern kann.

Es wäre auch cool wenn ich irgendeine Funktion für aktuelle Preis-Angebote einfügen könnte.

Ich weiss leider nicht wie ich das alles am besten in Excel Aufbauen soll/kann. Demnach wäre ich für jede Hilfe sehr dankbar!

Webseite:

Discounter-Preisvergleich

Mit freundlichen Grüßen

Robin | TechBrain.

Bild zum Beitrag
PC, Computer, Software, Windows, Microsoft, Office, Microsoft Excel, IT, Microsoft Office, VBA, Büro, Formel, Softwareentwicklung, Excel-Formel, Office 365

Meistgelesene Beiträge zum Thema VBA