Anzeige
Archiv - Navigation
1264to1268
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Grafiken kopieren und an Zellgröße ausrichten

Grafiken kopieren und an Zellgröße ausrichten
Frischy1990
Guten Tag,
ich habe ein Problem.
Derzeit habe ich die Aufgabe eine Datenbank für alle Anlagen/ Maschinen unseres Werkes und der restlichen deutschen Werke zu erstellen. In der Datenbank soll die Möglichkeit bestehen, von jeder Anlage eine Art Steckbrief (kurze Übersicht) automatisch zu erstellen. Im Großen und Ganzen passt das soweit auch, aber der Steckbrief muss auch mit Bildern der Anlage und der zu bearbeitenden Teile versehen werden, welche in der Datenbank hinterlegt sind und daran scheitere ich derzeit.
In der Datenbank können 0 - 4 Grafiken in den dafür vorgesehenen Zellen eingefügt werden. Diese werden dann per Makro in meine Vorlage für den Steckbrief kopiert. Dort habe ich Zellbereiche verbunden und hätte gern, dass die Grafiken genau in diesen Zellverbund kopiert werden und an deren Größe angepasst werden.
Aktuell geschiet das per Copy - Paste, jedoch sind die Grafiken im Steckbrief total schief irgendwo in der Nähe der vorgesehenen Zelle aber eben nicht darin^^

Hier die aktuelle Kopierweise:

Datenbank.Sheets("Database").Cells(i, 65).Copy
Steckbrief.Activate
ActiveSheet.Cells(30, 8).Select
ActiveSheet.Paste
Ich freue mich über alle Lösungsvorschläge!
AW: Grafiken kopieren und an Zellgröße ausrichten
07.06.2012 07:47:56
Josef

Hallo ?,
lade mal eine Beispieldatei hoch, übrigens geht das auch ohne VBA.

« Gruß Sepp »

AW: Grafiken kopieren und an Zellgröße ausrichten
07.06.2012 08:11:30
Frischy1990
... ich glaube das funktioniert nur per Makro, da ja irgendwann 300 Anlagen in der Datenbank stehen und nach jeder Änderung der Daten einer Anlage sofort automatisch ein neuer Steckbrief erstellt werden soll
Hier ist die Beispieldatei...

Die Datei https://www.herber.de/bbs/user/80458.xlsm wurde aus Datenschutzgründen gelöscht


In Registerkarte "Database" einfach mal in die Zeile mit den Angaben zu der Anlage klicken und anschließen oben auf das PLAY Logo klicken, dann startet das Makro... der Makrostart wird noch geändert, ist aktuell nur zu testzwecken so...
Anzeige
AW: Grafiken kopieren und an Zellgröße ausrichten
07.06.2012 09:17:24
Josef

Hallo ?,
ersetze den Code im Modul1 durch folgenden.
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Sub Steckbrief_erstellen()
  Dim Datenbank As Workbook, Steckbrief As Workbook, objSh As Worksheet
  Dim lngRow As Long
  Dim strName As String
  Dim objImg As Object
  Dim lngCalc As Long, lngC As Long
  
  'Makro in Aktiver Spalte ausführen
  
  On Error GoTo ErrExit
  
  With Application
    .ScreenUpdating = False
    .EnableEvents = False
    lngCalc = .Calculation
    .Calculation = xlCalculationManual
    .DisplayAlerts = False
  End With
  
  lngRow = ActiveCell.Row
  
  'Please Wait Logo anzeigen
  Ladebild.Show vbModeless
  Application.Wait Now + TimeSerial(0, 0, 1)
  
  
  'einblenden der Steckbrief Vorlage
  Sheets("Vorlage Steckbrief").Visible = True
  
  
  Set Datenbank = ActiveWorkbook
  
  'Arbeitsmappen Check durchführen
  Application.DisplayAlerts = False
  
  If Dir("C:\temp\machine.xlsx") <> "" Then
    
    
    Set Steckbrief = Workbooks.Open("C:\temp\machine.xlsx")
    
    
    Datenbank.Activate
    Sheets("Vorlage Steckbrief").Select
    Sheets("Vorlage Steckbrief").Copy before:=Workbooks("machine.xlsx").Sheets(1)
    
  Else
    Datenbank.Activate
    Sheets("Vorlage Steckbrief").Select
    Sheets("Vorlage Steckbrief").Copy
    ChDir "C:\Temp"
    ActiveWorkbook.SaveAs Filename:="C:\Temp\machine.xlsx", FileFormat:= _
      xlOpenXMLWorkbook, CreateBackup:=False
    
    Set Steckbrief = ActiveWorkbook
    
  End If
  
  
  Steckbrief.Sheets(1).Name = "neu" & lngRow
  
  Set objSh = Steckbrief.Sheets("neu" & lngRow)
  
  'Kopieren der Anlagendaten
  With Datenbank.Sheets("Database")
    'Bezeichnung
    objSh.Cells(6, 2) = .Cells(lngRow, 3).Text & (" ") & .Cells(lngRow, 6).Text
    'Country
    objSh.Cells(11, 3) = .Cells(lngRow, 1).Text
    'location
    objSh.Cells(12, 3) = .Cells(lngRow, 2).Text
    'machine
    objSh.Cells(13, 3) = .Cells(lngRow, 3).Text
    'classification
    objSh.Cells(14, 3) = .Cells(lngRow, 4).Text
    'kind of condition
    objSh.Cells(15, 3) = .Cells(lngRow, 5).Text
    'plant number
    objSh.Cells(16, 3) = .Cells(lngRow, 6).Text
    'adress
    objSh.Cells(17, 3) = .Cells(lngRow, 7).Text
    'contact
    objSh.Cells(18, 3) = .Cells(lngRow, 8).Text
    'inventory number
    objSh.Cells(19, 3) = .Cells(lngRow, 10).Text
    'place requirement
    objSh.Cells(20, 3) = .Cells(lngRow, 12).Text
    'year of manufacture
    objSh.Cells(22, 3) = .Cells(lngRow, 13).Text
    'advertising price
    objSh.Cells(23, 3) = .Cells(lngRow, 15).Text
    'connected load
    objSh.Cells(24, 3) = .Cells(lngRow, 16).Text
    'mech. kind of cleaning
    'Datenbank.Activate
    objSh.Cells(25, 3) = .Cells(lngRow, 35).Text
    'characteristics
    'charge
    objSh.Range("B30") = .Cells(lngRow, 31).Value
    'magnet
    objSh.Range("C30") = .Cells(lngRow, 32).Value
    'oil
    objSh.Range("D30") = .Cells(lngRow, 33).Value
    'filtration
    objSh.Range("B32") = .Cells(lngRow, 34).Value
    'flue
    objSh.Range("C32") = .Cells(lngRow, 36).Value
    'vakuum
    objSh.Range("D32") = .Cells(lngRow, 37).Value
    'bath
    'bath 1
    'chastener
    objSh.Range("H13") = .Cells(lngRow, 39).Value
    'concentration
    objSh.Range("I13") = .Cells(lngRow, 40).Value
    'volume
    objSh.Range("J13") = .Cells(lngRow, 41).Value
    'bath 2
    'chastener
    objSh.Range("H14") = .Cells(lngRow, 42).Value
    'concentration
    objSh.Range("I14") = .Cells(lngRow, 43).Value
    'volume
    objSh.Range("J14") = .Cells(lngRow, 44).Value
    'bath 3
    'chastener
    objSh.Range("H15") = .Cells(lngRow, 45).Value
    'concentration
    objSh.Range("I15") = .Cells(lngRow, 46).Value
    'volume
    objSh.Range("J15") = .Cells(lngRow, 47).Value
    'bath 4
    'chastener
    objSh.Range("H16") = .Cells(lngRow, 48).Value
    'concentration
    objSh.Range("I16") = .Cells(lngRow, 49).Value
    'volume
    objSh.Range("J16") = .Cells(lngRow, 50).Value
    'bath 5
    'chastener
    objSh.Range("H17") = .Cells(lngRow, 51).Value
    'concentration
    objSh.Range("I17") = .Cells(lngRow, 52).Value
    'volume
    objSh.Range("J17") = .Cells(lngRow, 53).Value
    'bath 6
    'chastener
    objSh.Range("H18") = .Cells(lngRow, 54).Value
    'concentration
    objSh.Range("I18") = .Cells(lngRow, 55).Value
    'volume
    objSh.Range("J18") = .Cells(lngRow, 56).Value
    'bath 7
    'chastener
    objSh.Range("H19") = .Cells(lngRow, 57).Value
    'concentration
    objSh.Range("I19") = .Cells(lngRow, 58).Value
    'volume
    objSh.Range("J19") = .Cells(lngRow, 59).Value
    'bath 8
    'chastener
    objSh.Range("H20") = .Cells(lngRow, 60).Value
    'concentration
    objSh.Range("I20") = .Cells(lngRow, 61).Value
    'volume
    objSh.Range("J20") = .Cells(lngRow, 62).Value
    
    'component1
    'objsh.Range("H23")=.Cells(lngRow, 28).value
    'component2
    'objsh.Range("I23")=.Cells(lngRow, 28).value
    'Cycle Time1
    objSh.Range("H24") = .Cells(lngRow, 17).Value
    'Cycle Time2
    objSh.Range("I24") = .Cells(lngRow, 21).Value
    'washing Time1
    objSh.Range("H25") = .Cells(lngRow, 18).Value
    'washing Time2
    objSh.Range("I25") = .Cells(lngRow, 22).Value
    'parts per pallet1
    objSh.Range("H26") = .Cells(lngRow, 19).Value
    'parts per pallet2
    objSh.Range("I26") = .Cells(lngRow, 23).Value
    'number of pallet1
    objSh.Range("H27") = .Cells(lngRow, 20).Value
    'number of pallet2
    objSh.Range("I27") = .Cells(lngRow, 24).Value
    'general remarks
    objSh.Range("H34") = .Cells(lngRow, 38).Value
    
    
    
    'BILDER
    'process-flow of component 1
    Set objImg = getPicture(.Cells(lngRow, 63))
    If Not objImg Is Nothing Then
      objImg.Copy
      objSh.Paste
      objSh.Shapes(objImg.Name).Top = objSh.Cells(34, 3).Top + 1
      objSh.Shapes(objImg.Name).Left = objSh.Cells(34, 3).Left
    End If
    'process-flow of component 2
    Set objImg = getPicture(.Cells(lngRow, 64))
    If Not objImg Is Nothing Then
      objImg.Copy
      objSh.Paste
      objSh.Shapes(objImg.Name).Top = objSh.Cells(37, 3).Top + 1
      objSh.Shapes(objImg.Name).Left = objSh.Cells(37, 3).Left
    End If
    'picture of component 1
    Set objImg = getPicture(.Cells(lngRow, 65))
    If Not objImg Is Nothing Then
      objImg.Copy
      objSh.Paste
      objSh.Shapes(objImg.Name).Top = objSh.Cells(30, 8).Top + 1
      objSh.Shapes(objImg.Name).Left = objSh.Cells(30, 8).Left
    End If
    'picture of component 2
    Set objImg = getPicture(.Cells(lngRow, 66))
    If Not objImg Is Nothing Then
      objImg.Copy
      objSh.Paste
      objSh.Shapes(objImg.Name).Top = objSh.Cells(30, 9).Top + 1
      objSh.Shapes(objImg.Name).Left = objSh.Cells(30, 9).Left
    End If
    'Anlage
    Set objImg = getPicture(.Cells(lngRow, 67))
    If Not objImg Is Nothing Then
      objImg.Copy
      objSh.Paste
      objSh.Shapes(objImg.Name).Top = objSh.Cells(1, 4).Top + 1
      objSh.Shapes(objImg.Name).Left = objSh.Cells(1, 4).Left
    End If
    
  End With
  
  'verstecken der Steckbrief Vorlage
  Datenbank.Activate
  Sheets("Vorlage Steckbrief").Visible = xlVeryHidden
  Datenbank.Sheets("Database").Activate
  Datenbank.Save
  
  
  'Ladebild ausblenden
  Ladebild.Hide
  
  
  ' Benennen des Tabellenblattes
  strName = Datenbank.Sheets("Database").Cells(lngRow, 3) & " " & Datenbank.Sheets("Database").Cells(lngRow, 6)
  
  
  Do While SheetExist(strName, Steckbrief)
    lngC = lngC + 1
    strName = strName & " (" & lngC & ")"
  Loop
  
  objSh.Name = strName
  
  
  'Steckbrief anzeigen
  Steckbrief.Activate
  Application.Goto objSh.Range("A1"), True
  Steckbrief.Save
  
  ErrExit:
  
  With Err
    If .Number <> 0 Then
      MsgBox "Fehler in Prozedur:" & vbTab & "'Steckbrief_erstellen'" & vbLf & String(60, "_") & _
        vbLf & vbLf & IIf(Erl, "Fehler in Zeile:" & vbTab & Erl & vbLf & vbLf, "") & _
        "Fehlernummer:" & vbTab & .Number & vbLf & vbLf & "Beschreibung:" & vbTab & _
        .Description & vbLf, vbExclamation + vbMsgBoxSetForeground, _
        "VBA - Fehler in Modul - Modul1"
      .Clear
    End If
  End With
  
  On Error GoTo 0
  
  With Application
    .ScreenUpdating = True
    .EnableEvents = True
    .Calculation = lngCalc
    .DisplayAlerts = True
  End With
  
  Set Datenbank = Nothing
  Set Steckbrief = Nothing
  Set objImg = Nothing
  Set objSh = Nothing
End Sub


Public Function getPicture(rng As Excel.Range) As Object
  Dim item As Object
  
  For Each item In rng.Parent.Shapes
    If item.TopLeftCell.Address = rng.Address Then
      Set getPicture = item
      Exit For
    End If
  Next
  
End Function


Private Function SheetExist(ByVal sheetName As String, Optional Wb As Workbook) As Boolean
  Dim wks As Worksheet
  On Error GoTo ERRORHANDLER
  If Wb Is Nothing Then Set Wb = ThisWorkbook
  For Each wks In Wb.Worksheets
    If LCase(wks.Name) = LCase(sheetName) Then SheetExist = True: Exit Function
  Next
  ERRORHANDLER:
  SheetExist = False
End Function



« Gruß Sepp »

Anzeige
AW: Grafiken kopieren und an Zellgröße ausrichten
07.06.2012 09:31:31
Frischy1990
Vielen Dank!
Ich habe Modul 1 komplett ersetzt, jedoch kommt bei mir nun stets folgende Fehlermeldung:
Fehler in Prozedur: 'Steckbrief erstellen'
Fehlernummer: -2147024809
Beschreibung: Das Element mit dem angegebenen Namen wurde nicht gefunden.
AW: Grafiken kopieren und an Zellgröße ausrichten
07.06.2012 10:03:47
Josef

Hallo ?,
bei mir läuft es ohne Probleme.
https://www.herber.de/bbs/user/80463.xlsm

« Gruß Sepp »

Anzeige
AW: Grafiken kopieren und an Zellgröße ausrichten
07.06.2012 10:15:03
Frischy1990
Stimmt... es funktioniert problemlos.
Kann ich dir meine Datei mal per Mail schicken?... würde die Firmendaten ungern ins Netz stellen.
AW: Grafiken kopieren und an Zellgröße ausrichten
07.06.2012 10:19:41
Josef

Hallo ?,
wenn es funktioniert warum willst du mir dann die Datei schicken?

« Gruß Sepp »

AW: Grafiken kopieren und an Zellgröße ausrichten
07.06.2012 10:27:07
Frischy1990
Bei mir funktioniert es leider nicht...
der Fehler liegt beim Kopieren der beiden "Process Flow Bilder", wenn ich diese auskommentiere, dann funktioniert es auch bei mir einwandfrei.
Anzeige
AW: Grafiken kopieren und an Zellgröße ausrichten
07.06.2012 10:34:51
Josef

Hallo ?,
na gut, ausnahmsweise j.ehrensberger (at) aon.at

« Gruß Sepp »

AW: Grafiken kopieren und an Zellgröße ausrichten
07.06.2012 11:08:21
Frischy1990
Mail ist raus... ich hoffe du kannst den Fehler finden.
AW: Grafiken kopieren und an Zellgröße ausrichten
07.06.2012 12:01:04
Frischy1990
Problem ist gelöst!
Vielen Dank Sepp!!!

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige