Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1764to1768
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

Makro kopiert, aber der Feinschliff

Makro kopiert, aber der Feinschliff
18.06.2020 12:31:41
Uli
Hallo an Alle ,
habe mit dem Recorder ein Makro aufgezeichnet welches Zelleinträge und ein Bild welches in der Zelle Q10 in dem Blatt "Nachweisdokumentation" liegt, auf das Blatt "Nachweise" kopiert.
Nun bin ich kein VBA Profi.
Mit dem Makro habe ich ein paar Probleme.
Das Bild weiches auf die Zelle Q10 gelegt wird, bekommt jedes mal einen anderen Namen. In meinem Makro steht aber Picture XX und da kommt eine Fehlermeldung. Eventuell muss das Makro hier den Namen immer ändern. Der Name des Bildes ist nicht wichtig.
Das Bild hat die Einstellung von "Zellposition und Größe abhängig". Diese Einstellung wird immer wieder gelöscht. kann man sie fest einstellen ? Sonst ist beim nächsten Kopiervorgang die Einstellung wieder weg und das Bild ict größer als vor dem Kopieren.
Wenn die Einträge zum Blatt "Nachweise" kopiert werden fangen die Einträge bei A2 an. Gerne hätte ich es so das der neue Eintrag immer in die nächste freie Spalte kopiert wird.
Eventuell ist jemand bereit mir das Makro anzupassen.
Bin für Hilfe sehr dankbar.
Habe die Datei auch mal angehangen.
Gruß und Danke Uli
https://www.herber.de/bbs/user/138404.xlsm
Sub Makro2()
' übergabe an nachweise
Sheets("Nachweise").Select
ActiveSheet.Unprotect
Sheets("Nachweisdokumentation").Select
Range("N10,O10,P10,Q10").Select
Range("Q10").Activate
Selection.Copy
Sheets("Nachweise").Select
ActiveSheet.Paste
Range("E3").Select
Application.CutCopyMode = False
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
Sheets("Nachweisdokumentation").Select
ActiveSheet.Shapes.Range(Array("Picture 2")).Select
Selection.Delete
Range("P10").Select
Selection.ClearContents
Range("O10").Select
Selection.ClearContents
Range("N10").Select
Selection.ClearContents
Range("N11").Select
End Sub

33
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro kopiert, aber der Feinschliff
18.06.2020 13:57:43
Klaus
Hi Uli,
statt den komplizierten Weg zu gehen und das Bild zu kopieren (analog STRG+C), benutze ich STRG+X um gleich den ganzen Bereich inklusive Formate und Bild zu erfassen. Danach schummele ich ein wenig, um die Rahmen wieder zurück zu setzen.
Sub Makro2()
' übergabe an nachweise
Dim lRow As Long
With Sheets("Nachweise")
.Unprotect
lRow = .Cells(.Rows.Count, 1).End(xlUp).Row + 1 'erste freie Zeile in Spalte A
Sheets("Nachweisdokumentation").Range("N10:Q10").Cut .Range("A" & lRow)
.Range("A" & lRow & ":D" & lRow).Copy
Sheets("Nachweisdokumentation").Range("N10").PasteSpecial xlPasteFormats 'Rahmen wieder  _
herstellen
.Protect 'wenn du es oben entsperrst, willst du es danach sicher wieder sperren?
End With
End Sub
LG,
Klaus
Anzeige
#Danke Klaus
18.06.2020 14:49:16
Uli
Hallo Klaus,
habe es gerade getestet und es funktioniert super.
Bedanke mich ganz Herzlich für die Hilfe.
Freue mich total.
Gruß und Danke Uli
AW: #Danke Klaus
18.06.2020 14:53:18
Uli
Hallo Klaus,
habe doch noch etwas gefunden.
Und zwar kopiert das Makro in Zelle N10 in Blatt Nachweisdokumentation das Dropdowmenue mit und löscht es in Zelle N10 :
Kann man das vermeiden so das dass Dropdown mit den Namen in Zelle N10 erhalten bleibt ?
Danke und Gruß Uli
AW: #Danke Klaus
18.06.2020 15:42:38
volti
Hallo,
mit dem Ausschneiden scheint man nicht "nur Text" kopieren zu können und das DropDown ist auch weg.
Ich gehe jetzt mal davon aus, dass die Formatierung, (wie in Deiner ersten Zeile auch zu sehen) nicht mitgenommen werden soll (passt ja auch irgendwie nicht so gut) und die Grafik genau in das Feld passen soll.
Hier noch mal ein angepasster Code von mir, der das hoffentlich alles berücksichtigt:
Probiere es halt aus.
Sub Datenkopieren()
 Dim WSh As Worksheet, AC As Range, iZeile As Long
 Dim rRette As Range, oShp As Object
  
 Application.ScreenUpdating = False
  
 Set WSh = ThisWorkbook.Sheets("Nachweisdokumentation")
 With ThisWorkbook.Sheets("Nachweise")
   .Unprotect
  
   iZeile = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
'Texte kopieren und löschen
   .Range("A" & iZeile & ":C" & iZeile).Value = WSh.Range("N10:P10").Value
   WSh.Range("N10:P10").ClearContents
  
'Grafik suchen und kopieren
   WSh.Select
   For Each oShp In WSh.Shapes
    If TypeName(oShp) = "Shape" And oShp.Width > 75 Then
       oShp.Select
       Selection.Copy
     End If
   Next oShp
  
'Grafik einfügen
   .Select
   Set rRette = ActiveCell
   .Range("$D$" & iZeile).Select
   .Paste
'Grafik in Zelle einpassen
   Set AC = ActiveCell
   If TypeName(Selection) = "Picture" Then
     With Selection.ShapeRange
        .Name = "Unterschrift"
        .LockAspectRatio = True
        If (.Width / AC.Width) < (.Height / AC.Height) Then
           .Height = AC.Height          'Bild höher als breit
        Else
           .Width = AC.Width
        End If
        .Left = AC.Left + ((AC.Width - .Width) \ 2)
        .Top = AC.Top + ((AC.Height - .Height) \ 2)
     End With
   End If
  
'Alte Zelle wieder aktivieren und Blatt schützen
   rRette.Select
   .Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
 End With
 
'Bereich und Bild löschen
 WSh.Select
 Selection.Delete
  
 Application.ScreenUpdating = True
End Sub

Viele Grüße aus Freigericht
Karl-Heinz

Anzeige
Super Danke
18.06.2020 16:41:19
Uli
Hallo Karl Heinz,
funktioniert nun wirklich .
Besten Dank für die Mühe an Alle hier im Forum
Nee, Karl-Heinz, zu viel Select :-(
19.06.2020 09:26:06
Klaus
Hi,
ich würde nicht so viel mit select und Bildern rumspielen. CUT funktioniert doch, um das Bild zu transportieren. Also das Problem simpel lösen und zwei Kopiervorgänge: CUT für das Bild in Q10, COPY für N10:P10 - dann ist auch das Dropdown-Problem gelöst.
Den Rahmen um Q10 habe ich nicht gesetzt, würde ich sogar ganz weglassen. In "Nachweise" soll ja auch kein Rahmen drum.
LG,
Klaus
Sub Makro2()
' übergabe an nachweise
Dim lRow As Long
With Sheets("Nachweise")
.Unprotect
lRow = .Cells(.Rows.Count, 1).End(xlUp).Row + 1 'erste freie Zeile in Spalte A
Sheets("Nachweisdokumentation").Range("Q10").Cut .Range("D" & lRow)
Sheets("Nachweisdokumentation").Range("N10:P10").Copy
.Range("D" & lRow).PasteSpecial xlPasteValues
Sheets("Nachweisdokumentation").Range("N10:P10").ClearContents
.Protect 'wenn du es oben entsperrst, willst du es danach sicher wieder sperren?
End With
End Sub

Anzeige
AW: Nee, Karl-Heinz, zu viel Select :-(
19.06.2020 10:14:47
volti
Hi Klaus,
und dann gäbe es noch die Variante, gar nicht zu kopieren...
Sub Makro2()
    '
    ' übergabe an nachweise
    '
  Dim lRow As Long, rBer As Range
        Set rBer = Sheets("Nachweisdokumentation").Range("N10:P10")
        With Sheets("Nachweise")
            .Unprotect
            lRow = .Cells(.Rows.Count, 1).End(xlUp).Row + 1 'erste freie Zeile in Spalte A
            
            rBer.Parent.Range("Q10").Cut .Range("D" & lRow)
            .Range("A" & lRow & ":C" & lRow).Value = rBer.Value
            rBer.ClearContents
            
            .Protect 'wenn du es oben entsperrst, willst du es danach sicher wieder sperren?
        End With
End Sub

viele Grüße
Karl-Heinz
Anzeige
na, das ist doch mal chick :-)
19.06.2020 10:25:50
Klaus
.
AW: na, das ist doch mal chick :-)
19.06.2020 13:21:44
Uli
Hallo Zusammen,
bin wieder am arbeiten an meinem Makro. Komme leider wieder nicht weiter.
Habe versucht bei der Übermittlung der Daten auf Blatt "Nachweise" die Bezeichnung und die Indexnummer mit zu kopieren.
Es hat auch soweit funktioniert. Es wird aber nur die Bezeichnung aus Zelle C10 und der Index aus Zelle K10 mit Kopiert. Die aller erste Unterschrift gilt für alle Beschreibungen mit dem jeweiligen Index . Also z.B PT15_AA_0007 Index B und nach unten hin bis zum letzen Eintrag.
Habe es in dem Blatt "Nachweise" in Zeile 2 ab Spalte schon mal händisch eingetragen.
Also sollen in Blatt"Nachweise" z.B in Zeile 2 hinter der Unterschrift nach rechts weg, alle Bezeichnungen mit dem Index stehen.
Wenn Jetzt auf Blatt "Nachweisdokumentation" ein neuer Index eingetragen wird ( die Bezeichnungen bleiben immer gleich ) müsste auf Blatt"Nachweise" eine Neue Zeile angelegt werden mit dem neuen Index aber nur mit der Beschreibung für den neuen Index.
Hoffentlich habe ich das gut erklären können.
Die Datei habe ich mit hochgeladen.
Danke und Gruß Uli
https://www.herber.de/bbs/user/138427.xlsm
Anzeige
AW: na, das ist doch mal chick :-)
19.06.2020 14:22:14
volti
Hallo Uli,
schau mal in anlegende Datei, ob es jetzt so funktioniert wie Du es Dir vorstellst.
So richtig verstanden habe ich es (glaube ich) nicht.
Jetzt werden auf jeden Fall beim Ablauf des Makros in der ersten freien Zeile wie bisher die Personaldaten + Unterschrift und dann alle Einträge nach rechts weg eingetragen...
https://www.herber.de/bbs/user/138431.xlsm
Viele Grüße
Karl-Heinz
V2_Testmappe_Uli
19.06.2020 14:50:11
Uli
Hallo Karl-Heinz,
danke erstmal für die Hilfe.
Das passt bis hierher genau wie es sein soll. Klasse
Zur Erklärung:
Wenn jetzt von dem PT15_AA_007 ( ist übrigens ein Dokument zum lesen) sich die Indexversion ändert. Bedeutet in das Dokument wird etwas hinzugefügt oder geändert,bekommt das Dokument eine neue Index Version.
Also PT15_AA_007 Index:B war bis Gestern Aktuell und Ab Heute steht etwas neues in dem Dokument und der Index erhöht sich auf Index:C.
Nun hat ja Mitarbeiter Sadigi,Arif schon alle Dokumente gelesen und auch dafür unterschrieben. Außer jetzt für Dokument PT15_AA_007 in Version Index:C dann müsste er ja nicht mehr für alle Unterschreiben.
Also müsste dann ein Eintrag im Blatt " Nachweis" so sein das dort nur in einer Neuen Zeile das Dokument PT15_AA_007 steht mit dem neuen Index.
Ich habe das mal händisch auf das Blatt "Nachweise" eingetragen. Ist eventuell besser als es schriftlich zu erklären.
Echten Dank. Freue mich sehr über die Hilfe.
Ihr seit Meister hier.
Danke und Gruß Uli
https://www.herber.de/bbs/user/138434.xlsm
Anzeige
AW: V2_Testmappe_Uli
19.06.2020 15:16:50
volti
Nun,
ein Dokument erhält durch neuen Inhalt einen neuen Index und muss nach Lesung durch den MA bestätigt werden.
So weit so gut...
Was bedeutet das codetechnisch?
Woher weiß das Programm, dass das für den MA neu ist und was ist mit den anderen (alten) Positionen?
Falls nur durch neue Indexe Erweiterungen übernommen werden sollen, müsste das Programm bereits getätigte im Nachweisblatt durchscannen und nur die neuen aufnehmen?
Und wenn morgen das nächste Dokument einen neuen Index erhält, kommt es dann hinter den neu angelegten Eintrag oder wieder in eine neue Zeile.
Wahrscheinlich soll es so sein, dass bei jedem Laufen lassen des Programms alle neuen Indexe in eine neue Zeile für den MA kommen und wenn irgendwann wieder neue Indexe aufkommen, wieder eine neue Zeile oder?
Machbar, aber dann doch etwas aufwändiger. Wenn es so sein sollte, versuche ich mich mal dran.
VG KH
Anzeige
AW: V2_Testmappe_Uli
19.06.2020 15:24:32
Uli
ja so ist das richtig. Der Neue Index wird händisch durch eine Person eingetragen.
Ansonsten hast Du das besser erklärt als ich. Mir ist noch aufgefallen das nicht nur das Bild der Unterschrift mit kopiert wird. Oben Links in A1 bis H3 ist normalerweise ein Logo welches ich für die Testmappe entfernt habe. Das wird auch mit in das Blatt " Nachweis" kopiert.
Ich verstehe das es sehr Aufwendig ist. Es ist auch immer bisschen peinlich nach so Sachen zu fragen .
Leider kann ich mich nur dafür bedanken. Wenn es eine Kaffeekasse gäbe würde ich gerne was rein tun....sozusagen.
Besten dank.
Gruß Uli
Anzeige
AW: V3_Testmappe_Uli
19.06.2020 16:19:41
Uli
.......habe jetzt ein paar mal verschiedene getestet und es läuft . Wahnsinn. Danke schön
Habe jetzt den Beitrag noch offen gelassen wegen der Bilder. Ist doch richtig so , oder ?
Gruß Uli
AW: V3_Testmappe_Uli
19.06.2020 17:03:12
volti
Hallo Uli,
Oben Links in A1 bis H3 ist normalerweise ein Logo welches ich für die Testmappe entfernt habe. Das wird auch mit in das Blatt " Nachweis" kopiert.
Das kann eigentlich nicht sein, es wird nur ein Bild kopiert. Möglicherweise nur dieses Logo, weil wegen der wechselnden, nicht bekannten Namen das erste Bild (und wohl nicht einzige Picture) rausgefischt wird.
Im u.a Tool habe ich deshalb die Ecke Top/Left mit ausgewertet und hoffe, dass es jetzt weg ist. Sonst müsste man dem Logo einen Namen geben und diesen auswerten.
Auch habe ich noch etwas mehr Sicherheit reingebracht, wenn kein MA ausgewählt, dann keine Übertragung.
https://www.herber.de/bbs/user/138437.xlsm
viele Grüße
Karl-Heinz
Anzeige
V3_Testmappe_Uli
19.06.2020 19:18:59
Uli
Hallo Karl-Heinz,
das mit dem Sicherheitsaspekt finde ich richtig gut,werde versuchen noch einen MSGBox mit rein zu arbeiten. Übrigens hattest Du recht.
Da Logo besteht aus zwei Bildern. Und es wurde dann immer erst das oben links mit kopiert, dann das daneben beim zweiten Eintrag. und beim dritten Eintrag wurde dann erst die Überschrift mit kopiert.
Habe jetzt oben links ein Bild rein hin gelegt und das Logo benannt. Es scheint zu funktionieren.
Danke vielmals für die Hilfe und ein schönes Wochenende
Gruß Uli
Frage an volti
20.06.2020 18:38:19
Uli
Hallo Karl Heinz,
habe Heute versucht eine Message Box in den Code einzufügen.Sagen wir so, es funktionierte etwas. Mir fehlt doch noch das Wissen. Bin im Moment dabei den geschriebenen Code zu verstehen. Dafür erstmal danke für die Überschriften.
Mein Anliegen wegen der Message Boxen wäre, das wenn jeweils, kein Name, kein Bereich ,kein Datum und keine Unterschrift eingefügt ist eine Messagebox kommt und die Information gibt.
Gruß Uli
AW: Frage an volti
20.06.2020 23:00:08
volti
Hallo Uli,
nachfolgender Code informiert zum fehlenden Item und springt auch glich zur entsprechenden Stelle..
Sub Datenkopieren()
'Eingetragene Daten von Nachweisdokumentation zu Nachweise kopieren
 Dim WSh As Worksheet, AC As Range, iZeile As Long
 Dim iZl As Long, iSpalte As Integer
 Dim sShapeName As String, sGelesene As String
 Dim sMA As String, sCheck As String
 Dim oShp As Object, bCheck As Boolean
 Dim sMsgTxt As String
 Set WSh = ThisWorkbook.Sheets("Nachweisdokumentation")
 
'Sicherkeit
 If WSh.Cells(10, "N").Value = "" Then
    sMsgTxt = "Es wurde kein Mitarbeiter ausgewählt!"
    iSpalte = 14
 ElseIf WSh.Cells(10, "O").Value = "" Then
    sMsgTxt = "Es wurde kein Bereich eingetragen!"
    iSpalte = 15
 ElseIf WSh.Cells(10, "P").Value = "" Then
    sMsgTxt = "Es wurde kein Datum eingetragen!"
    iSpalte = 16
 Else
    For Each oShp In WSh.Shapes
     With oShp
      If .Type = 13 Then
        If .Top >= WSh.Range("Q10").Top - 5 _
          And .Left >= WSh.Range("Q10").Left - 5 _
          And .Left < WSh.Range("R10").Left Then
          sShapeName = .Name: Exit For
        End If
      End If
     End With
    Next oShp
    If sShapeName = "" Then
       sMsgTxt = "Die Unterschrift fehlt!"
       iSpalte = 17
    End If
 End If
 If sMsgTxt <> "" Then
   MsgBox sMsgTxt & vbCrLf & "Bitte nachtragen!", vbCritical, "Daten übertragen"
   WSh.Cells(10, iSpalte).Select
   Exit Sub
 End If
  
 Application.ScreenUpdating = False
  
 With ThisWorkbook.Sheets("Nachweise")
  
   iZeile = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
'Ermittle alle gelesenen Dokus
   sMA = WSh.Cells(10, "N").Value
   For iZl = 2 To iZeile - 1
    If .Cells(iZl, "A").Value = sMA Then
      
      For iSpalte = 5 To .UsedRange.Columns.Count Step 2
          If .Cells(iZl, iSpalte).Value = "" Then Exit For
          sGelesene = sGelesene & .Cells(iZl, iSpalte).Value _
              & .Cells(iZl, iSpalte + 1).Value & ","
      Next iSpalte
    
    End If
   Next iZl
   .Unprotect
  
'Uli Bezeichnung und Index mit kopieren
   iSpalte = 5
   For iZl = 10 To 100
     If WSh.Cells(iZl, "C").Value = "" Then Exit For
     sCheck = WSh.Cells(iZl, "C").Value & WSh.Cells(iZl, "K").Value
     If InStr(sGelesene, sCheck & ",") = 0 Then
       .Cells(iZeile, iSpalte + 0).Value = WSh.Cells(iZl, "C").Value
       .Cells(iZeile, iSpalte + 1).Value = WSh.Cells(iZl, "K").Value
       iSpalte = iSpalte + 2     'wenn die Item nacheinander gezeigt werden sollen
       bCheck = True
     End If
Rem       iSpalte = iSpalte + 2  'wenn die Item passend untereinanderstehen sollen
   Next iZl
   If bCheck = True Then
'Texte kopieren und löschen
   .Range("A" & iZeile & ":C" & iZeile).Value = WSh.Range("N10:P10").Value
   WSh.Range("N10:P10").ClearContents
  
'Grafik suchen und kopieren
   On Error Resume Next
   WSh.Shapes.Range(Array(sShapeName)).Copy
  
'Grafik einfügen
    .Select
    .Paste
'Grafik in Zelle einpassen
    Set AC = .Range("$D$" & iZeile)
    If TypeName(Selection) = "Picture" Then
      With Selection.ShapeRange
         .Name = "Unterschrift"
         .LockAspectRatio = True
         If (.Width / AC.Width) < (.Height / AC.Height) Then
            .Height = AC.Height          'Bild höher als breit
         Else
            .Width = AC.Width
         End If
         .Left = AC.Left + ((AC.Width - .Width) \ 2)
         .Top = AC.Top + ((AC.Height - .Height) \ 2)
      End With
    End If
  
'Blatt wieder schützen
   .Range("A1").Select
   .Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
  End If
 End With
 
 
'Bereich und Bild löschen
 WSh.Select
 If bCheck Then ActiveSheet.Shapes.Range(Array(sShapeName)).Delete
  
 Application.ScreenUpdating = True
End Sub

Viele Grüße aus Freigericht
Karl-Heinz

AW: Frage an volti
21.06.2020 07:43:59
Uli
Guten Morgen Karl-Heinz,
die Abfrage Funktionen funktionieren . Jetzt habe ich meine ganzen Testeinträge vom Blatt "Nachweise" gelöscht.
Nun bleibt das Makro hier beim End If hängen. Sucht bestimmt Einträge sind aber keine mehr vorhanden.
Kann gut sein das dies mal passiert. Oder beim beginn einer neuen Datei . Kann man das abschalten ?
Habe das Blatt "Nachweise" so formatiert das man Filtern kann. Eventuell liegt es daran ?
Gruß Uli
'Ermittle alle gelesenen Dokus
sMA = WSh.Cells(10, "N").Value
For iZl = 2 To iZeile - 1
If .Cells(iZl, "A").Value = sMA Then
For iSpalte = 5 To .UsedRange.Columns.Count Step 2
If .Cells(iZl, iSpalte).Value = "" Then Exit For
sGelesene = sGelesene & .Cells(iZl, iSpalte).Value _
& .Cells(iZl, iSpalte + 1).Value & ","
Next iSpalte
End If
Next iZl
AW: Frage an volti
21.06.2020 07:55:01
Uli
HAllo Karl-Heinz,
es funktioniert doch alles. Denke das beim Kopieren vom Code was schief gelaufen ist. Habe die Mappe
noch mal neu angelegt. Und alles läuft.
Jetzt werde ich erstmal schauen wie Du das mit den Message Boxen gemacht hast.
Nochmal besten dank und einen schönen Sonntag
P.S mir fällt bestimmt noch was ein um es zu verfeinern.
Frage an volti
24.06.2020 06:52:15
Uli
Hallo Zusammen, Hallo Karl-Heinz
wäre es möglich den Code so anzupassen das der Aktuellste Eintrag immer oben in der Liste auf
dem Blatt "Nachweise" steht ?
Danke und Gruß Uli
AW: Frage an volti
24.06.2020 11:41:17
volti
Hallo Uli,
schau mal, ob das u.a. erweiterte Makro Deinem Wunsche entspricht:
Option Explicit
Sub Datenkopieren()
'Eingetragene Daten von Nachweisdokumentation zu Nachweise kopieren
 Dim WSh As Worksheet, AC As Range, iZeile As Long
 Dim iZl As Long, iSpalte As Integer
 Dim sShapeName As String, sGelesene As String
 Dim sMA As String, sCheck As String
 Dim oShp As Object, bCheck As Boolean
 Dim sMsgTxt As String
 Set WSh = ThisWorkbook.Sheets("Nachweisdokumentation")
 
'Sicherkeit
 If WSh.Cells(10, "N").Value = "" Then
    sMsgTxt = "Es wurde kein Mitarbeiter ausgewählt!"
    iSpalte = 14
 ElseIf WSh.Cells(10, "O").Value = "" Then
    sMsgTxt = "Es wurde kein Bereich eingetragen!"
    iSpalte = 15
 ElseIf WSh.Cells(10, "P").Value = "" Then
    sMsgTxt = "Es wurde kein Datum eingetragen!"
    iSpalte = 16
 Else
    For Each oShp In WSh.Shapes
     With oShp
      If .Type = 13 Then
        If .Top >= WSh.Range("Q10").Top - 5 _
          And .Left >= WSh.Range("Q10").Left - 5 _
          And .Left < WSh.Range("R10").Left Then
          sShapeName = .Name: Exit For
        End If
      End If
     End With
    Next oShp
    If sShapeName = "" Then
       sMsgTxt = "Die Unterschrift fehlt!"
       iSpalte = 17
    End If
 End If
 If sMsgTxt <> "" Then
   MsgBox sMsgTxt & vbCrLf & "Bitte nachtragen!", vbCritical, "Daten übertragen"
   WSh.Cells(10, iSpalte).Select
   Exit Sub
 End If
  
 Application.ScreenUpdating = False
  
 With ThisWorkbook.Sheets("Nachweise")
  
   iZeile = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
'Ermittle alle gelesenen Dokus
   sMA = WSh.Cells(10, "N").Value
   For iZl = 2 To iZeile - 1
    If .Cells(iZl, "A").Value = sMA Then
      
      For iSpalte = 5 To .UsedRange.Columns.Count Step 2
          If .Cells(iZl, iSpalte).Value = "" Then Exit For
          sGelesene = sGelesene & .Cells(iZl, iSpalte).Value _
              & .Cells(iZl, iSpalte + 1).Value & ","
      Next iSpalte
    
    End If
   Next iZl
   .Unprotect
  
'Uli Bezeichnung und Index mit kopieren
   iSpalte = 5
   For iZl = 10 To 100
     If WSh.Cells(iZl, "C").Value = "" Then Exit For
     sCheck = WSh.Cells(iZl, "C").Value & WSh.Cells(iZl, "K").Value
     If InStr(sGelesene, sCheck & ",") = 0 Then
       .Cells(iZeile, iSpalte + 0).Value = WSh.Cells(iZl, "C").Value
       .Cells(iZeile, iSpalte + 1).Value = WSh.Cells(iZl, "K").Value
       iSpalte = iSpalte + 2     'wenn die Item nacheinander gezeigt werden sollen
       bCheck = True
     End If
Rem       iSpalte = iSpalte + 2  'wenn die Item passend untereinanderstehen sollen
   Next iZl
   If bCheck = True Then
'Texte kopieren und löschen
    .Range("A" & iZeile & ":C" & iZeile).Value = WSh.Range("N10:P10").Value
    WSh.Range("N10:P10").ClearContents
  
'Grafik suchen und kopieren
    On Error Resume Next
    WSh.Shapes.Range(Array(sShapeName)).Copy
  
'Grafik einfügen
    .Select
    .Paste
'Grafik in Zelle einpassen
    Set AC = .Range("$D$" & iZeile)
    If TypeName(Selection) = "Picture" Then
      With Selection.ShapeRange
         .Name = "Unterschrift"
         .LockAspectRatio = True
         If (.Width / AC.Width) < (.Height / AC.Height) Then
            .Height = AC.Height          'Bild höher als breit
         Else
            .Width = AC.Width
         End If
         .Left = AC.Left + ((AC.Width - .Width) \ 2)
         .Top = AC.Top + ((AC.Height - .Height) \ 2)
      End With
    End If
  
'Neuen Eintrag verschieben in erste Zeile
   .Rows("2:" & iZeile).Cut Destination:=.Rows("3:" & (iZeile + 1))
   .Rows(iZeile + 1 & ":" & iZeile + 1).Cut Destination:=.Rows("2:2")
  
'Blatt wieder schützen
   .Range("A1").Select
   .Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
  End If
 End With
 
 
'Bereich und Bild löschen
 WSh.Select
 If bCheck Then ActiveSheet.Shapes.Range(Array(sShapeName)).Delete
  
 Application.ScreenUpdating = True
End Sub

Viele Grüße aus Freigericht
Karl-Heinz

AW: Frage an volti
24.06.2020 13:19:16
Uli
Hallo Karl-Heinz,das Makro listet nun den neusten Eintrag oben ein. Nur wenn ich bei dem gleichen Mitarbeiter eine Indexänderung eingebe kopiert er die Unterschrift nicht mit .
Danke und Gruß Uli
AW: Frage an volti
24.06.2020 14:10:21
volti
Hallo Uli,
bei mir funktioniert das einwandfrei.
Wenn das öfter vorkommen sollte, müsste doch der Select eingesetzt werden
WSh.Shapes.Range(Array(sShapeName)).Copy =>
WSh.Shapes.Range(Array(sShapeName)).Select
Selection.Copy
oder wie Klaus vorschlug, das ganze Feld mit Cut übertragen. Dann müssten aber auch die Formatierungen wieder hergestellt werden, die ja mit übertragen werden. Dafür könnte dann ggf. die Ausrichtung der Grafik an der Zelle entfallen.
VG KH
AW: Frage an volti
25.06.2020 12:21:15
Uli
Hallo Karl-Heinz,
habe den Fehler gefunden . Auf dem Blatt " Nachweise" war in Zelle A1 die Überschrift weg. Dort stand plötzlich der Name des Makro. Jetzt läuft es anscheinend.
Danke und Gruß Uli
Frage an volti
29.06.2020 11:28:49
Uli
Hallo Karl-Heinz,
ist ein Problem aufgefallen.
Wenn ein Mitarbeiter einen Neuen Index Unterschreibt , kopiert Excel nicht die neue Unterschrift mit , sondern kopiert die Unterschrift mit die als letzes von dem Mitarbeiter in dem Blatt " Nachweise" gespeichert wurde.
Kannst Du da eine Lösung finden?
Danke und Gruß Uli
AW: Makro kopiert, aber der Feinschliff
18.06.2020 14:19:26
Klaus
Hallo Karl-Heinz,
nett wie du das "Bild"-Problem gelöst hast. Aber warum so viele Select? Ist das einer der Fälle wo es nicht ohne geht?
LG,
Klaus
AW: Makro kopiert, aber der Feinschliff
18.06.2020 14:34:39
volti
Hallo Klaus,
zunächst mal Respekt für Deine elegante, kurze Lösung. Werde ich künftig für solche Fälle auch so machen.
Ohne Selektierung will es mir das Bild nicht kopieren. Das hatte ich früher auch schon festgestellt, dass ich keine Shapes kopieren kann.
Das hier wäre eigentlich vorgesehen....
Sub dfgdgfd()
 Dim WSh As Worksheet
 Set WSh = ThisWorkbook.Sheets("Nachweisdokumentation")
 WSh.Shapes.Range(Array("Unterschrift")).Copy
 
 'Unterstützt diese Eigenschaft nicht
End Sub

Will aber nicht. Irgendeine Erklärung.
viele Grüße
Karl-Heinz
AW: Makro kopiert, aber der Feinschliff
18.06.2020 14:45:18
Klaus
Hi,
leider keine Erklärung. Ich tue mich selbst immer schwer damit, irgendwelche Shapes oder Diagramme korrekt anzusprechen und habe auch schon mal einen Makrorekordercode mit select drin gelassen, weil es absolut nicht ohne gehen wollte.
Total lieb dass du meine Lösung mit STRG+X als elegant bezeichnet hast, ich hätte es eher "quick and dirty" genannt :-)
LG,
Klaus M.
AW: Makro kopiert, aber der Feinschliff
18.06.2020 15:06:08
Uli
Hallo Zusammen,
meine Freude war wohl zu früh. Sorry
Das Bild wird leider nicht in die Zelle richtig eingefügt.
Kann sich das nochmal jemand anschauen ?
Danke und Gruß Uli
AW: Makro kopiert, aber der Feinschliff
18.06.2020 15:45:23
volti
Hallo Uli,
schau Dir meinen Post von 15:42 Uhr mal an. Den habe ich falsch eingebäumelt.
VG KH

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige