Ich wurde gefragt, auf welche Art Dokumente als Grafik in ein Dokument integriert werden können.
Alter berechnen…
Um in Excel das Alter zu berechnen, findet man verschiedene Ansätze.
Am sinnvollsten erscheint mir die Lösung mit der (mehr oder minder) undokumentierten Funktion DATEDIF. Für das Alter in Jahren genügt die Formel =DATEDIF(A1;HEUTE();"Y")
, wenn in A1 das Geburtsdatum steht.
Die DATEDIF-Funktion wurde wohl aus Kompatibilitätsgründen zur Tabellenkalkulation Lotus 1-2-3 in Excel übernommen, und ist erst seit Excel 2000 in der Hilfe aufgeführt. Der Funktionsassistent hingegen kennt die Funktion nach wie vor nicht. Hier ist eine Dokumentation online.
Nutzung des SOAP-Servers mit Office
Ich wollte noch auf die Nutzung des SOAP-Servers mit Word (2000) hinaus.
Nutzung mit dem SOAP-Toolkit von Microsoft
Diese älteren Office-Versionen haben im Gegensatz zur Methode mit .net keinen direkten Zugriff auf die SOAP-Methoden. Dies lässt sich aber mit Microsofts SOAP-Toolkit nachrüsten. Microsoft schreibt zwar, dass das Toolkit durch .net veraltet sei, bietet aber sowohl das komplette SDK wie auch das verteilbare Paket zum Download an.
Damit wird die Nutzung des Webservices ziemlich einfach. Unter Extras-Verweise muß ein Verweis zum Microsoft SOAP Toolkit hinzugefügt werden.
In der Prozedur benötigen wir zunächst ein entsprechendes Objekt:
Dim soap As SoapClient
Set soap = New SoapClient
Mit diesem Objekt wird die WSDL-Datei abgeholt. Im Anschluss daran stehen die per Web-Service veröffentlichten Funktionen als Methoden des Objekts zur Verfügung. Für uns heißt das:
With soap
' Hole die Funktionen aus der Beschreibungsdatei
.mssoapinit "http://www.example.com/soapserver.php?wsdl."
' Und jetzt tu was...
ergebnis = .suche("Suchbegriff")
End With
Dabei scheint es wichtig zu sein, im nuSoap einen Namespace zu verwenden. Ohne Namespace-Definition erhalte ich einen VB-Fehler, mit keinen.
Nutzung von PocketSOAP
Eine weitere nette Bibliothek ist PocketSOAP von Simon Fell. Nachdem man auch hier unter Extras–Verweise diese Bibliothek hinzugefügt hat, holt folgende Code die Suchergebnisse ab:
Dim SOAP As New CoEnvelope
Dim HTTP As New HTTPTransport
Dim Result() As String
With SOAP
.MethodName = "suche"
.Parameters.Create "sucheRequest", "Suchbegriff"
End With
HTTP.Send "http://www.example.com/soapserver.php", SOAP.Serialize
' parse the SOAP message
SOAP.Parse HTTP
' extract the return value
Result = SOAP.Parameters.Item(0).Value
Noch einfacher geht des mit dem „SOAP Proxy“-Object: Hier genügen folgende Zeilen:
Dim SOAPProxy As PSPROXYLib.CoSoapFactory
Dim SOAP As Object
Dim Result() As String
Set SOAPProxy = New PSPROXYLib.CoSoapFactory
Set SOAP = SOAPProxy.CreateProxy("http://www.example.com/soapserver.php")
Result = SOAP.suche(sucheRequest:="Suchbegriff")
Zu PocketSOAP gibt es derüber hinaus einen WSDL-Proxygenerator, der aus einer WSDL-Datei entsprechende Klassen für VB generiert. Damit stehen die über SOAP exportierten Funktionen als Methoden dieser Objekte zur Verfügung, was das Arbeiten mit diesen natürlich sehr angenehm macht.
Excel Nullwerte nicht anzeigen
Gerade musste ich in einer umfangreichen Tabelle in bestimmten Spalten Nullwerte ausblenden. Der Trick: Als Zahlenwert wird 0,00;;
eingegeben. Damit erscheinen Nullwerte (und negative Werte) nicht mehr.