Thema Datum  Von Nutzer Rating
Antwort
Rot VBA-Code zerschießt mir die Formeln - Warum?
22.12.2016 13:43:13 Johannes
NotSolved
22.12.2016 16:35:57 Mackie
NotSolved
22.12.2016 17:26:40 Crazy Tom
NotSolved
22.12.2016 18:33:01 Johannes
NotSolved
22.12.2016 17:40:29 Holger
*****
Solved
22.12.2016 18:30:33 Johannes
NotSolved
22.12.2016 19:55:18 Gast82571
NotSolved
23.12.2016 10:18:05 Johannes
NotSolved
23.12.2016 10:56:04 Johannes
NotSolved
23.12.2016 11:43:53 Gast54784
NotSolved

Ansicht des Beitrags:
Von:
Johannes
Datum:
22.12.2016 13:43:13
Views:
1281
Rating: Antwort:
  Ja
Thema:
VBA-Code zerschießt mir die Formeln - Warum?

Hallo allerseit,

letzte Woche wurde mir bereits mit einem Code hier im Forum geholfen (http://www.vba-forum.de/Forum/View.aspx?ziel=32819-Mein_Code_ist_zu_kompliziert_bzw._zu_lang). Vielen Dank an dieser Stelle nochmal für die schnelle Hilfe!

Jetzt habe ich jedoch bemerkt, dass er einige Nachteile mit sich bringt. Er Überträgt bestimmte Werte von einem Tabellenblatt in ein anderes. Dabei "zerschießt" es mir Formeln im Zieltabellenblatt (Tabelle1), obwohl diese nicht überschrieben werden sollte. Anstelle der ursprünglichen Formeln sind nun jedoch Werte angegeben (Betroffen sind die Zellen der Spalte K, und die Zeilen 13, 16, 18 und 19 in Tabelle 1.

Wie kann ich das verhindern?

Kurze Hintergrundinfos zur Mappe an sich, welche ich aus Datenschutzgründen leider nicht veröffentlichen darf:

Die Tabelle 1 umfasst insgesamt ca 260 Spalten und 460 Zeilen. In den oberen ca, 17 Zeilen der Tabelle 1 Tabellen sind in den Spalten 13 Bis 263 Mitarbeiter mit bestimmten Daten vermerkt, in den Spalten 3 Bis 10 sind projektdaten von 400 Projekten in den Zeilen 52-455 vermerkt. Die Datei dient der Zuordnung von mitarbeiter-arbeitszeit zu den jeweiligen Projekten. Diese sind in dem Bereich Zelle(M52:JB455) jeweils vermerkt oder eben auch leer. Die Tabelle 2 ist gleich aufgebaut aber umfasst nur eine Auswahl der Projekte und Mitarbeiter nach einem bestimmten Kriterium (sozusagen Abteilung). Die Angaben zur Arbeitszeit der einzelnen Mitarbeiter in den jeweiligen Projekten in tabelle2 sollen deshalb geändert weden können und anschließend mit dem Code in Tabelle1 "einsortiert" werden können. Es kann theoretisch immer nur ein Treffer pro Projekt/Mitarbeiter vorkommen, da alle projejte und Mitarbeiter jeweils nur ein mal vorkommen.

Ich hoffe das war halbwegs verständlich!:)

Anbei der Code:



 

Private Sub CommandButton1_Click()

If ActiveSheet.Range("M52", "JB251").NumberFormat <> "#," Then

MsgBox "Die Daten müssen in T€ angegeben sein, um ins Interface übertragen werden zu können! Bitte schalten Sie die Anzeige daher um."
 
 Unload Me
 
Else

Dim tab1
Dim tab2
Dim lspalte As Long     'Spalte in Tabelle 2
Dim pspalte As Long     'Spalte in Tabelle 1
Dim azeile As Long      'Zeile in Tabelle 2
Dim bzeile As Long      'Zeile in Tabelle 1
Dim spaltenanfang As Long 'ist der Anfang der Spalten hier Spalte 13
Dim zeilenanfang As Long  'ist der Anfang der Zeilen hier Zeile 52
Dim zeilenende As Long
Dim spaltenende As Long
 
'erstmal die Bildschirmaktualisierung ausschalten , für mehr Rechenleistung
Application.ScreenUpdating = False
 
'allgemeine Werte
spaltenanfang = 13
spaltenende = 263
zeilenanfang = 52
zeilenende = 251
 
'die Eintragungen in den Zwischenspeicher
tab1 = Tabelle1.Range(Tabelle1.Cells(1, 1), Tabelle1.Cells(zeilenende, spaltenende)) '263
tab2 = Tabelle2.Range(Tabelle2.Cells(1, 1), Tabelle2.Cells(zeilenende, spaltenende))
 
For pspalte = spaltenanfang To spaltenende
'durch alle Spalten in Tabelle 1 gehen, in Spalte 13 startn
    For lspalte = spaltenanfang To spaltenende
    'durch alle Spalten in Tabelle 2 gehen
        If tab2(5, lspalte) = tab1(5, pspalte) Then
        'Mitarbeiter wurde gefunden, der kommt später nicht nochmal, also nach dem Abarbeiten die Schleife in Tabelle 2 verlassen
            'jetzt bei dem Mitarbeiter die ersten Werte kopieren, könnte man noch in eine Schleife auslagern
            tab1(5, pspalte) = tab2(5, lspalte)
            tab1(7, pspalte) = tab2(7, lspalte)
            tab1(8, pspalte) = tab2(8, lspalte)
            tab1(9, pspalte) = tab2(9, lspalte)
            tab1(10, pspalte) = tab2(10, lspalte)
            tab1(11, pspalte) = tab2(11, lspalte)
            tab1(14, pspalte) = tab2(14, lspalte)
            tab1(15, pspalte) = tab2(15, lspalte)
            tab1(17, pspalte) = tab2(17, lspalte)
             
            For bzeile = zeilenanfang To zeilenende
            'jetzt noch von Zeile 52 bis 251 die Zeilen durchgehen und in Spalte 5 die Werte vergleichen, in Tabelle 1 starten
                For azeile = zeilenanfang To zeilenende
                'prüfen ob die Eintragungen identisch in der Zeile sind
                    If tab2(azeile, 5) = tab1(bzeile, 5) And tab2(azeile, 7) = tab1(bzeile, 7) Then
                        tab1(bzeile, pspalte) = tab2(azeile, lspalte)
                    End If
                Next azeile
            Next bzeile
 
            Exit For 'beendet die Schleife und geht in die nächse pspalte
        End If
    Next lspalte
Next pspalte
 
'die geänderten Eintragungen zurück
Tabelle1.Range(Tabelle1.Cells(1, 1), Tabelle1.Cells(251, 156)) = tab1
Application.ScreenUpdating = True

MsgBox "Die Änderungen wurden erfolgreich ins Interface übertragen!"
End If
End Sub

Private Sub CommandButton2_Click()
Unload Me
End Sub

Private Sub Label1_Click()

End Sub


Vielen Dank für eure Hilfe!


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
Rot VBA-Code zerschießt mir die Formeln - Warum?
22.12.2016 13:43:13 Johannes
NotSolved
22.12.2016 16:35:57 Mackie
NotSolved
22.12.2016 17:26:40 Crazy Tom
NotSolved
22.12.2016 18:33:01 Johannes
NotSolved
22.12.2016 17:40:29 Holger
*****
Solved
22.12.2016 18:30:33 Johannes
NotSolved
22.12.2016 19:55:18 Gast82571
NotSolved
23.12.2016 10:18:05 Johannes
NotSolved
23.12.2016 10:56:04 Johannes
NotSolved
23.12.2016 11:43:53 Gast54784
NotSolved