Benutzer:Markus Bärlocher/WP:Tabelle/ist-geboren-in "Ort"/VBA

Ein VBA-Makro erledigt in einer Excel-Mappe automatisch verschiedene Aufgaben.

Dieses Makro tut Folgendes:

  1. wandelt eine in Excel eingelesene "CSV-Datei mit Personendaten" in eine Excel-Tabelle,
  2. und macht aus der URL in Spalte-A einen Internen Wikipedia-Link zum entsprechenden Wikidata-Eintrag,
  3. und macht aus dem Namen in Spalte-B und der URL in Spalte-C einen Internen Wikipedia-Link zum entsprechenden Wikipedia-Artikel
    und entfernt die nun überflüssige Spalte-C, und rückt alle folgenden Spalten eins nach links,
  4. und macht aus der URL in Spalte-G? einen Internen Bilder-Link zum entsprechenden Commons-Bild.

Anschliessend kann die Excel-Tabelle noch bearbeitet werden (z.B. Spalten verschieben und löschen, sortieren nach Name oder Geburtsjahr).

Wenn fertig: als CSV speichern.

Weiter zu "TableConvert"


Bedingung für die CSV-Datei

Bearbeiten
Bedingung Ergebnis: Interner Link Anzeige
Zeile-1 muss Spaltenüberschriften enthalten
Spalte-A darf nur die URL zum Wikidata-Datenobjekt enthalten
Beispiel: https://www.wikidata.org/entity/Q107011739
[[wikidata:Q107011739|Q107011739]] Q107011739
Spalte-B darf nur den anzuzeigenden Namen der Person enthalten
Beispiel: Glenn Ong Jing Jie
[[Glenn_Ong|Glenn Ong Jing Jie]] Glenn Ong Jing Jie
Spalte-C darf nur die URL zum Wikipedia-Artikel enthalten
Beispiel: https://de.wikipedia.org/wiki/Glenn_Ong
Spalte-G darf nur die URL zum Commons-Bild enthalten
Beispiel: https://commons.wikimedia.org/wiki/File:HassanSunny.jpg
[[Bild:HassanSunny.jpg|100px]]  

Ergebnis

Bearbeiten

Excel-Tabelle

Bearbeiten
Wikidata-ID Name * Beschreibung Bild
[[wikidata:Q107011739|Q107011739]] [[Glenn_Ong|Glenn Ong Jing Jie]] 1977 2017 .... [[Bild:HassanSunny.jpg|100px]]

Wikitable

Bearbeiten
Wikidata-ID Name * Beschreibung Bild
Q107011739 Glenn Ong Jing Jie 1977 2017 ....  

Ausführen des Makros

Bearbeiten
  1. in Excel die gewünschte CSV-Datei öffnen (die aus der SPARQL-Query exportierte CSV-Datei)
  2. Menü "Entwicklertools" → Menü "Visual Basic"
    → VBA-Editor-Fenster öffnet
  3. in linker Spalte: "VBA-Projekt" mit dem selben Namen wie die zuvor geöffnete CSV-Datei
    rechte Maustaste: Doppelklick auf das Projekt
    "Daten importieren" auswählen→ "Öffnen"
  4. zurück zur Excel-Tabelle
  5. Menü "Entwicklertools" → Menü "Makros"
    das passende Makro auswählen → Ausführen
  6. Ergebnis als CSV speichern

Installation des Makros

Bearbeiten

Voreinstellungen

Bearbeiten

Damit Makros in Excel ausgeführt werden können, müssen in der Regel die Makrosicherheitseinstellungen entsprechend konfiguriert werden. Das muss in den Sicherheitseinstellungen eingestellt werden:

  1. Öffne Excel.
  2. Gehe zum Menüband und wählen Sie "Datei" aus.
  3. Klicke auf "Optionen".
  4. Wähle im Fenster "Excel-Optionen" die Kategorie "Vertrauensstellungscenter" aus.
  5. Klicke# auf die Schaltfläche "Einstellungen für das Vertrauensstellungscenter".
  6. Wähle im Vertrauensstellungscenter die Option "Einstellungen für Makros" aus.
  7. Wähle eine der folgenden Optionen aus:
    1. "Alle Makros aktivieren": Damit werden alle Makros in Excel ohne Warnung ausgeführt.
    2. "Alle Makros mit Benachrichtigung aktivieren": Damit werden Makros in Excel ausgeführt, aber du bekommst eine Warnung, bevor ein Makro ausgeführt wird.
    3. "Makros deaktivieren, mit Benachrichtigung": Damit werden Makros deaktiviert, aber du kannst Makros aktivieren, wenn du dies für sicher hältst.
    4. "Alle Makros deaktivieren, ohne Benachrichtigung": Damit werden alle Makros deaktiviert und keine Warnung angezeigt.
  8. Nachde die Auswahl getroffen ist, klicke auf "OK", um die Einstellungen zu speichern.
  9. Klicke erneut auf "OK", um das Fenster "Excel-Optionen" zu schließen.

Nachdem Sie diese Einstellungen vorgenommen haben, sollten Makros in Excel entsprechend Ihrer Auswahl ausgeführt werden können. Bitte beachten Sie, dass das Ausführen von Makros Sicherheitsrisiken mit sich bringen kann, daher ist es wichtig, nur Makros aus vertrauenswürdigen Quellen auszuführen.

Makro importieren

Bearbeiten

Um ein Makro in eine Excel-Arbeitsmappe zu importieren und auszuführen, folge diesen Schritten:

  1. Öffne Excel:
    Starte Microsoft Excel und öffne die Arbeitsmappe, in die das Makro importiert werden soll.
  2. Öffne den Visual Basic Editor (VBA-Editor):
    • Gehe zum Register "Entwicklertools" in der Excel-Menüleiste.
    • (Falls "Entwicklertools" nicht angezeigt wird, aktiviere es unter "Datei" > "Optionen" > "Menüband anpassen".)
    • Klicke auf "Visual Basic" oder "Visual Basic-Editor", um den VBA-Editor zu öffnen.
  3. Importiere das Makro:
    • Klicke im VBA-Editor auf "Einfügen" im Menü oben und dann auf "Modul". Dadurch wird ein neues Modul im Projekt erstellt.
    • Kopiere den Code des Makros aus einer anderen Quelle (z. B. einer Textdatei oder einer anderen Excel-Arbeitsmappe).
    • Füge den kopierten Code in das neue Modul im VBA-Editor ein.
  4. Schließe den VBA-Editor:
    • Klicke auf das "X" in der oberen rechten Ecke des VBA-Editors, um ihn zu schließen und zur Excel-Arbeitsmappe zurückzukehren.

Makro ausführen

Bearbeiten

Workflow:

WD-SPARQL-Abfrage starten
Kurz-URL bilden: https://w.wiki/9U9g - wo speichern?
Ergebnis als CSV exportieren - Dateiname ist automatisch "query(fortlaufende Nummer)"?
CSV in Excel öffnen - "query(fortlaufende Nummer)"
Makro ausführen - das liegt ja noch nicht in der Mappe?
also erst dort reinkopieren...?
  1. Führe das Makro aus:
    • Gehe zur Registerkarte "Entwicklertools" in der Excel-Menüleiste.
    • Klicke auf "Makros" (es erscheint ein Dialogfeld).
    • Wähle das gewünschte Makro aus der Liste der verfügbaren Makros aus.
    • Klicke auf "Ausführen".

Wenn das Makro korrekt importiert wurde und keine Fehler enthält, wird es ausgeführt und führt die im Code definierten Aktionen in der Excel-Arbeitsmappe aus. Stelle sicher, dass das Ausführen von Makros in Ihrer Excel-Einstellung zugelassen ist, wie oben beschrieben.

VBA-Code

Bearbeiten
Option Explicit

' für Wikipedia-Personenlisten XLS
'
' Spalte A: Umwandlung von URL in Spalte A in internen Wikipedialink
' ein: http://www.wikidata.org/entity/Q4535628
' aus: [[wikidata:Q4535628|Q4535628]]
'
' Spalte B: Umwandlung von Namme in Spalte B und URL in Spalte C in internen Wikipedialink
' ein: Ewen Fergusson & https://de.wikipedia.org/wiki/Ewen_Fergusson
' aus: [[Ewen_Fergusson|Ewen Fergusson]]
' überflüssige Spalte C löschen.
'
' Spalte G?: Umwandlung von URL in Spalte G? in internen Bilder-Link
' ein: https://commons.wikimedia.org/wiki/File:HassanSunny.jpg
' aus: [[Bild:Ewen_Fergusson.jpg|150px]]

Dim intZeile   As Integer
Dim strZelle   As String
Dim strText    As String
Dim intPos     As Integer

Sub WikipediaPersonenartikel()

   intZeile = 2

   If Not Cells(2, 1) Like "https://www.wikidata.org/entity/Q*" Then
      MsgBox "Dies ist keine neue Query-Mappe", vbOKOnly + vbCritical, "Hinweis"
      Exit Sub
   End If

   If Not Cells(2, 3) Like "https://de.wikipedia.org/wiki/*" Then
      MsgBox "Dies ist kein Artikel-Link", vbOKOnly + vbCritical, "Hinweis"
      Exit Sub
   End If

   If Not Cells(2, 7) Like "https://commons.wikimedia.org/wiki/File:*" Then
      MsgBox "Dies ist kein Bilder-Link", vbOKOnly + vbCritical, "Hinweis"
      Exit Sub
   End If
   
   Columns(1).TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
        Semicolon:=False, Comma:=True, Space:=False, Other:=False, FieldInfo _
        :=Array(1, 1), TrailingMinusNumbers:=True

   Do
   
      strZelle = Cells(intZeile, 1)
      If strZelle = "" Then Exit Do
' Wikidata-Link
      intPos = InStrRev(strZelle, "/")
      strText = Mid(strZelle, intPos + 1)
      Cells(intZeile, 1) = "[[wikidata:" & strText & "|" & strText & "]]"
' Artikel-Link      
      strZelle = Cells(intZeile, 3)
      intPos = InStrRev(strZelle, "/")
      strText = Mid(strZelle, intPos + 1)
      Cells(intZeile, 2) = "[[" & strText & "|" & Cells(intZeile, 2) & "]]"
' Bild-Link      
      intPos = InStrRev(strZelle, ":")
      strText = Mid(strZelle, intPos + 1)
      Cells(intZeile, 1) = "[[Bild:" & strText & "|150px]]"  '[[Bild:HassanSunny.jpg|100px]]

      intZeile = intZeile + 1
      
   Loop
   
' leere Spalte-3 löschen, Rest nach links   
   Columns(3).Delete Shift:=xlToLeft
   Columns("A:B").EntireColumn.AutoFit
' neue Zeilenüberschriften
   Cells(1,1) = "Wikidata-ID"   
   Cells(1,2) = "Name"
   Cells(1,3) = "*"
   Cells(1,4) = "†"
   Cells(1,5) = "Beschreibung"
   Cells(1,6) = "Bild"   
End Sub