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:
- wandelt eine in Excel eingelesene "CSV-Datei mit Personendaten" in eine Excel-Tabelle,
- und macht aus der URL in Spalte-A einen Internen Wikipedia-Link zum entsprechenden Wikidata-Eintrag,
- 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, - 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.
Bedingung für die CSV-Datei
[Bearbeiten | Quelltext 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 | Quelltext bearbeiten]Excel-Tabelle
[Bearbeiten | Quelltext bearbeiten]Wikidata-ID | Name | * | † | Beschreibung | Bild |
---|---|---|---|---|---|
[[wikidata:Q107011739|Q107011739]]
|
[[Glenn_Ong|Glenn Ong Jing Jie]]
|
1977 | 2017 | .... | [[Bild:HassanSunny.jpg|100px]]
|
Wikitable
[Bearbeiten | Quelltext bearbeiten]Wikidata-ID | Name | * | † | Beschreibung | Bild |
---|---|---|---|---|---|
Q107011739 | Glenn Ong Jing Jie | 1977 | 2017 | .... |
Ausführen des Makros
[Bearbeiten | Quelltext bearbeiten]- in Excel die gewünschte CSV-Datei öffnen (die aus der SPARQL-Query exportierte CSV-Datei)
- Menü "Entwicklertools" → Menü "Visual Basic"
→ VBA-Editor-Fenster öffnet - 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" - zurück zur Excel-Tabelle
- Menü "Entwicklertools" → Menü "Makros"
das passende Makro auswählen → Ausführen - Ergebnis als CSV speichern
Installation des Makros
[Bearbeiten | Quelltext bearbeiten]Voreinstellungen
[Bearbeiten | Quelltext 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:
- Öffne Excel.
- Gehe zum Menüband und wählen Sie "Datei" aus.
- Klicke auf "Optionen".
- Wähle im Fenster "Excel-Optionen" die Kategorie "Vertrauensstellungscenter" aus.
- Klicke# auf die Schaltfläche "Einstellungen für das Vertrauensstellungscenter".
- Wähle im Vertrauensstellungscenter die Option "Einstellungen für Makros" aus.
- Wähle eine der folgenden Optionen aus:
- "Alle Makros aktivieren": Damit werden alle Makros in Excel ohne Warnung ausgeführt.
- "Alle Makros mit Benachrichtigung aktivieren": Damit werden Makros in Excel ausgeführt, aber du bekommst eine Warnung, bevor ein Makro ausgeführt wird.
- "Makros deaktivieren, mit Benachrichtigung": Damit werden Makros deaktiviert, aber du kannst Makros aktivieren, wenn du dies für sicher hältst.
- "Alle Makros deaktivieren, ohne Benachrichtigung": Damit werden alle Makros deaktiviert und keine Warnung angezeigt.
- Nachde die Auswahl getroffen ist, klicke auf "OK", um die Einstellungen zu speichern.
- 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 | Quelltext bearbeiten]Um ein Makro in eine Excel-Arbeitsmappe zu importieren und auszuführen, folge diesen Schritten:
- Öffne Excel:
Starte Microsoft Excel und öffne die Arbeitsmappe, in die das Makro importiert werden soll. - Ö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.
- 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.
- 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 | Quelltext 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...?
- 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 | Quelltext 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