Wir wünschen allen Forenteilnehmern ein frohes Fest und einen guten Rutsch ins neue Jahr. x

Kompilierungsfehler
#1
Hallo liebes Forum,

ich verzweifle aktuell daran, dass wir bei uns in der Firma nun von der 32Bit auf die 64Bit Version von Excel wechseln. 
Ergo tauchte plötzlich die Problematik mit dem Kompilierungsfehler auf. Ich hab schon diverse Seiten dazu gelesen, aber ich finde nicht das Problem im Makro. 
Die überall zu findende Declare-Theamtik, ist es meiner Meinung nach auch nicht. Die Benutze ich ja gar nicht.
 
Vielleicht hat von euch jemand Erfahrung damit und findet das Problem.

Hier die einzelnen Bausteine aus dem gemeldeten Modul.

Code:
Option Private Module

Private Sub DoPDF()
Dim sName$
Dim Path$
sName = ActiveSheet.Name

Path = CreateObject("WScript.Shell").specialfolders("Desktop")
On Error Resume Next
If Range("D10") = "X" Then
ThisWorkbook.ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
    Filename:=Path & "\" & Sheets("Tabelle1").Range("G10") & " - " & Cells.Range("P10") & ".pdf", _
    OpenAfterPublish:=True
If Err.Number > 0 Then MsgBox "Error saving pdf."
Else
ThisWorkbook.ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
    Filename:=Path & "\" & "KW" & Sheets("Tabelle2").Range("C1") & " - " & Cells.Range("P10") & ".pdf", _
    OpenAfterPublish:=True
If Err.Number > 0 Then MsgBox "Error saving pdf."
End If
Code:
Sub Vorprüfung_Tabelle_leeren()

Application.ScreenUpdating = False
If Range("H33").FormulaR1C1 = _
        "=IFERROR(VLOOKUP(RC[-6],'DropDown Auswahl'!C1:C2,2,FALSE),"""")" Then
            Tabelle_leeren_drop1
            Range("D8").Select
        Else
            Tabelle_leeren_drop0
            Range("D8").Select
        End If
Application.ScreenUpdating = True           
End Sub
Code:
Sub Tabelle_leeren_drop0()

Range( _
        "P8:U8,P10:U10,P12:U12,P14:U14,D8,G8,D17,D10,G10,D12,G12,I12,I14,G14,D14,D19,D21,B26:U29,B33:G63,H33:J63,K33:L63,N33:Q63,R33:S63,T33:U63" _
        ).Select
    Selection.ClearContents
    Range("D8").Activate
End Sub

Code:
Sub Tabelle_leeren_drop1()

Range( _
        "P8:U8,P10:U10,P12:U12,P14:U14,D8,G8,D17,D10,G10,D12,G12,I12,I14,G14,D14,D19,D21,B26:U29,B33:G63,K33:L63,N33:Q63,T33:U63" _
        ).Select
        Selection.ClearContents
          Range("D8").Activate
End Sub


(Ja, man kann smarter Löschen, aber die Variante zum Checken ob eine Zelle gesperrt ist oder nicht, dauert knapp 5-7 Sekunden. Die eigentlichen Zellen ansprechen, wird quasi sofort erledigt.)
Code:
Sub Dateiname()

Worksheets("Tabelle2").Range("H1").FormulaLocal = ActiveWorkbook.Name
End Sub

Sub S_Meldung()
ActiveWorkbook.FollowHyperlink Address:="https://www.****.*******.com/api-****/file?id=433eb79b-0006-46ef-9a6f-1f360630e1de", _
    NewWindow:=True
End Sub
Code:
Sub Schutz_aus()

ThisWorkbook.Unprotect "*********"
End Sub
Code:
Sub Schutz_an()

    ThisWorkbook.Protect Password:="*********", Structure:=True
End Sub

Die folgenden beiden Makros wurden über die Makroaufzeichnung erstellt. Ich glaube nicht, dass dort was dabei ist, aber sicher ist sicher.
Code:
Sub DropdownAktivieren()

Application.ScreenUpdating = False
Schutz_aus
Worksheets("Tabelle1").Unprotect "*********"
    Range("B33:G63,N33:Q63").Select
    Range("N63").Activate
    With Selection.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="=DROPDOWN"
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = False
        .ShowError = False
    End With
    Range("H33:J33").Select
    ActiveCell.FormulaR1C1 = _
        "=IFERROR(VLOOKUP(RC[-6],'DropDown Auswahl'!C1:C2,2,FALSE),"""")"
    Range("H33:J33").Select
    Selection.AutoFill Destination:=Range("H33:J63"), Type:=xlFillDefault
    Range("H33:J63").Select
    ActiveWindow.SmallScroll Down:=8
    Range("H63:J63").Select
    ActiveWindow.SmallScroll Down:=-28
    Range("R33:S33").Select
    ActiveCell.FormulaR1C1 = _
        "=IFERROR(VLOOKUP(RC[-4],'DropDown Auswahl'!C1:C2,2,FALSE),"""")"
    Range("R33:S33").Select
    Selection.AutoFill Destination:=Range("R33:S63"), Type:=xlFillDefault
    Range("R33:S63").Select
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
    End With
    Range("B33:G33").Select
    Sheets("Tabelle1").Select
    Sheets("DropDown Auswahl").Visible = True
    Sheets("Tabelle1").Select

    ActiveSheet.Shapes.Range(Array("Rectangle 15")).Select
    Selection.ShapeRange.TextFrame2.MarginLeft = 0
        Selection.ShapeRange.TextFrame2.MarginRight = 0
    Range("Z38").Select
    ActiveSheet.Shapes.Range(Array("Rectangle 15")).Select
    Selection.ShapeRange(1).TextFrame2.TextRange.Characters.Text = _
        "Dropdown aktiv" & Chr(13) & "(zum deaktivieren erneut drücken)"
    With Selection.ShapeRange(1).TextFrame2.TextRange.Characters(1, 15). _
        ParagraphFormat
        .FirstLineIndent = 0
        .Alignment = msoAlignCenter
    End With
    With Selection.ShapeRange(1).TextFrame2.TextRange.Characters(16, 33).Font
        .BaselineOffset = 0
        .Bold = msoTrue
        .NameComplexScript = "+mn-cs"
        .NameFarEast = "+mn-ea"
        .Fill.Visible = msoTrue
        .Fill.ForeColor.ObjectThemeColor = msoThemeColorDark1
        .Fill.ForeColor.TintAndShade = 0
        .Fill.ForeColor.Brightness = 0
        .Fill.Transparency = 0
        .Fill.Solid
        .Size = 6
        .Name = "+mn-lt"
    End With
    ActiveSheet.Shapes.Range(Array("Rectangle 15")).Select
    Selection.ShapeRange.ShapeStyle = msoShapeStylePreset42
    Selection.OnAction = "Dropdown_entfernen"
    Range("B33").Select
Schutz_an
Worksheets("Tabelle1").Protect "*********"
Application.ScreenUpdating = True
End Sub
Code:
Sub Dropdown_entfernen()

Application.ScreenUpdating = False
Schutz_aus
Worksheets("Tabelle1").Unprotect "*********"
    ActiveSheet.Unprotect
    ActiveWorkbook.Unprotect
    Range("B33:G63,N33:Q63").Select
    Range("N63").Activate
    ActiveCell.SpecialCells(xlCellTypeSameValidation).Select
    With Selection.Validation
        .Delete
        .Add Type:=xlValidateInputOnly, AlertStyle:=xlValidAlertStop, Operator _
        :=xlBetween
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = False
        .ShowError = False
    End With
    Range("H33:J63").Select
    Selection.ClearContents
    Range("R33:S63").Select
    Selection.ClearContents
    Range("B33:G33").Select
    Sheets("DropDown Auswahl").Visible = False
    ActiveSheet.Shapes.Range(Array("Rectangle 15")).Select
    Selection.ShapeRange(1).TextFrame2.TextRange.Characters.Text = _
        "Dropdown aktivieren"
    With Selection.ShapeRange(1).TextFrame2.TextRange.Characters(1, 19). _
        ParagraphFormat
        .FirstLineIndent = 0
        .Alignment = msoAlignCenter
    End With
    With Selection.ShapeRange(1).TextFrame2.TextRange.Characters(1, 19).Font
        .Bold = msoTrue
        .NameComplexScript = "+mn-cs"
        .NameFarEast = "+mn-ea"
        .Fill.Visible = msoTrue
        .Fill.ForeColor.ObjectThemeColor = msoThemeColorDark1
        .Fill.ForeColor.TintAndShade = 0
        .Fill.ForeColor.Brightness = 0
        .Fill.Transparency = 0
        .Fill.Solid
        .Size = 11
        .Name = "+mn-lt"
    End With
    ActiveSheet.Shapes.Range(Array("Rectangle 15")).Select
    Selection.ShapeRange.TextFrame2.MarginLeft = 5.6692913386
    Selection.ShapeRange.TextFrame2.MarginRight = 5.6692913386
    Selection.ShapeRange.ShapeStyle = msoShapeStylePreset25
    Selection.OnAction = "DropdownAktivieren"
    Sheets("Tabelle1").Select
    Range("B33").Activate
Schutz_an
Worksheets("Tabelle1").Protect "*********"
Application.ScreenUpdating = True
End Sub

Das ist noch in Tabelle 1, würde ich aber auch ausschließen.
Code:
Option Explicit
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean)
If Not Intersect(Target, Range("D8:D21")) Is Nothing Then
  Target = IIf(Target = "X", "", "X")
  Cancel = True
End If
End Sub

Wie eingehens erwähnt, währe ich echt dankbar wenn jemand in dem Thema Erfahrung hat und mal schauen könnte ob was zu erkennen ist. 28

Immer wieder neue Probleme...  26  
Antworten Top
#2
Kommentiere den Code solange aus bis der Kompilierungsfehler nicht mehr auftritt. Dann hast du den Bösewicht.
[-] Folgende(r) 1 Nutzer sagt Danke an ralf_b für diesen Beitrag:
  • Suprasod
Antworten Top
#3
Kann ich leider nicht, weil ich noch nicht die 64er Version habe. Bei mir läuft alles ganz Zauberhaft.
Ansonsten aber genau richtig der Ansatz.
Antworten Top
#4
Hallöchen,

Zitat:Kann ich leider nicht, weil ich noch nicht die 64er Version habe.


Dann macht Deine Firma was falsch. Normalerweise bekommt der Entwickler zuerst die neue Version, um die Lauffähigkeit zu prüfen bzw. sicherzustellen und dann wird erst umgestellt ...
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#5
Hallo,

hier mal zur Info, leider keine Lösung.

Ich habe 64-Bit Excel und wenn ich Deinen code hier bei mir einfüge, ist alles ok. Es gibt keinen Kompilierungsfehler.

Wie Du schon selbst festgestellt hast, sind hier auch keine umzustellende API-Funktionsdeklarationen enthalten (diese würden auch in rot dargestellt); der Code an sich sieht mir nicht so aus, als wenn es dort 64 Bit Inkompatibilitäten geben könnte.

Es muss also an etwas anderem liegen, das man hier im Forum m.E. ohne Datei nicht lösen kann.

Gruß
Karl-Heinz
Antworten Top
#6
Zur Verteidigung der Firma muss ich sagen, dass noch ein "bisschen" mehr ausgerollt wird als Excel. Wir stellen um auf cloudbasierte Clienten. Mir steht also ein kompletter Reset bevor ?. Nach der Neuinstallation gibt es dann die 64bit Version von Office.

Ich habe einem Kollegen die Mappe gesendet und vorher die Codes in einzelne Module gepackt. Er bekommt immernoch einen Kompilierungsfehler in Modul 2. Dort ist das oberste von mir aufgelistete Makro drin. Allerdings bekommt er den Fehler, wenn er einen Button anklickt, bei dem ich Dropdown aktivieren hinterlegt habe. Das ist in einem ganz anderen Modul. Mache ich eine Kompilierungsprüfung in VBA, gibt's auch keinen Fehler. Liegt es eventuell an "Option explizit"?
Antworten Top
#7
Hallöchen,

in die Richtung Deines ersten Moduls hab ich auch schon gedacht. Es kann sein, dass systemseitig Zugriffe auf Systemvariablen eingeschränkt sind oder nicht funktionieren. Wer weiß, was die IT alles anstellen kann.

Gib einen Pfad mal fest vor, z.B. C:\Temp\ und kommentiere den shell aufruf aus. Dein Kollege könnte, falls nicht vorhanden, C:\Temp anlegen
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#8
Ah!!!  Idea
Sehr guter Hinweis.
Ich verweise ja auf den Desktop im Benutzerordner. Da die Active Directory nun auf Azure AD umgestellt wurde, könnte es sein, dass das nicht mehr ohne weiteres ermittelt werden kann. Andere persönliche Daten kann ich ja auch nicht mehr abrufen. Dem muss ich mal nachgehen. Jetzt bin ich erstmal offline, weil ich den Rechner Platt mache. Also nicht wundern wenn erstmal keine Antwort kommt.
Antworten Top
#9
Hallo zusammen, 

endlich bin ich wieder Handlungsfähig und endlich kann ich Probleme selbst sehen. 

Der Verdacht, den ich über die Anregung von Schauan bekommen habe, dass die Ermittlung des Desktop Pfades problematisch sein könnte, hat sich nicht bestätigt.
Nachdem ich alle Makros in ein eigenes Modul gepackt habe, bleibe ich nun ausgerechnet an dem Modul kleben, dass ich mit der Makroaufzeichnung gebastelt habe.
Siehe Kommentar im Code...
Code:
Option Private Module
Sub DropdownAktivieren()

Application.ScreenUpdating = False
Schutz_aus
Worksheets("Tabelle1").Unprotect "*********"
    Range("B33:G63,N33:Q63").Select
    Range("N63").Activate
    With Selection.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="=DROPDOWN"
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = False
        .ShowError = False
    End With
    Range("H33:J33").Select
    ActiveCell.FormulaR1C1 = _
        "=IFERROR(VLOOKUP(RC[-6],'DropDown Auswahl'!C1:C2,2,FALSE),"""")"
    Range("H33:J33").Select
    Selection.AutoFill Destination:=Range("H33:J63"), Type:=xlFillDefault
    Range("H33:J63").Select
    ActiveWindow.SmallScroll Down:=8
    Range("H63:J63").Select
    ActiveWindow.SmallScroll Down:=-28
    Range("R33:S33").Select
    ActiveCell.FormulaR1C1 = _
        "=IFERROR(VLOOKUP(RC[-4],'DropDown Auswahl'!C1:C2,2,FALSE),"""")"
    Range("R33:S33").Select
    Selection.AutoFill Destination:=Range("R33:S63"), Type:=xlFillDefault
    Range("R33:S63").Select
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
    End With
    Range("B33:G33").Select
    Sheets("Tabelle1").Select
    Sheets("DropDown Auswahl").Visible = True
    Sheets("Tabelle1").Select
   
    ActiveSheet.Shapes.Range(Array("Rectangle 15")).Select
    Selection.ShapeRange.TextFrame2.MarginLeft = 0
        Selection.ShapeRange.TextFrame2.MarginRight = 0
    Range("Z38").Select
    ActiveSheet.Shapes.Range(Array("Rectangle 15")).Select
    Selection.ShapeRange(1).TextFrame2.TextRange.Characters.Text = _
        "Dropdown aktiv" & Chr(13) & "(zum deaktivieren erneut drücken)"          ' <--- in der Zeile wird mir "Chr" markiert,
                                                                                  'nachdem ich die Fehlermeldung
                                                                                  '"Fehler beim Kompilieren: Projekt oder
                                                                                  'Bibliothek nicht gefunden" mit OK bestätigt habe.
    With Selection.ShapeRange(1).TextFrame2.TextRange.Characters(1, 15). _
        ParagraphFormat
        .FirstLineIndent = 0
        .Alignment = msoAlignCenter
    End With
    With Selection.ShapeRange(1).TextFrame2.TextRange.Characters(16, 33).Font
        .BaselineOffset = 0
        .Bold = msoTrue
        .NameComplexScript = "+mn-cs"
        .NameFarEast = "+mn-ea"
        .Fill.Visible = msoTrue
        .Fill.ForeColor.ObjectThemeColor = msoThemeColorDark1
        .Fill.ForeColor.TintAndShade = 0
        .Fill.ForeColor.Brightness = 0
        .Fill.Transparency = 0
        .Fill.Solid
        .Size = 6
        .Name = "+mn-lt"
    End With
    ActiveSheet.Shapes.Range(Array("Rectangle 15")).Select
    Selection.ShapeRange.ShapeStyle = msoShapeStylePreset42
    Selection.OnAction = "Dropdown_entfernen"
    Range("B33").Select
Call Schutz_an
Worksheets("Tabelle1").Protect "*********"
Application.ScreenUpdating = True

End Sub

Darauf kann ich mir keinen Reim machen. Hab eine neue Aufzeichnung gemacht und es wird der gleiche Code verwendet.
Antworten Top
#10
Hallöchen,

wenn Dir Chr(13) markiert wird, dann nimm es doch mal raus und schaue, was dann passiert.
Zuweilen geht so ein Zeilenumbruch nicht, zuweilen geht auch nur CHR(10)
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste