vba code von win to mac funktioniert nicht

Von AppleSkript & Automator bis hin zu Objective C

vba code von win to mac funktioniert nicht

Beitragvon bete_87782 » Sa 15. Nov 2014, 14:35

Hallo,

ich bin neu in diesem forum und habe ein problem:
seit kurzem bin ich von win auf mac umgestiegen und habe eine unsymphatische überraschung erlebt als ich mein digitales schulregister unter excel 2011 for mac geöffnet habe. der erstellte vba code funktioniert nicht.

Code: Alles auswählen
Private Sub Workbook_Open()
    Dim strJahrgang As String
    Dim strKlasse As String
    Dim strNr As String
    Dim mPath As String
    Dim mFoto As String
    mPath = ThisWorkbook.Path & "\Foto"
    Application.ScreenUpdating = False
    strJahrgang = Worksheets("Register").Range("D18")
    strKlasse = Worksheets("Register").Range("E36")
    ' Schleife über alle Tabellenblätter
    For i = 1 To Sheets.Count
        ' Tabellenname enthält "schüler_"
        If InStr(Sheets(i).Name, "schüler_") > 0 Then
            With Sheets(i)
                ' Nr. aus dem Tabellennamen
                strNr = Format(Application.Substitute(.Name, "schüler_", ""), "00")
                ' Bildnamen zusammensetzen
                mFoto = strJahrgang & " Klasse " & strKlasse & " - " & strNr & " " & _
                    .Cells(1, 5) & " " & .Cells(1, 8)
                ' in laufender Tabelle ist kein Bild vorhanden
                If .Shapes.Count = 0 Then
                    ' benötigtes Bild ist im Ornder vorhanden
                    If Dir(mPath & "\" & mFoto & ".jpg") <> "" Then
                        .Pictures.Insert (mPath & "\" & mFoto & ".jpg")
                        With .Pictures(.Pictures.Count)
                            .Top = Range("G5").Top
                            .Left = Range("G5").Left
                            .Height = Range("G5:G12").Height
                            .Width = Range("G5:J5").Width
                        End With
                        DoEvents
                    ' Bild ist im Ordner nicht mehr vorhanden
                    Else
                        ' Bild löschen
                        If .Shapes.Count > 0 Then .Shapes(1).Delete
                    End If
                ' in laufender Tabelle ist Bild vorhanden
                Else
                    ' wenn Bild im Ordner nicht merh vorhanden dann Bild löschen
                    If Dir(mPath & "\" & mFoto & ".jpg") = "" Then .Shapes(1).Delete
                End If
                mFoto = ""
            End With
        End If
    Next i
    Application.ScreenUpdating = True
End Sub


mein code sucht die fotos der schüler im ordner "Foto" (der immer dort ist wo auch da excelfile sich befindet) und fügt sie im jeweiligen blatt des schülers in g5:j12 ein.
die infos um das richtige foto dem richtigen schüler zuzuordnen entwickelt der code indem er im blatt:
"register" in E18 das schuljahr und in E36 die klasse bestimmt
und von jedem blatt "schüler_1", "schüler_2" usw in E1 den nachnamen und h1 den vornamen zusammenstellt

somit ergibt sich der name jedes foto aus dem schuljahr, klasse, nachname, name zusammen (z.B. 2014-15 klasse 1a - 01 Walt Disney)

sollte der code das foto nicht mehr finden so löscht er es.

die ganzen variablen benötige ich, denn das register muss ich mehrere schuljahre benützen können und in mehreren klassen.
da ich eine unmenge an klassen und schüler habe, war es bis voriges jahr eine ungeheure arbeit jedes foto einzeln einzufügen und so bin ich auf diese automatisierte fassung gekommen.

die geburt dieses codes war schon für win sehr schwierig, aber dass es nun auch mit mac veränderungen braucht ist der hammer.

mittlerweile habe ich ein unter mac funktionierendes file gefunden das win/mac kompatibl ist und eine ähnliche aufgabe erfüllt:
Code: Alles auswählen
Option Explicit

Sub PCorMAC()
    If Application.OperatingSystem Like "*Mac*" Then
        importPicturesMac
    Else
        importPicturesWin
    End If
End Sub


Sub importPicturesWin()
 Dim objPic As Picture
 Dim rng As Range
 Dim strPath As String
 
 strPath = ThisWorkbook.Path 'Pfad - Anpassen!
 
 If Right(strPath, 1) <> Application.PathSeparator Then strPath = strPath & Application.PathSeparator
 
 With Sheets("Tabelle3") 'Tabellennname - Anpassen!
  For Each rng In Range("A2:A" & .Cells(.Rows.Count, 1).End(xlUp).Row)
   'If Dir(strPath & rng & ".jpg", vbNormal) <> "" Then
   'If FileOrFolderExistsOnMac(1, strPath & rng) Then
   If Dir(strPath & rng, vbNormal) <> "" Then
    Set objPic = .Pictures.Insert(strPath & rng)
    With objPic
     .ShapeRange.LockAspectRatio = msoTrue
     .Placement = xlMoveAndSize
     .Top = rng.Top
     .Height = rng.Height
     .Left = rng.Offset(0, 1).Left
    End With
   End If
  Next
 End With
 
 Set objPic = Nothing
End Sub


Sub importPicturesMac()
 Dim objPic As Picture
 Dim rng As Range
 Dim strPath As String
 
 strPath = ThisWorkbook.Path 'Pfad - Anpassen!
 
 If Right(strPath, 1) <> Application.PathSeparator Then strPath = strPath & Application.PathSeparator
 
 With Sheets("Tabelle3") 'Tabellennname - Anpassen!
  For Each rng In Range("A2:A" & .Cells(.Rows.Count, 1).End(xlUp).Row)
   'If Dir(strPath & rng & ".jpg", vbNormal) <> "" Then
   If FileOrFolderExistsOnMac(1, strPath & rng) Then
   'If Dir(strPath & rng, vbNormal) <> "" Then
    Set objPic = .Pictures.Insert(strPath & rng)
    With objPic
     .ShapeRange.LockAspectRatio = msoTrue
     .Placement = xlMoveAndSize
     .Top = rng.Top
     .Height = rng.Height
     .Left = rng.Offset(0, 1).Left
    End With
   End If
  Next
 End With
 
 Set objPic = Nothing
End Sub


 
Function FileOrFolderExistsOnMac(FileOrFolder As Long, FileOrFolderstr As String) As Boolean
'By Ron de Bruin
'30-July-2012
'Function to test whether a file or folder exist on a Mac.
'Uses AppleScript to avoid the problem with long file names.
    Dim ScriptToCheckFileFolder As String
    ScriptToCheckFileFolder = "tell application " & Chr(34) & "Finder" & Chr(34) & Chr(13)
    If FileOrFolder = 1 Then
        ScriptToCheckFileFolder = ScriptToCheckFileFolder & "exists file " & _
        Chr(34) & FileOrFolderstr & Chr(34) & Chr(13)
    Else
        ScriptToCheckFileFolder = ScriptToCheckFileFolder & "exists folder " & _
        Chr(34) & FileOrFolderstr & Chr(34) & Chr(13)
    End If
    ScriptToCheckFileFolder = ScriptToCheckFileFolder & "end tell" & Chr(13)
    FileOrFolderExistsOnMac = MacScript(ScriptToCheckFileFolder)
End Function


ich habe verstanden dass die pfade in mac mit ":" gekennzeichnet werden und dass die funktion "dir" unter mac nicht funktioniert.

ich habe versucht meinen code anzupassen aber er funktioniert immer noch nicht und ich weiss nicht mehr weiter.

Code: Alles auswählen
Private Sub Workbook_Open()
    Dim strJahrgang As String
    Dim strKlasse As String
    Dim strNr As String
    Dim mPath As String
    Dim mFoto As String
    mPath = ThisWorkbook.Path & ":Foto"
    Application.ScreenUpdating = False
    strJahrgang = Worksheets("Register").Range("D18")
    strKlasse = Worksheets("Register").Range("E36")
    ' Schleife über alle Tabellenblätter
    For i = 1 To Sheets.Count
        ' Tabellenname enthält "schüler_"
        If InStr(Sheets(i).Name, "schüler_") > 0 Then
            With Sheets(i)
                ' Nr. aus dem Tabellennamen
                strNr = Format(Application.Substitute(.Name, "schüler_", ""), "00")
                ' Bildnamen zusammensetzen
                mFoto = strJahrgang & " Klasse " & strKlasse & " - " & strNr & " " & _
                    .Cells(1, 5) & " " & .Cells(1, 8)
                ' in laufender Tabelle ist kein Bild vorhanden
                If .Shapes.Count = 0 Then
                    ' benötigtes Bild ist im Ornder vorhanden
                    If FileOrFolderExistsOnMac(1, mPath & ":" & mFoto & ".jpg") <> "" Then
                        .Pictures.Insert (mPath & ":" & mFoto & ".jpg")
                        With .Pictures(.Pictures.Count)
                            .Top = Range("G5").Top
                            .Left = Range("G5").Left
                            .Height = Range("G5:G12").Height
                            .Width = Range("G5:J5").Width
                        End With
                        DoEvents
                    ' Bild ist im Ordner nicht mehr vorhanden
                    Else
                        ' Bild löschen
                        If .Shapes.Count > 0 Then .Shapes(1).Delete
                    End If
                ' in laufender Tabelle ist Bild vorhanden
                Else
                    ' wenn Bild im Ordner nicht merh vorhanden dann Bild löschen
                    If FileOrFolderExistsOnMac(1, mPath & ":" & mFoto & ".jpg") = "" Then .Shapes(1).Delete
                End If
                mFoto = ""
            End With
        End If
    Next i
    Application.ScreenUpdating = True
End Sub

Function FileOrFolderExistsOnMac(FileOrFolder As Long, FileOrFolderstr As String) As Boolean
'By Ron de Bruin
'30-July-2012
'Function to test whether a file or folder exist on a Mac.
'Uses AppleScript to avoid the problem with long file names.
    Dim ScriptToCheckFileFolder As String
    ScriptToCheckFileFolder = "tell application " & Chr(34) & "Finder" & Chr(34) & Chr(13)
    If FileOrFolder = 1 Then
        ScriptToCheckFileFolder = ScriptToCheckFileFolder & "exists file " & _
        Chr(34) & FileOrFolderstr & Chr(34) & Chr(13)
    Else
        ScriptToCheckFileFolder = ScriptToCheckFileFolder & "exists folder " & _
        Chr(34) & FileOrFolderstr & Chr(34) & Chr(13)
    End If
    ScriptToCheckFileFolder = ScriptToCheckFileFolder & "end tell" & Chr(13)
    FileOrFolderExistsOnMac = MacScript(ScriptToCheckFileFolder)
End Function


ich hätte auch die files hochgeladen aber ich finde die funktion nicht.
bitte kann mir jemand weiterhelfen!?
Danke
daniel

bete_87782
Besucher
Besucher
 
Beiträge: 1
Registriert: Sa 15. Nov 2014, 14:17

Re: vba code von win to mac funktioniert nicht

Beitragvon Gast » Sa 15. Nov 2014, 15:29

Für die konkrete Fragestellung habe ich leider keine Lösung. Hoffe, Dir kann jemand hier aus dem Forum helfen.

Meine allgemein Haltung ist die, dass ich auch aus solchen Gründen neben der allgemeinen Office-Kompatibilität die PC MS-Office Versionen in einer Windows-VM laufen lasse.

Mit der MacEdition 2011 gibt es wieder eine VBA-Unterstützung (wenn auch nicht 100% kompatibel), nachdem die zwischenzeitlich ja mal ganz weggefallen war (Mac Office 2008).
Gast
 


Zurück zu Skripte & Programmierung