Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1728to1732
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

Tabellenspalten kopieren

Tabellenspalten kopieren
19.12.2019 06:33:45
Antonio
Hallo Gemeinde,
ich versuche aus eine fremde Tabelle (Tabelle1 - Quelle) 6 Spalten in ("Chord - Arpeggio - Ziel) zu kopieren.
Habe folgende Code hier im Forum gefunde, nach meine Bedurfnisse angepasst, aber es geschiet nichts.
Sub AkkordenLaden()
Application.ScreenUpdating = False
Dim wb1 As Workbook
Dim wb1pfad As String
Dim wb1name As String
Dim wb2 As Workbook
Dim wb2pfad As String
Dim wb2name As String
Dim wb1ws1 As Worksheet
Dim wb2ws1 As Worksheet
Dim bwbopen As Boolean
On Error GoTo Weiter
wb1pfad = wb2ws1("Chord - Arpeggio").Range("DB2").Value       ' Datenarbeitsmappepfad
wb1name = wb2ws1("Chord - Arpeggio").Range("DB3" & "DB5").Value '& wb2ws1("Chord -  _
Arpeggio").Range("DB5").Value       ' Datenarbeitsmappename
wb2pfad = "C:\Users\a.mazza\Desktop\PS\"        ' Zielarbeitsmappepfad
wb2name = "GUITAR MAP 1.xlsm"                   ' Zielarbeitsmappename
bwbopen = WorkbookIsOpen(wb1name)
If bwbopen = False Then
Workbooks.Open (wb1pfad & wb1name)
Else
End If
Set wb1 = Workbooks(wb1name)
Set wb2 = Workbooks(wb2name)
Set wb1ws1 = wb1ws1("Tabelle1")     ' Datenarbeitsmappentabelle
Set wb2ws1 = wb2ws1("Chord - Arpeggio")     ' Zielarbeitsmappentabelle
wb2ws1("Chord - Arpeggio").Range("Z1:AE").ClearContents
wb1ws1("Tabelle1").UsedRange.Copy wb2ws1("Chord - Arpeggio").Range(" _
Z1")
'                            wb2ws1.Cells.PasteSpecial (xlPasteAll)
Application.CutCopyMode = False
If bwbopen = False Then
wb1.Activate
ActiveWorkbook.Close
Else
End If
Range("A1").Select
Weiter:
On Error Resume Next
bwbopen = WorkbookIsOpen(wb1name)
If bwbopen = True Then
wb1.Activate
ActiveWorkbook.Close
Else
End If
Application.ScreenUpdating = False
' ### Hier kommt dein weiterführender Code
End Sub
Function WorkbookIsOpen(WBName As String) As Boolean
On Error Resume Next
WorkbookIsOpen = Not Workbooks(WBName) Is Nothing
End Function
Habe den Code oft kontrolliert finde aber nichts ungewohnliches.
Vielleicht ist jergendwo ein Fehler den ich nicht merke.
Ich bitte um ein wenig Hilfe.
Vielen Dank im Voraus
Antonio

27
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Tabellenspalten kopieren
19.12.2019 08:30:36
Piet
Hallo Antonio
schau die deinen Code bitte mal genau an, da ist in der Set Anweisung was Zuviel!
Set wb1ws1 = wb1ws1("Tabelle1") ' Datenarbeitsmappentabelle
Set wb2ws1 = wb2ws1("Chord - Arpeggio") ' Zielarbeitsmappentabelle
Lösche den dick markierten Teil bitte mal weg, un schau ob es dann klappt ....
Frohe Weihnachten und ein gesundes neues Jahr ...
mfg Piet
AW: Tabellenspalten kopieren
19.12.2019 08:40:52
Antonio
Hallo Piet, danke für die Rückmeldung.
Erledigt.
Leider unverändert.
Antonio
AW: Alles bereinigt
19.12.2019 09:22:45
Antonio
Hallo,
Sub AkkordenLaden()
Application.ScreenUpdating = False
Dim wbQ As Workbook         ' Quellearbeitsmappe
Dim wbQpfad As String       ' Quellearbeitsmappenpfad
Dim wbQname As String       ' Quellearbeitsmappename
Dim wbZ As Workbook         ' Zielarbeitsmappe
Dim wbZpfad As String       ' Zielarbeitsmappenpfad
Dim wbZname As String       ' Zielarbeitsmappenpfad
Dim wbQws1 As Worksheet     ' Quellearbeitsmappentabelle
Dim wbZws1 As Worksheet     ' Zielarbeitsmappentabelle
Dim bwbopen As Boolean
On Error GoTo Weiter
wbQpfad = wbZws1("Chord - Arpeggio").Cell(1, 106).Text & wbZws1("Chord - Arpeggio").Cell(2,  _
106).Text
wbQname = wbZws1("Chord - Arpeggio").Cell(3, 106).Text
'   wbQpfad = wbZws1("Chord - Arpeggio").Range("DB1").Value & wbZws1("Chord - Arpeggio").Range(" _
DB2").Value      ' Datenarbeitsmappepfad
'   wbQname = wbZws1("Chord - Arpeggio").Range("DB3").Value '& wb2ws1("Chord - Arpeggio").Range( _
"DB3").Value       ' Datenarbeitsmappename
wbZpfad = "C:\Users\a.mazza\Desktop\PS\"        ' Zielarbeitsmappepfad
wbZname = "GUITAR MAP 1.xlsm"                   ' Zielarbeitsmappename
bwbopen = WorkbookIsOpen(wbQname)
If bwbopen = False Then
Workbooks.Open (wbQpfad & wbQname)
Else
End If
Set wbQ = Workbooks(wbQname)
Set wbZ = Workbooks(wbZname)
Set wbQws1 = wbQ("Tabelle1")            ' Datenarbeitsmappentabelle
Set wbZws1 = wbZ("Chord - Arpeggio")     ' Zielarbeitsmappentabelle
wbZws1.Range("Z1:AE").ClearContents
wbQws1.UsedRange.Copy wbZws1.Range("Z1")
'   wb2ws1.Cells.PasteSpecial (xlPasteAll)
Application.CutCopyMode = False
If bwbopen = False Then
wbQ.Activate
ActiveWorkbook.Close
Else
End If
Range("A1").Select
Weiter:
On Error Resume Next
bwbopen = WorkbookIsOpen(wbQname)
If bwbopen = True Then
wbQ.Activate
ActiveWorkbook.Close
Else
End If
Application.ScreenUpdating = False
' ### Hier kommt dein weiterführender Code
End Sub
Function WorkbookIsOpen(WBName As String) As Boolean
On Error Resume Next
WorkbookIsOpen = Not Workbooks(WBName) Is Nothing
End Function

Habe alles deutlich auskommentiert wegen Übersicht.
Habe auch versucht den Pfad und name aufzurufen mit "Cell" und nicht mit "Range".
NICHTS, es bewegt sichts, kein Fehler, keine Änderung, kein pups gar nichts.
Ich kann den Code einigermaßen nachvollziehen fehlt mir aber nichts auf.
Und ich denke der macht genau was ich brauche, nähmlich Spalten von eine fremde Tabelle in die Aktive Tabelle zu kopieren.
Bitte nach wie vor um Unterstützung.
Antonio
Anzeige
AW: Weiter Hilfe bgesucht
19.12.2019 09:37:02
Antonio
:-)
AW: Weiter Hilfe bgesucht
19.12.2019 09:43:18
Antonio
Ein Fehler habe ich gefunden, wenn man von Fehler reden kann:
  wbQpfad = wbZws1("Chord - Arpeggio").Cell(1, 106).Text & wbZws1("Chord - Arpeggio").Cell(2,  _
106).Text
wbQname = wbZws1("Chord - Arpeggio").Cell(3, 106).Text
wbZpfad = "C:\Users\a.mazza\Desktop\PS\"        ' Zielarbeitsmappepfad
wbZname = "GUITAR MAP 1.xlsm"                   ' Zielarbeitsmappename
bwbopen = WorkbookIsOpen(wbQname)
If bwbopen = False Then
Workbooks.Open (wbQpfad & wbQname)

Nach Punkt setzen:
wbQpfad und wbQname sind leer.
Die Pfad und Name Angabe stimmen.
Antonio
Anzeige
AW: Weiter Hilfe bgesucht
19.12.2019 10:02:16
Werner
Hallo,
sorry, aber das Ding ist ja völlig wirr.
Vorab mal ein paar Fragen:
1. was steht exakt im Zielblatt in Zelle DB2
2. was steht exakt im Zielblatt in Zelle DB3
3. was steht exakt im Zielblatt in Zelle DB5
Gruß Werner
AW: Weiter Hilfe bgesucht
19.12.2019 12:19:11
Antonio
Servus Werner,
DB2 -> Pfad
DB3 -> Ordner
DB5 -> Dateiname
LG
Antonio


AW: Weiter Hilfe bgesucht
19.12.2019 12:21:58
Werner
Hallo,
könntest du die Frage bitte beantworten.
Ich will wissen, was dort in den Zellen steht und nicht dass das der Pfad oder Dateiname ist.
Gruß Werner
Anzeige
AW: Weiter Hilfe bgesucht
19.12.2019 10:02:58
peterk
Hallo
Schon Deine 2. Zeile ist Unsinn

wbQpfad = wbZws1("Chord - Arpeggio").Cell(1, 106).Text & wbZws1("Chord - Arpeggio").Cell(2,  _
106).Text
wbZws1 ist zwar definert aber keinem Worksheet zugewiesen! Da Du eine "On Error" Sprungmarke gesetzt hast, passiert gar nichts. Sei sparsam mit "On Error", am Besten wird es gar nicht benutzt, ausser es ist nicht anders möglich! z.b. Das Überprüfen ob ein Workbook offen ist könnte auch so aussehen (ohne "On Error")

Function WorkbookIsOpen(WBName As String) As Boolean
Dim Wb As Workbook
WorkbookIsOpen = False
For Each Wb In Application.Workbooks
If Wb.Name = WBName Then
WorkbookIsOpen = True
Exit For
End If
Next
End Function
Alle "On Error" müssen raus, dann siehst Du Deine Fehler sofort
Peter
Anzeige
AW: Weiter Hilfe bgesucht
19.12.2019 12:22:37
Antonio
Danke Peter,
bin dabei umzustrukturieren.
LG
Antonio
AW: Tabelle kopieren
19.12.2019 12:53:43
Antonio
Habe den Code Übersichtlicher gemacht.
Danke Peter für dein Tipp.
Den Code habe ich auch neu aufgebaut soweit ich konnte.
Sub AkkordenLaden()
Application.ScreenUpdating = False
Dim PfadQ As String         ' Quellearbeitsmappenpfad
Dim DateinameQ As String     ' Quellearbeitsmappename
Dim PfadZ As String         ' Zielarbeitsmappenpfad
Dim DateinameZ As String     ' Zielarbeitsmappenpfad
Dim wksQ As Worksheet       ' Quellearbeitsmappentabelle
Dim wksZ As Worksheet       ' Zielarbeitsmappentabelle
Dim bwbopen As Boolean
With wksZ
PfadQ = wksZ.Range("DB1").Value & wksZ.Range("DB2").Value
DateinameQ = wksZ.Range("DB3").Value
End With
PfadZ = "C:\Users\a.mazza\Desktop\PS\"
DateinameZ = "GUITAR MAP 1.xlsm"
'    Set wbQ = Workbooks
'    Set wbZ = Workbooks
Set wksQ = Worksheets("Tabelle1")
Set wksZ = Worksheets("Chord - Arpeggio")
bwbopen = WorkbookIsOpen(DateinameQ)
If bwbopen = False Then
Workbooks.Open (PfadQ & DateinameQ)
Else
End If
wksZ.Range("Z1:AE").ClearContents
wksQ.UsedRange.Copy wksZ.Range("Z1")
'   wb2ws1.Cells.PasteSpecial (xlPasteAll)
Application.CutCopyMode = False
If bwbopen = False Then
wksQ.Activate
ActiveWorkbook.Close
Else
End If
Range("A1").Select
bwbopen = WorkbookIsOpen(DateinameQ)
If bwbopen = True Then
wksQ.Activate
ActiveWorkbook.Close
Else
End If
Application.ScreenUpdating = False
' ### Hier kommt dein weiterführender Code
End Sub
an dieser Stelle: Laufzeitfehler 91
PfadQ = wksZ.Range("DB1").Value & wksZ.Range("DB2").Value
Ich hoffe es besser gemacht zu haben und mit ein wenig Hilfe es zum laufen zu bringen.
Vielen Dank im Voraus
Antonio
Anzeige
Frage von Werner beantworten !
19.12.2019 13:01:26
Werner
..ist das so schwer ?
In DB1 steht was ?
in DB2 steht was ?
AW: Frage von Werner beantworten !
19.12.2019 13:07:41
Werner
Sorry......
hier ist der Abschnitt:
Userbild
Antonio
AW: Frage von Werner beantworten !
19.12.2019 13:30:09
Werner
Hallo,
und was bitte willst du mit der Laufwerksbezeichnung in DB2?
Option Explicit
Sub AkkordenLaden()
Dim strQuellPfad As String, strQuelldatei As String
Dim wbQuelle As Workbook, wsQuelle As Worksheet
Dim wbZiel As Workbook, wsZiel As Worksheet
Dim bwbopen As Boolean
Application.ScreenUpdating = False
Set wsZiel = ThisWorkbook.Worksheets("Chord - Arpeggio")
With wsZiel
strQuellPfad = IIf(Right(.Range("DB1"), 1)  "\", .Range("DB1") & "\", .Range("DB1"))
strQuelldatei = IIf(Right(.Range("DB3"), 5)  ".xlsx", .Range("DB3") _
& ".xlsx", .Range("DB3"))
End With
bwbopen = WorkbookIsOpen(strQuelldatei)
If Not bwbopen Then
Set wbQuelle = Workbooks.Open(strQuellPfad & strQuelldatei)
Else
Set wbQuelle = Workbooks(strQuelldatei)
End If
Set wsQuelle = wbQuelle.Worksheets("Tabelle1")
wsZiel.Range("Z1:AE1000").ClearContents 'Bereich anpassen
wsQuelle.UsedRange.Copy wsZiel.Range("Z1")
wbQuelle.Close False
Set wsZiel = Nothing: Set wbQuelle = Nothing: Set wsQuelle = Nothing
End Sub
Gruß Werner
Anzeige
AW: Beantwortet?
19.12.2019 13:40:29
Antonio

und was bitte willst du mit der Laufwerksbezeichnung in DB2?
es ist nicht die Laufwerksbezeichnung sondern ein Ordner wo die:
C\ -> C Akkorden
D\ -> D Akkorden
usw.
Und gerade hier mekkert weil der "Ordner" C oder D usw nicht findet und ich nicht weis wo ändern.
Antonio
habe gerade bemerkt, dass du....
19.12.2019 13:42:41
Werner
Hallo,
...mit DB2 einen Ordner meinst und nicht ein Laufwerk. Dann so:
Option Explicit
Sub AkkordenLaden()
Dim strQuellPfad As String, strQuelldatei As String
Dim wbQuelle As Workbook, wsQuelle As Worksheet
Dim wbZiel As Workbook, wsZiel As Worksheet
Dim bwbopen As Boolean
Application.ScreenUpdating = False
Set wsZiel = ThisWorkbook.Worksheets("Chord - Arpeggio")
With wsZiel
strQuellPfad = IIf(Right(.Range("DB1"), 1)  "\", .Range("DB1") & "\", .Range("DB1"))
strQuellPfad = IIf(Right(.Range("DB2"), 1)  "\", strQuellPfad & .Range("DB2") _
& "\", strQuellPfad & .Range("DB2"))
strQuelldatei = IIf(Right(.Range("DB3"), 5)  ".xlsx", .Range("DB3") _
& ".xlsx", .Range("DB3"))
End With
bwbopen = WorkbookIsOpen(strQuelldatei)
If Not bwbopen Then
Set wbQuelle = Workbooks.Open(strQuellPfad & strQuelldatei)
Else
Set wbQuelle = Workbooks(strQuelldatei)
End If
Set wsQuelle = wbQuelle.Worksheets("Tabelle1")
wsZiel.Range("Z1:AE1000").ClearContents 'Bereich anpassen
wsQuelle.UsedRange.Copy wsZiel.Range("Z1")
wbQuelle.Close False
Set wsZiel = Nothing: Set wbQuelle = Nothing: Set wsQuelle = Nothing
End Sub
Bei dem Code ist es dann auch egal, ob du am Ende des Pfades in DB1 bzw. des Ordners in DB2 einen Backslash drin hast oder nicht. Genauso ist es beim Dateinamen egal, ob du in DB3 den Dateinamen mit oder ohne .xlsx stehen hast.
Gruß Werner
Anzeige
AW: Tabelle kopieren
19.12.2019 13:29:01
peterk
Hallo Antonio
Deinen Code einmal richtiggestellt (ungetestet)
Option Explicit
Sub AkkordenLaden()

    Application.ScreenUpdating = False

    Dim PfadQ As String         ' Quellearbeitsmappenpfad 
    Dim DateinameQ As String     ' Quellearbeitsmappename 

    Dim PfadZ As String         ' Zielarbeitsmappenpfad 
    Dim DateinameZ As String     ' Zielarbeitsmappenpfad 
    
    Dim wbQ As Workbook         ' Quelleworkbook 
    Dim wksQ As Worksheet       ' Quellearbeitsmappentabelle 
    Dim wksZ As Worksheet       ' Zielarbeitsmappentabelle 
    Dim bwbopen As Boolean
   
    Set wksZ = Worksheets("Chord - Arpeggio")

    PfadQ = wksZ.Range("DB1").Value & wksZ.Range("DB2").Value
    DateinameQ = wksZ.Range("DB3").Value

    PfadZ = "C:\Users\a.mazza\Desktop\PS\"
    DateinameZ = "GUITAR MAP 1.xlsm"

    bwbopen = WorkbookIsOpen(DateinameQ)

    If bwbopen = False Then
        Set wbQ = Workbooks.Open(PfadQ & DateinameQ)
    Else
        Set wbQ = Application.Workbooks(DateinameQ)
    End If
    
    Set wksQ = wbQ.Worksheets("Tabelle1")
    
    wksZ.Range("Z1:AE").ClearContents
    wksQ.UsedRange.Copy wksZ.Range("Z1")
    
    Application.CutCopyMode = False

    wbQ.Close

    Application.ScreenUpdating = False

    ' ### Hier kommt dein weiterführender Code 

End Sub

Anzeige
AW: Peter
19.12.2019 13:45:21
Antonio

wksZ.Range("Z1:AE").ClearContents

Hallo Peter, hier meckert:die Methode Range für das Objekt_Worksheet ist fehlgeschlagen
Antonio
AW: Peter
19.12.2019 13:52:02
peterk
Hallo
"wksZ.Range("Z:AE").ClearContents" ohne die "1", ansonsten muesstest Du auch ein Ende der Spalte AE angeben, z.b. "Z1:AE1000"
AW: Peter
19.12.2019 14:01:21
Antonio
Hallo Werner,
Hallo Peter,
ich komme heute nicht mehr dazu da wir bald Wein(achterl) Feier haben.
Ich lasse es offen und bin morgen wieder da.
Viele Dank zunächst und sieht sehr versprechend aus.
LG
Antonio
AW: Werner und Peter
19.12.2019 14:02:07
Antonio
Hallo Werner,
Hallo Peter,
ich komme heute nicht mehr dazu da wir bald Wein(achterl) Feier haben.
Ich lasse es offen und bin morgen wieder da.
Viele Dank zunächst und sieht sehr versprechend aus.
LG
Antonio
Anzeige
wozu dann offen...
19.12.2019 14:05:30
Werner
Hallo,
...soll sich noch jemand damit beschäftigen obwohl du jetzt schon zwei Lösungsvorschläge hast?
Sollte was nicht passen, dann kannst du den Beitrag wieder auf offen stellen, sobald du die Vorschläge getestet hast.
Schöne Weihnachtsfeier.
Gruß Werner
AW: wozu dann offen...
20.12.2019 07:05:21
Antonio
Hallo Werner,
Hallo Peter,
anbei die Mappe, gezipt wegen datei Ordner.
https://www.herber.de/bbs/user/133882.zip
Ich habe eurer Code getestet und in der Mappe, beim drucken der Button "Akkorden Laden", wird alles zu #NV.
Ich möchte an eurer Code nicht zweifeln, vielleicht habe ein Fehler in der Mappe.
Vorgang:
Beim drucken auf die Drehfelder, wird dann ein Akkord gewählt und angezeigt. (Gelbe Zellen)
In "DB" ändert sich der Pfad,(aufpassen, im Ordner Akkorden sind zur Zeit nur wenige Akkorden gelistet, bitte nachschauen welche man wählen kann.
beim drucken auf die Schaltfläche "Akkorden Laden" solte in Bereich "Z:AE" die alte liste gelöscht und die neu geladen werden und mit dem Drehfeld die Akkorden nacheinander anzeigen lassen.
Wie im Bereich "A:X" durch ein grünes Balken angezeigt wird welche Akkord gerade aktiv ist wollte ich im Bereich "Z:AE" auch ein Balken scrollen lassen um den aktivem Akkord anzuzeigen.
Viellicht hilft euch die Mappe zum Nachvollziehen.
Da wir heute bis Mittag arbeiten werde ich den Forum erst am abend von zu Hause verfolgen.
Vielen Dank im Voraus
Antonio
AW: wozu dann offen...
20.12.2019 09:44:12
peterk
Hallo Antonio
Die Zeile

wsQuelle.usedRange.Copy wsZiel.Range("Z1")
ist gefährlich, da der UsedRange nicht unbedingt der ist den DU siehst. Z.B Cmay.xlsx ist befüllt von Zelle A1 bis F63, UsedRange ist aber A1:L999 (d.h. 6 Spalten zuviel!). Beim Kopieren in "Z1" werden nicht nur die 6 gewünschten Spalten kopiert sonder auch die unerwünschten. Damit überschreibst Du auch AF-AK (und alles ist kaputt).

wsQuelle.Range("A1:F1000").Copy wsZiel.Range("Z1")
Schafft abhilfe.
Peter
AW: ...Kleinigkeit noch?
20.12.2019 10:31:25
Antonio
VERD....mt
habe bis jetzt in der Mappe gesucht, habe internet auf #NV suchen lassen usw.
Genial Peter ich Danke dir sehr.
Wie im Bereich "A:X" durch ein grünes Balken angezeigt wird welche Akkord gerade aktiv ist  _
wollte ich im Bereich "Z:AE" auch ein Balken scrollen lassen um den aktivem Akkord anzuzeigen.
Hast du hier ein Tipp?
Ich bekomme es nicht hin wie in Bereich "A:X" mit Bedingt Formatierung.
Vielen Dank im Voraus
Antonio
AW: ...Kleinigkeit noch?
20.12.2019 11:56:11
peterk
Hallo
Bedingte Formatierung:

=ZEILE($Z1)=$BE$27
angewendet auf

=$Z:$AE

DANKE!!!!!
21.12.2019 14:44:09
Antonio
Super geil!!
Danke
Antonio

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige