Freigeben über

Excel VBA

Anonym
2018-12-05T08:31:20+00:00

Hallo ich würde gerne einen Code (VBA) von Office 2013 in 2016 nutzen.

Beide sind inzwischen auf 32 Bit aber leider bekomme ich nur die Fehlermeldung, das 

Das Makro "Makroname" kann nicht ausgeführt werden. Das Makro ist möglicherweise in dieser Arbeitsmappe nicht verfügbar, oder alle Makros wurden deaktiviert.

Ich habe schon alles aktiviert was geht sogar alle Makros (ist natürlich wieder aus)

Einzelne Teile des Codes habe ich versucht zu starten bekomme aber auch hier Fehlermeldungen, das 

Benutzerdefinierter Typ nicht definiert

Ist. Kann aber ja nicht stimmen, das funktioniert in Office 2013 ohne Probleme.

Muss der Code für 2016 anders aufbereitet werden ?

Erster Rechner WIN7 Office 2013

Zweiter Rechner WIN10 Office 2016

Der Code ist in Excel geschrieben erstellt eine Arbeitsmappe arbeitet aber auch mit diversen Dokumenten in Word und Powerpoint , sowie Dateistrukturen usw

Microsoft 365 und Office | Excel | Für Zuhause | Windows

Gesperrte Frage. Diese Frage wurde aus der Microsoft-Support-Community migriert. Sie können darüber abstimmen, ob sie hilfreich ist, aber Sie können keine Kommentare oder Antworten hinzufügen oder der Frage folgen.

0 Kommentare Keine Kommentare

9 Antworten

Sortieren nach: Am hilfreichsten
  1. Anonym
    2018-12-07T09:07:08+00:00

    Leider muss ich jetzt nochmal antworten, da ich kein zweites Bild hochbekomme.

    Was mich erstaunt ist, das auf dem ersten Bild der Haken bei VBA Projekt fehlt aber in der Excel das definitiv geladen ist.

    War diese Antwort hilfreich?

    0 Kommentare Keine Kommentare
  2. Anonym
    2018-12-07T09:04:59+00:00

    Ich habe nachgeschaut, was du geschrieben hast aber steht nirgends dran das was nicht vorhanden ist.

    Ich lade mal ein Bild davon hoch.

    Scheinbar kann ich nur eines zur Zeit Hochladen

    War diese Antwort hilfreich?

    0 Kommentare Keine Kommentare
  3. Andreas Killer 144.1K Zuverlässigkeitspunkte Freiwilliger Moderator
    2018-12-05T14:29:38+00:00

    Ich habe hier mal einen Teil der Codestruktur angefügt und ich bin der Meinung dort viel Beispiele für late Binding zu finden, sollte ich hier falsch liegen bitte ich um Berichtigung.

    Du liegst falsch und zwar völlig, nur mal die 2 Schnipsel:

    Dim sfld As Folder, ch As Integer

        Dim docs As files, sdoc As File, pdfdoc As File

        Dim dinf As cDocumentInfo, dtyp As itsCwType

    If dtyp = itsCwTypeManual Or dtyp = itsCwTypeLessonSummary Or _

                dtyp = itsCwTypeWorksheetTask Or dtyp = itsCwTypeWorksheetSolution Then

    Schau unter

    VBA Editor \ Extras \ Verweise...

    da wird es einige Einträge geben die mit NICHT VORHANDEN markiert sind.

    Entweder gibt es auf dem Rechner ein passendes Gegenstück oder Du musst die fehlenden Programme / DLL / OCX / oder was auch immer installieren und dann die entsprechenden Verweise ggf. neu setzen.

    Andreas.

    War diese Antwort hilfreich?

    0 Kommentare Keine Kommentare
  4. Anonym
    2018-12-05T12:40:56+00:00

    Ich habe hier mal einen Teil der Codestruktur angefügt und ich bin der Meinung dort viel Beispiele für late Binding zu finden, sollte ich hier falsch liegen bitte ich um Berichtigung.

    Den Entwickler kann ich nicht mehr fragen ist nicht mehr greifbar leider.

    Wobei das hier nur ein Teil des Codes ist sprich ein Modul.

    Ich verstehe nicht, warum das im 2013 geht und 2016 nicht es sind alle Programme installiert und er durchsucht eine Ordnerstrucktur nach Dateien bestimmten Typs M.docx, PPT.pptx, LS.docx usw, wandelt diese in dem Modul in PDF um und speichert sie in einem Ordner.

    Wenn also das VBA sich nicht groß geändert hat sollte das doch gehen. 

    Option Explicit

    Private pPdfPath As String

    Public Sub CreatePdfMakro(control As IRibbonControl)

        CreatePdf

    End Sub

    Public Sub CreatePdfShowResult()

        CreatePdf

        If pResultText <> "" Then

            MsgBox pResultText, pResultIcon + vbOKOnly, "Syllabus Prüfer - " & ActiveWorkbook.Name

        End If

    End Sub

    Public Sub CreatePdf()

    Dim fileExcel As File

        On Error GoTo MsgBoxFehler

        pResultText = ""

        pResultIcon = vbInformation

        If Not IsSyllabusWorkbook() Then

            pResultText = "Diese Excel Mappe ist keine Courseware Liste!" & vbCrLf & vbCrLf & "Bitte verwenden Sie die Korrekte Vorlage" & vbCrLf & "zum Erstellen einer Courseware Liste."

            pResultIcon = vbCritical

            Exit Sub

        End If

        If Not TestWorkbookExists() Then

            pResultText = "Die Excel Mappe wurde noch nicht gespeichert!" & vbCrLf & vbCrLf & "Bitte speichen Sie die Mappe mit dem korrekten Namen" & vbCrLf & "in der Hierarchie des Kurses."

            pResultIcon = vbCritical

            Exit Sub

        End If

        TestOpenDocuments

        Application.Cursor = xlDefault ' xlWait

        Application.StatusBar = "PDF Erstellung beginnt."

        Set fileExcel = fso.GetFile(ActiveWorkbook.FullName)

        Set rootFolder = fileExcel.ParentFolder

        pPdfPath = fso.BuildPath(rootFolder.path, "_PDF")

        If Not fso.FolderExists(pPdfPath) Then

            fso.CreateFolder pPdfPath

        End If

        Set appWord = CreateObject("Word.Application")

        CreatePdfWalkFolders rootFolder

        appWord.Quit

        Set appWord = Nothing

        GoTo noerr

    MsgBoxFehler:

        pResultText = "Fehler Nr. " & Err.Number & " von " & Err.Source & vbCrLf & Err.Description

        pResultIcon = vbCritical

    noerr:

        Application.Cursor = xlDefault

        Application.StatusBar = "PDF Erstellung beendet."

    End Sub

    Private Sub CreatePdfWalkFolders(ByVal fld As Folder)

        Dim sfld As Folder, ch As Integer

        Dim docs As files, sdoc As File, pdfdoc As File

        Dim dinf As cDocumentInfo, dtyp As itsCwType

        Dim pdfpath As String, wassaved As Boolean

        Dim fidate As Date, pdfdate As Date

        Set docs = fld.files

        Set dinf = New cDocumentInfo

        For Each sdoc In docs

            dinf.FromFileName sdoc.Name

            dtyp = dinf.TypeEnum

            If dtyp = itsCwTypeManual Or dtyp = itsCwTypeLessonSummary Or _

                dtyp = itsCwTypeWorksheetTask Or dtyp = itsCwTypeWorksheetSolution Then

                dinf.Extension = ".pdf"

                fidate = sdoc.DateLastModified

                pdfpath = fso.BuildPath(pPdfPath, dinf.ToFileName)

                If fso.FileExists(pdfpath) Then

                    Set pdfdoc = fso.GetFile(pdfpath)

                    pdfdate = pdfdoc.DateLastModified

                Else

                    pdfdate = DateSerial(1900, 1, 1)

                End If

                If fidate > pdfdate Then

                    Application.StatusBar = "PDF Erstellung für " & sdoc.Name

                    Set docWord = appWord.Documents.Open(Filename:=sdoc.path, ReadOnly:=True, Visible:=True)

                    docWord.ExportAsFixedFormat OutputFileName:=pdfpath, _

                            ExportFormat:=wdExportFormatPDF, OpenAfterExport:=False, _

                            OptimizeFor:=wdExportOptimizeForPrint, Range:=wdExportAllDocument, _

                            Item:=wdExportDocumentContent, IncludeDocProps:=True, _

                            CreateBookmarks:=wdExportCreateHeadingBookmarks

                    docWord.Saved = True

                    docWord.Close

                    Set docWord = Nothing

                End If

            End If

            DoEvents

        Next sdoc

        If fld.subfolders.Count > 0 Then

            For Each sfld In fld.subfolders

                ch = Asc(Left(sfld.Name, 1))

                If ch > 47 And ch < 58 Then

                    DoEvents

                    CreatePdfWalkFolders sfld

                End If

            Next

        End If

    End Sub

    War diese Antwort hilfreich?

    0 Kommentare Keine Kommentare
  5. Andreas Killer 144.1K Zuverlässigkeitspunkte Freiwilliger Moderator
    2018-12-05T11:13:12+00:00

    Benutzerdefinierter Typ nicht definiert

    Ist. Kann aber ja nicht stimmen, das funktioniert in Office 2013 ohne Probleme.

    Der Code ist in Excel geschrieben erstellt eine Arbeitsmappe arbeitet aber auch mit diversen Dokumenten in Word und Powerpoint , sowie Dateistrukturen usw

    Doch, die Fehlermeldung wird richtig sein.

    Meine Glaskugel sagt das der Entwickler der Datei in 2013 Early Binding verwendet hat und damit auf die externen Programme eine Referenz gesetzt hat... und diese gibt es halt nicht auf dem Rechner mit 2016.

    Wende Dich an den Entwickler und sag ihm er soll den Code auf Late Binding umschreiben, dann läuft er auf beiden.

    https://docs.microsoft.com/de-de/dotnet/visual-basic/programming-guide/language-features/early-late-binding/

    Andreas.

    War diese Antwort hilfreich?

    0 Kommentare Keine Kommentare