Zum Inhalt springen

Access / VBA / Zugriff auf Excel-Funktionen


piomode1

Empfohlene Beiträge

Hi, @all!

Ich brauche mal Hilfe:

In einer Access-Datenbank soll eine Zahl (0 < x < 4000) in die römische Schreibweise umgewandelt werden (Z.B.: 123 --> CXXIII)

Excel stellt eine entsprechende Funktion bereit: "Roman" ("Römisch" im Tabellenblatt.)

Access (anscheinend) nicht.

Mit folgendem Code kann ich auf die Excel-Funktion zugreifen, indem ich

- die in meine Funktion übergebene Zahl und die Umwandlungsformel in ein neues Tabellenblatt schreibe,

- den Wert in römischer Schreibweise auslese

- und diesen dann zurückgebe.

(Der entsprechende Verweis auf die "Excel-Object-Library" ist gesetzt.)

ABER:

Das muß doch auch einfacher gehen!?

Die Laufzeit ist unerträglich lang.

Und irgendwann wird sich ein User wundern, warum er "Mappe 4242" bekommt, wenn er manuell eine neue anlegt.

Wenn überhaupt eine neue angelegt werden kann (<-- Speicher nicht aufgeräumt?)

Hier erst einmal meine Lösung (ohne Test auf "Gültig(lngZahl)"):

Function fktRoman(lngZahl As Long) As String


Dim Excel2000 As Excel.Application

Dim blnExcelIsRunning As Boolean


    'Annahme: Excel ist geöffnet.

    '... = False, wenn Excel erst durch die

    ' Fehler-Routine gestartet wurde.

    ' Die entspr. Zuweisung erfolgt dort.

    blnExcelIsRunning = True


On Error GoTo Fehler

    Set Excel2000 = GetObject(, "Excel.Application")

On Error GoTo 0


    With Excel2000


        'Neue Mappe (<-- leer(!!))

        .Workbooks.Add

        'Zahl setzen, berechnen lassen, auslesen

        .Cells(1, 1) = lngZahl

        .Cells(1, 2) = "=Roman(A1)"

        fktRoman = .Cells(1, 2)

        '(Neue) Mappe schließen, nicht speichern

        .ActiveWorkbook.Close False


        'Wenn Excel nicht geöffnet war

        ' dann schließen

        If Not blnExcelIsRunning Then

            .Quit

        End If


    End With 'Excel2000


    Set Excel2000 = Nothing


Exit Function

Fehler:


    'Excel war nicht geöffnet

    Set Excel2000 = CreateObject("Excel.Application")

    blnExcelIsRunning = False


    Resume Next


End Function

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...