Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

Daten kopieren

Betrifft: Daten kopieren von: Snewi
Geschrieben am: 07.11.2012 16:04:19

Hallo ich kopiere Werte mit folgendem Syntax:

Sub kopieren_ELO_Stoer()
Dim rngC As Range
Dim lngZ As Long

lngZ = 54
Application.ScreenUpdating = False
    Sheets("Bericht").Select
    Range("C54:L83").Select
    Selection.ClearContents
    With Sheets("Stoer")
      For Each rngC In .Range(.Cells(2, 1), .Cells(Rows.Count, 1).End(xlUp))
         If rngC.Offset(, 1) > 1 Then
            rngC.Resize(, 4).Copy
            Sheets("Bericht").Cells(lngZ, 3).PasteSpecial xlValues
            lngZ = lngZ + 1
         End If
      Next
      Application.CutCopyMode = False 'Kopierrahmen deaktivieren
   End With
   
Application.ScreenUpdating = True
End Sub
Nun möchte ich gerne die Spalten 1 bis 4 in verschiedenen Spalten zurückgeben!
z.B. Spalte 1 soll in Spalte 3 zurückgegeben werden, 2 in 4 und 3 in 9 und 4 in 10!
Jetzt bekomme ich ja direkt die Daten in Spalte 1 bis 4 ausgegeben!

Wie mache ich das?

Gruß

  

Betrifft: AW: Daten kopieren von: Snewi
Geschrieben am: 07.11.2012 22:21:57

Hier mein Beispiel:

https://www.herber.de/bbs/user/82520.xlsm


ich möchte die Dauer und die ID einfach weiter nach rechts! Wie mache ich das?

Gruß


  

Betrifft: AW: Daten kopieren von: fcs
Geschrieben am: 07.11.2012 23:43:05

Hallo Snewi,

dann muss die Zellen/Zellbereiche je Zeile in mehreren Schritten kopieren.

Gruß
Franz

Sub kopieren_ELO_Stoer()
    Dim rngC As Range
    Dim lngZ As Long
    
    lngZ = 54
    Application.ScreenUpdating = False
        Sheets("Bericht").Select
        Range("C54:L83").Select
        Selection.ClearContents
        With Sheets("Stoer")
          For Each rngC In .Range(.Cells(2, 1), .Cells(Rows.Count, 1).End(xlUp))
             
             If rngC.Offset(, 1) > 1 Then
                .Range(rngC, rngC.Offset(0, 1)).Copy
                Sheets("Bericht").Cells(lngZ, 3).PasteSpecial xlValues
                
                .Range(rngC.Offset(0, 2), rngC.Offset(0, 3)).Copy
                Sheets("Bericht").Cells(lngZ, 11).PasteSpecial xlValues
                
                lngZ = lngZ + 1
             End If
          Next
          Application.CutCopyMode = False 'Kopierrahmen deaktivieren
       End With
       
    Application.ScreenUpdating = True
End Sub



  

Betrifft: AW: Daten kopieren von: Snewi
Geschrieben am: 08.11.2012 10:52:10

Ein kleines Problem gibt es noch!
Es funktioniert soweit alles gut aber wenn ich die Sub über einen Button anstosse werden die Daten erst beim zweiten Mal Button drücken aktualisiert...mhhh kann das sein?

Was muss ich tun wenn ich die Sub anstossen möchte, wenn sich der Wert in der Zelle K50 bei mir ändert?

Gruß


  

Betrifft: Rückfrage,....? von: Matze,Matthias
Geschrieben am: 08.11.2012 11:12:41

Hallo Snewi,...

ersetze Next ; durch Next rngC
Matze


  

Betrifft: AW: Rückfrage,....? von: Snewi
Geschrieben am: 08.11.2012 11:43:22

Das klappt schonmal :-)
Jetzt würde ich gerne die Sub auslösen, wenn sich der Wert in K50 ändert! wie mache ich das?

Gruß


  

Betrifft: Hoffe ich hab das richtig gemacht,... von: Matze,Matthias
Geschrieben am: 08.11.2012 12:02:28

im VBA Editor unter das Blatt Stoer einbinden

Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, Range("K50")) Is Nothing Then
   Call kopieren_ELO_Stoer
End If
End Sub
Matze


  

Betrifft: AW: Hoffe ich hab das richtig gemacht,... von: Snewi
Geschrieben am: 08.11.2012 12:21:10

Läuft super :-)

Ich habe hier in der Tabelle schon was:

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
Dim RaBereich As Range
    Set RaBereich = Range("C3")
        If Not Intersect(Range(Target.Address), RaBereich) Is Nothing Then frm_date.Show
    Set RaBereich = Nothing
End Sub
könnte man das auch beides zusammenfassen? Oder macht man das nicht?

Gruß


  

Betrifft: AW: Hoffe ich hab das richtig gemacht,... von: Matze,Matthias
Geschrieben am: 08.11.2012 12:28:50

Hallo Snewi,
wenn in dem "RABereich" etwas geändert wird solltest du das Change Ereignis nehmen.

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("C3")) Is Nothing Then frm_date.Show
end if
If Not Intersect(Target, Range("K50")) Is Nothing Then
Call kopieren_ELO_Stoer
End If
End Sub



  

Betrifft: AW: Daten kopieren von: Snewi
Geschrieben am: 08.11.2012 12:52:28

Eine Frage gibt es noch!
Wie kann ich die Werte in zwei verbundenen Zellen zurückgeben?

z.B.

Range(rngC.Offset(0, 2), rngC.Offset(0, 2)).Copy
                     Sheets("Bericht").Cells(lngZ, 11).PasteSpecial xlValues
11 ist hier aber eine verbundene Zelle aus 11 und 12 weil der Datensatz nicht nur in 11 passt!

gruß


  

Betrifft: AW: Daten kopieren von: Matze,Matthias
Geschrieben am: 08.11.2012 12:58:35

Hallo Snewi,
nur mal so am Rande erwähnt, du änderst als etwas an der Mappe, sodas wir hier ständig von dir gefordert werden, stell doch mal die Mappe ins forum, oder ist die wieder eine von vielen die "geheim" ist.
Interresant ist der Aufbau, damit wir eine Bezug zum ganzen bekommen.

Ich bin jetzt leider Unterwegs, aber auch weiter Foremteilnehmer würden sowas begrüßen.
Matze


  

Betrifft: AW: Daten kopieren von: Snewi
Geschrieben am: 08.11.2012 13:43:10

Hatte Sie eigentlich oben schonmal online gesetzt :-)

https://www.herber.de/bbs/user/82527.xlsm


Gruß


  

Betrifft: abgeänderte Datei von: Matze,Matthias
Geschrieben am: 08.11.2012 23:59:37

https://www.herber.de/bbs/user/82538.xlsm


  

Betrifft: OT: select AW: Daten kopieren von: Klaus M.vdT.
Geschrieben am: 08.11.2012 08:26:04

Hallo Snewi

wollten wir nicht auf select's im Code verzichten?
Statt

      Sheets("Bericht").Select
      Range("C54:L83").Select
      Selection.ClearContents

lieber
      Sheets("Bericht").Range("C54:L83").ClearContents
Grüße,
Klaus M.vdT.


  

Betrifft: OT: select AW: Daten kopieren von: Snewi
Geschrieben am: 08.11.2012 08:54:25

stimmt hatte es auch schon geändert gehabt :-)

Sheets("Bericht").Range("C54:L" & Rows.Count).ClearContents

Gruß und danke für die Erinnerung :-)


  

Betrifft: rows.count ist hier aber nicht richtig ... von: Klaus M.vdT.
Geschrieben am: 08.11.2012 12:40:00

Hi,
rows.count ergibt aber (fast) immer 1048576 (ab xl2007) oder 65653 (bis xl2003). Kannst du ja mal ausprobieren (mit MsgBox rows.count zB).
um die letzte Zelle festzustellen, nimm Cells(Rows.Count,1).end(xlup).Row

Also in deinem Beispiel:

Sheets("Bericht").Range("C54:L" & Sheets("Bericht").Cells(Rows.Count,1).end(xlup).Row).ClearContents
Oder, etwas übersichtlicher
Sub SoUndSo()
Dim lRow as long
[...]
lRow = Sheets("Bericht").Cells(Rows.Count,1).end(xlup).Row
Sheets("Bericht").Range("C54:L" & lRow).ClearContents
[...]
End Sub

das zweite Beispiel ist zwar länger, hat aber den Vorteil dass du die Variable lRow öfters verwenden kannst.

Grüße,
Klaus M.vdT.


  

Betrifft: AW: rows.count ist hier aber nicht richtig ... von: Snewi
Geschrieben am: 08.11.2012 12:43:33

Du hast recht! Danke!
Es lief trotzdem ziemlich schnell!

Gruß


  

Betrifft: AW: rows.count ist hier aber nicht richtig ... von: Snewi
Geschrieben am: 08.11.2012 12:45:43

Wenn ich das mache kommt der Fehler:

"Kann Teile einer verbundenen Zelle nicht ändern!"

gruß


  

Betrifft: AW: rows.count ist hier aber nicht richtig ... von: Matze,Matthias
Geschrieben am: 08.11.2012 12:59:20

schau dir mal meine Beitrag etwas weiter oben an!


  

Betrifft: verbundene Zellen ... von: Klaus M.vdT.
Geschrieben am: 08.11.2012 13:46:12

Hallo Snewi,

verzichte auf verbundene Zellen. Immer. Auch bei Überschriften. Die machen mehr ärger als sie Nutzen bringen. Zellen verbinden ist noch schlimmer als .select zu nutzen :-)

Du wirst jetzt sagen "ich brauch aber verbundene Zellen" ... die Antwort darauf ist 1) nein, wie hättest du die Tabelle denn aufgebaut wenn Excel diese funktion NICHT hätte? Bau die Tabelle so auf. und 2) Zellen können horizontal "über Markierung zentriert" ausgerichtet werden, ohne verbunden zu sein. Schau mal ins Tabellenformatierungs-Menü. Vertikal geht das nicht, aber wenn eine Tabelle vertikal verbundene Zellen beinhalten möchte, ist der Tabellenaufbau in seiner Grundidee murks.

Grüße,
Klaus M.vdT.


  

Betrifft: AW: verbundene Zellen ... von: Snewi
Geschrieben am: 08.11.2012 13:53:08

Juhu habs gefunden über Auswahl zentrieren, dann kann ich mir ja echt den Scheiss mit den verbundenen Zellen sparen :-)
Super wie immer spitze Klaus :-)

Gruß


  

Betrifft: Danke für die Rückmeldung! owT von: Klaus M.vdT.
Geschrieben am: 08.11.2012 14:22:31

.


  

Betrifft: "...schlimmer als .select zu nutzen", ... von: Luc:-?
Geschrieben am: 09.11.2012 02:02:32

…so'n Quatsch, Klaus;
Select macht ein Pgm nur langsam, VerbundZellen liegen auf einer ganz anderen „Vglsebene“! Da wären permanent ausgeblendete Spalten/Zeilen innerhalb von Tabellen viel schlimmer. Außerdem kann man auch mal über den xlTellerrand hinaus schauen. In anderer KalkSoftware ist das Feature viel universeller organisiert. Nur, weil MS nicht willens ist, an seinem Konzept etwas zu ändern, muss man sich ja nicht auch noch selbst indoktrinieren!
Will jetzt aber keine neue Diskussion dazu lostreten, kannst dich gern im Archiv über die letzte Diskussion zum Thema informieren.
Übrigens, im Interesse einer drucktechnisch modernen und eleganten Tabellengestaltung sind senkrecht verbundene Zellen mitunter unverzichtbar. Warum auch sollte Xl etwas nicht können, was sogar HTML kann?
Nebenbei, beim Einkopieren von HTML-Tabellen in Xl können auch VerbundZellen entstehen. Man muss solcher Realität Rechnung tragen und sie nicht per „Kopf-im-Sand“-Isolationismus zu vermeiden suchen. ;->
Gruß Luc :-?


 

Beiträge aus den Excel-Beispielen zum Thema "Daten kopieren"