Option Explicit ' DLL zum Ausführen von Programmen deklarieren Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _ (ByVal hwnd As Long, ByVal lpOperation As String, _ ByVal lpFile As String, ByVal lpParameters As String, _ ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long Sub ErzeugeWortwolke() 'Ein/Ausschalten der Tranzparenz der Verdränger für Layoutansicht, mögliche Werte 0/1 Const iTranzparenz = 1 Dim MyFile, MyFileNum Dim iCounter, iMaxHaeufigkeit, iMinHaeufigkeit, iHaeufigkeit, iHervorhebung, iSkalierung As Integer Dim strFontSize1, strFontSize2, strFontSize3, strFontSize4, strFontSize5 As String Dim strTranzparenz, strWort As String ' Erzeuge Wortliste als HTML-Datei MyFile = ThisWorkbook.Path & "\Wortwolke.html" ' Minimum und Maximum der Häufigkeit des Auftretens der Wortbausteine ermitteln iMaxHaeufigkeit = MaxHaeufigkeit() iMinHaeufigkeit = MinHaeufigkeit() ' Manuelle Skalierung berechnen If ((Cells(1, 5).Value = "") Or (Not IsNumeric(Cells(1, 5).Value))) Then MsgBox "Keine Skalierung in Zelle E1 angegeben", vbOKOnly, "Fehler" Else ' FontSize Dimensionierung aus Skalierung abschätzen strFontSize1 = Str(Round(1.5 * Cells(1, 5).Value / 100, 1)) strFontSize2 = Str(Round(1.8 * Cells(1, 5).Value / 100, 1)) strFontSize3 = Str(Round(2.4 * Cells(1, 5).Value / 100, 1)) strFontSize4 = Str(Round(2.9 * Cells(1, 5).Value / 100, 1)) strFontSize5 = Str(Round(3.5 * Cells(1, 5).Value / 100, 1)) ' HTML File anlegen MyFileNum = FreeFile() Open MyFile For Output As #MyFileNum ' HTML Kopf schreiben Print #MyFileNum, "" Print #MyFileNum, "" Print #MyFileNum, " " Print #MyFileNum, " Wortwolke" ' Stylesheets definieren -> 5 Elemente zur Zeit, 1280 pixel breit Print #MyFileNum, " " Print #MyFileNum, " " ' HTML aufbauen Print #MyFileNum, " " Print #MyFileNum, "
" ' Verdränger aufbauen If iTranzparenz = 0 Then strTranzparenz = "background-color:#CCCCCC; border:solid; border-width:1px; " Else strTranzparenz = "background-color:transparent; " End If ' Hintergrund Grafix als SVG einbinden Print #MyFileNum, " " Print #MyFileNum, " " Print #MyFileNum, " Ihr Browser kann SVG-Objekte leider nicht anzeigen. Nutzen Sie Firefox 3 oder höher!" Print #MyFileNum, " " Print #MyFileNum, " " ' Verdränger Horizontale Ebene 1 Print #MyFileNum, " " ' Verdränger Horizontale Ebene 2 Print #MyFileNum, " " Print #MyFileNum, " " ' Verdränger Horizontale Ebene 3 Print #MyFileNum, " " Print #MyFileNum, " " ' Verdränger Horizontale Ebene 4 Print #MyFileNum, " " Print #MyFileNum, " " ' Verdränger Horizontale Ebene 5 Print #MyFileNum, " " Print #MyFileNum, " " ' Verdränger Horizontale Ebene 6 Print #MyFileNum, " " Print #MyFileNum, " " ' Verdränger Horizontale Ebene 7 Print #MyFileNum, " " ' Wortbausteine in Wortwolke schreiben iCounter = 1 While (Cells(iCounter, 1).Value <> "") ' Häufigkeit aus Zellen lesen strWort = Cells(iCounter, 1).Value iHaeufigkeit = Cells(iCounter, 2).Value ' Hervorhebung und Gruppierung der Häufigkeit bestimmen iHervorhebung = Int((iHaeufigkeit - iMinHaeufigkeit) / (iMaxHaeufigkeit - iMinHaeufigkeit) * 4) + 1 ' .. und als SPAN-Element ausgeben Print #MyFileNum, " " & strWort & "" iCounter = iCounter + 1 Wend ' HTML schließen Print #MyFileNum, "
" Print #MyFileNum, " " Print #MyFileNum, "" ' HTML File schließen Close #MyFileNum ' Erzeugtes HTML File im Browser öffnen ShellExecute Application.hwnd, "Open", MyFile, vbNullString, vbNullString, vbNormalFocus End If End Sub Function MinHaeufigkeit() Dim iCounter, iMinInt iMinInt = 0 iCounter = 1 iMinInt = Cells(iCounter, 2).Value iCounter = 1 While (Cells(iCounter, 1).Value <> "") If iMinInt > Cells(iCounter, 2).Value Then iMinInt = Cells(iCounter, 2).Value End If iCounter = iCounter + 1 Wend MinHaeufigkeit = iMinInt End Function Function MaxHaeufigkeit() Dim iCounter, iMaxInt iMaxInt = 0 iCounter = 1 While (Cells(iCounter, 1).Value <> "") If iMaxInt < Cells(iCounter, 2).Value Then iMaxInt = Cells(iCounter, 2).Value End If iCounter = iCounter + 1 Wend MaxHaeufigkeit = iMaxInt End Function