Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Wert nach Zelleninhaltkriterium von Tabellenblatt übernehmen

Frage Microsoft Microsoft Office

Mitglied: xaumichi

xaumichi (Level 1) - Jetzt verbinden

25.08.2010 um 09:12 Uhr, 3624 Aufrufe, 32 Kommentare

Hallo!

Also, es gibt 2 Tabellenblätter: Kalender und XYZ

Im TB "XYZ" gibt es eine Liste (C5), bei der die Auswahl eines Monats möglich ist.
Wenn nun zB das Monat Juni gewählt wird, sollen nun im Bereich B15:B53 TB "XYZ" die Werte vom TB "Kalender", Spalte (K) (Wert: K14="Juni"), B15:B53 übernommen werden.

Das heißt, ich müsste die Monatsauswahl von C5 im TB (Kalender), in der Zeile 14 suchen und dann die darunterliegenden Werte im Bereich gesuchteSpalte15:gesuchteSpalte53 auf das TB(XYZ) B15:B53 übertragen.

Naja, leider übsteigt die realisierung ein bisschen meine Fähigkeiten (in VBA).
Würde mich freuen, wenns da eine kleine Unterstützung gäbe, um diese Überlegung in die Realität umzusetzen.

Lg Mike
32 Antworten
Mitglied: 76109
25.08.2010 um 11:06 Uhr
Hallo Mike!

Sollte in etwa so gehen:
01.
Private Sub Test() 
02.
    Call CopyMonthRange("Juni") 
03.
End Sub 
04.
 
05.
Private Sub CopyMonthRange(ByRef M) 
06.
    Dim Monat As Range 
07.
     
08.
    With Sheets("Kalender") 
09.
        Set Monat = .Rows(14).Find(M, LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False) 
10.
    End With 
11.
     
12.
    If Not Monat Is Nothing Then 
13.
        Range(Monat.Offset(1, 0), Monat.Offset(39, 0)).Copy Sheets("XYZ").Range("B15") 
14.
    End If 
15.
End Sub
Gruß Dieter
Bitte warten ..
Mitglied: xaumichi
25.08.2010 um 16:40 Uhr
Aja, okey!

Und wenn ich jetzt zB sage:

01.
Call CopyMonthRange("Range("C5").Value")
dann übernimmt er den Wert, der eben gerade in C5 steht, da ja dort verschiedene Werte stehen können (Auswahl über Dropdown-Liste).

Lg Mike
Bitte warten ..
Mitglied: 76109
25.08.2010 um 18:54 Uhr
Hallo Mike!

Deswegen das Testbeispiel. Wie Du die Variable übergibst ist wurscht, solange es sich beim übergebenen Inhalt um verwertbare Values handelt

Allerdings dann:
Call CopyMonthRange(Range("C5").Value)
wobei eigentlich
Call CopyMonthRange(Range("C5"))
ausreichend ist, da Value generell als Standard festgelegt ist.

Gruß Dieter
Bitte warten ..
Mitglied: xaumichi
26.08.2010 um 08:53 Uhr
Hm...jetzt funktioniert zwar ansich der Code, aber es wird nichts kopiert...!

Kann es damit zusammenhängen, das die Tabellenblätter geschützt sind?

verwende eben jetzt diesen Code:

01.
Private Sub CopyMonthRange(ByRef M) 
02.
    Dim Monat As Range 
03.
     
04.
    With Sheets("Kalender") 
05.
        Set Monat = .Rows(15).Find(M, LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False) 
06.
    End With 
07.
     
08.
    If Not Monat Is Nothing Then 
09.
        Range(Monat.Offset(1, 0), Monat.Offset(5, 0)).Copy Worksheets(Tabelle1).Range("B15") 
10.
    End If 
11.
End Sub
Bitte warten ..
Mitglied: 76109
26.08.2010 um 10:28 Uhr
Hallo Mike!

Zitat von xaumichi:
Hm...jetzt funktioniert zwar ansich der Code, aber es wird nichts kopiert...!
Ich dachte die Monatsnamen befinden sich in Zeile 14 und die Zeilen 15-53 sollen kopiert werden?
Kann es damit zusammenhängen, das die Tabellenblätter geschützt sind?
Wenn Tabelle1 geschützt ist, dann funktioniert es nicht Sollte auch eine Debugger-Fehlermeldung erscheinen?

Füge mal Testweise in Codezeile 3 das hier ein:
MsgBox M
Test ob überhaupt ein Monat übergeben wird?

Gruß Dieter
Bitte warten ..
Mitglied: xaumichi
26.08.2010 um 11:41 Uhr
Hallo!
Aja, hab die Zeile wieder auf 14 geändert, war mein fehler.
Hab das mit dem MsgBox M ausprobiert --> Monat wird richtig ausgelesen.

Tabelle1 ist nicht gesperrt.

Bekomm diesen Fehler:

Laufzeitfehler: Typen unverträglich



[EDIT]:
Ah...hab bei Worksheets(Tabelle1) die "" vergessen.
Jetzt kommt allerdings dieser Fehler:

Die Methode 'Range' für das Objekt '_Worksheet' ist fehlgeschlagen

Lg Mike
Bitte warten ..
Mitglied: 76109
26.08.2010 um 11:58 Uhr
Zitat von xaumichi:
Ah...hab bei Worksheets(Tabelle1) die "" vergessen.
Ups, das habe ich doch glatt auch übersehen
Jetzt kommt allerdings dieser Fehler:
Die Methode 'Range' für das Objekt '_Worksheet' ist fehlgeschlagen
Mhm, da habe ich jetzt aber keine Erklärung für
Könntest mal das ausprobieren:
01.
Range(Monat.Offset(1, 0), Monat.Offset(5, 0)).Copy Destination:=Sheets("Tabelle1").Range("B15") 
bzw., wie sah diese Zeile jetzt bei Dir aus?

Gruß Dieter
Bitte warten ..
Mitglied: xaumichi
26.08.2010 um 12:08 Uhr
Hm....hätte ich selber schon probiert...kommt leider der selbe fehler....!

das war meine
01.
Range(Monat.Offset(1, 0), Monat.Offset(5, 0)).Copy Sheets("Tabelle1").Range("B15")
LG Mike
Bitte warten ..
Mitglied: 76109
26.08.2010 um 12:13 Uhr
Hallo Mike!

Kann leider keinen Fehler entdecken, poste nochmal die komplette Sub

Gruß Dieter
Bitte warten ..
Mitglied: xaumichi
26.08.2010 um 12:17 Uhr
01.
Private Sub CopyMonthRange(ByRef M) 
02.
    Dim Monat As Range 
03.
     
04.
    With Sheets("Kalender") 
05.
        Set Monat = .Rows(14).Find(M, LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False) 
06.
    End With 
07.
     
08.
    If Not Monat Is Nothing Then 
09.
        Range(Monat.Offset(1, 0), Monat.Offset(5, 0)).Copy Sheets("Tabelle1").Range("B15") 
10.
    End If 
11.
End Sub
und

01.
Call CopyMonthRange(Range("C5").Value)
(wenn ich beim 2. code das ".Value" weg tue, kommt der selbe Fehler.)

Lg Mike
Bitte warten ..
Mitglied: 76109
26.08.2010 um 12:24 Uhr
Hallo Mike!

Versuchs mal damit:
01.
Private Sub CopyMonthRange(ByRef M) 
02.
    Dim Monat As Range 
03.
     
04.
    With Sheets("Kalender") 
05.
        Set Monat = .Rows(14).Find(M, LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False) 
06.
     
07.
        If Not Monat Is Nothing Then 
08.
            Range(.Cells(Monat.Row + 1, Monat.Column), .Cells(Monat.Row + 5, Monat.Column)).Copy Sheets("Tabelle1").Range("B15") 
09.
        End If 
10.
    End With 
11.
End Sub
oder damit:
01.
Private Sub CopyMonthRange(ByRef M) 
02.
    Dim Monat As Range 
03.
     
04.
    With Sheets("Kalender") 
05.
        Set Monat = .Rows(14).Find(M, LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False) 
06.
     
07.
        If Not Monat Is Nothing Then 
08.
            With .Columns(Monat.Column) 
09.
                Range(.Rows(Monat.Row + 1), .Rows(Monat.Row + 5)).Copy Sheets("Tabelle1").Range("B15") 
10.
            End With 
11.
        End If 
12.
    End With 
13.
End Sub
Gruß Dieter
Bitte warten ..
Mitglied: xaumichi
26.08.2010 um 12:48 Uhr
Hm...beide Versionen führen zu dem selben, oben genannten Fehler...!

Lg mike
Bitte warten ..
Mitglied: 76109
26.08.2010 um 12:50 Uhr
Hallo nochmal!

Wenn das auch nicht funktioniert, dann versuch das:
01.
Private Sub CopyMonthRange(ByVal M As String) 
02.
    Dim Monat As Range 
03.
     
04.
    If M = "" Then Exit Sub 
05.
     
06.
    With Sheets("Kalender") 
07.
        Set Monat = .Rows(14).Find(M, LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False) 
08.
    End With 
09.
     
10.
    If Not Monat Is Nothing Then 
11.
        Range(Monat.Offset(1, 0), Monat.Offset(39, 0)).Copy Sheets("Tabelle1").Range("B15") 
12.
    End If 
13.
End Sub
um sicher zu gehen, das auch nur Strings mit Inhalt gesucht werden.

Gruß Dieter

PS. Dachte ich mir, dass die vorherigen Versionen auch nicht funktionieren, insofern der Test auf Leerstring
Bitte warten ..
Mitglied: xaumichi
26.08.2010 um 13:26 Uhr
Auch damit konnte ich keinen Erfolg erziehlen.
Bekomme noch immer den selben Fehler.

Könnte es sein, dass Excel (aus welchem Grund auch immer) nicht kopieren kann??

LG Mike
Bitte warten ..
Mitglied: 76109
26.08.2010 um 13:38 Uhr
Hallo Mike!

Tja, was soll ich sagen Bei mir funktioniert es einwandfrei und der Code ist soweit auch korrekt?

Ich habe leider keine Ahnung, was bei Dir dazwischen funken könnte. eventuell eine Erreignis-Verarbeitung???

Hast Du's schon mit einer einfachen Mappe ohne weiteren VBA-Code versucht, in der nur das Tabellenblatt "Kalender" geschützt ist und in der Zelle K14 den Monat Juni und darunter 1,2,3,4.... eingibst und dann mit einer Test-Sub einfach die Copy-Sub mit "Juni", so wie bei meiner allerersten Anwort, aufrufst?

Gruß Dieter
Bitte warten ..
Mitglied: xaumichi
26.08.2010 um 14:18 Uhr
Tja, das ganze ist bei mir in einer Change-Ereignis hinein gepackt....! :S

So, dann werd ich das mal so testen...!

Danke vorerst mal!

Lg Mike
Bitte warten ..
Mitglied: 76109
26.08.2010 um 14:33 Uhr
Hallo Mike!

Da war doch noch die Sache mit dem NoChange = True/False, dass musst Du hier auch anwenden

Gruß Dieter
Bitte warten ..
Mitglied: xaumichi
26.08.2010 um 14:47 Uhr
Jup, das wäre dabeuí. Also es befindet sich in der selben If-Schleife.

Hm...mir ist jetzt noch was aufgefallen:
Ist es möglich, dass etwas mit dem 2. Offset nicht hinhaut?
den beim 1. Offset bekomm ich eine gelbe Infobox, wenn ich mit Maus darauf zeige, beim 2. Offset kommt nichts.

LG Mike
Bitte warten ..
Mitglied: 76109
26.08.2010 um 15:09 Uhr
Zitat von xaumichi:
Hm...mir ist jetzt noch was aufgefallen:
Ist es möglich, dass etwas mit dem 2. Offset nicht hinhaut?
den beim 1. Offset bekomm ich eine gelbe Infobox, wenn ich mit Maus darauf zeige, beim 2. Offset kommt nichts.
Was meinst Du jetzt, die Sache mit der Validation.ShowInput-Geschichte? Wenn ja, dann habe ich aus dem Stehgreif auch keine Antwort darauf

Gruß Dieter
Bitte warten ..
Mitglied: xaumichi
26.08.2010 um 15:14 Uhr
Nein, nein, bei dem Programm jetzt:
Ich bekomm ja den oben genannten Fehler.
Wenn ich dann auf "Debuggen" gehen, wird die fehlerhafte Zeile gelb hinterlegt.

das wäre dann die:

01.
Range(Monat.Offset(1, 0), Monat.Offset(39, 0)).Copy Sheets("Tabelle1").Range("B15")
und wenn ich nun den Cursor auf Monat.Offset(1, 0) stelle, kommt eine Gelbe Box, die mir den Wert dieses Ranges anzeigt.
Beim Monat.Offset(39, 0) wird mir dagegen nichts angezeigt....

Lg Mike
Bitte warten ..
Mitglied: 76109
26.08.2010 um 15:31 Uhr
Hallo Mike!

Ja, steht denn in Zeile 53 auch was drinnen?

Und hats mit einer normalen Mappe funktioniert?

Gruß Dieter
Bitte warten ..
Mitglied: xaumichi
26.08.2010 um 16:33 Uhr
Hallo!

Jup, in Zeile 53 stehen ebenfalls Werte.
Hm...hab mich jetzt mit einer "leeren" Arbeitsmappe gespielt, hab es allerdings auch dort nicht zum laufen bebkommen.


Lg Mike
Bitte warten ..
Mitglied: 76109
26.08.2010 um 16:42 Uhr
Hallo Mike!

Da fehlen mir echt die Worte, was hast denn für eine Sch... Excel-Version

Mach mal testweise vor die besagte Zeile ein Kommentarzeichen und schreib mal hin:
Sheets("Kalender").Range("K14:K53").Copy Sheets("Tabelle1").Range("B15")
ob denn das weningstens funktioniert

Gruß Dieter

PS. Eine Frage habe ich aber noch und zwar, ob in den zu kopierenden Zellen nur Werte oder Formeln drin stehen?
Bitte warten ..
Mitglied: xaumichi
26.08.2010 um 18:55 Uhr
Also in den Zellen, AUS denen kopiert wird, stehen nur Werte.
Die Zellen IN die EINGEFÜGT wird bestehen Verbindungen zu VBA-Code.

LG Mike
Bitte warten ..
Mitglied: 76109
26.08.2010 um 19:30 Uhr
Hallo Mike!

Und hast Du das mit dem .....Range("K15:K53").Copy getestet?

Und/oder setze mal vor das Sheets ein Kommentarzeichen, um zu sehen, ob der Copy-Befehl funktioniert bzw einen Debuggerfehler erzeugt
Range(Monat.Offset(1, 0), Monat.Offset(39, 0)).Copy 'Sheets("Tabelle1").Range("B15")

Gruß Dieter
Bitte warten ..
Mitglied: xaumichi
26.08.2010 um 19:43 Uhr
Hallo!

Nein, bekomm den selben Fehler, wenn ich ein ' setze!

Lg Mike
Bitte warten ..
Mitglied: 76109
27.08.2010 um 07:11 Uhr
Hallo Mike!

Test mal das hier
01.
Private Sub CopyMonthRange(ByVal M As String) 
02.
    Dim Monat As Range, B As String, E As String, R As String 
03.
     
04.
    If M = "" Then Exit Sub 
05.
     
06.
    With Sheets("Kalender") 
07.
        Set Monat = .Rows(14).Find(M, LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False) 
08.
    End With 
09.
     
10.
    If Not Monat Is Nothing Then 
11.
        B = Monat.Offset(1, 0).Address 
12.
        E = Monat.Offset(39, 0).Address 
13.
        R = Range(Monat.Offset(1, 0), Monat.Offset(39, 0)).Address 
14.
         
15.
        MsgBox "Begin = " & B & ", End = " & E & ", Range = " & R 
16.
         
17.
       'Range(Monat.Offset(1, 0), Monat.Offset(39, 0)).Copy Sheets("Tabelle1").Range("B15") 
18.
    End If 
19.
End Sub
und schau was die MsgBox anzeigt?

Gruß Dieter
Bitte warten ..
Mitglied: xaumichi
27.08.2010 um 08:04 Uhr
Hui, heute bist du aber schon bald unterwegs!

Ich bekomme bei:

01.
R = Range(Monat.Offset(1, 0), Monat.Offset(39, 0)).Address
wieder diesen Fehler, dass 'Range' vom Objekt '_Worksheets' nicht übertützt wird!

wenn ich diesen per ' übergehe, dann bekomme ich die Ausgabe.

Hab jetzt
01.
Range(B, E).Copy Sheets("Tabelle1").Range("B15")
versucht:
Jetzt funktioniert zwar das Kopieren, allerdings kopiert er mir nun die Werte nicht vom TB "Kalender" sondern von dem TB, wo die "Monatswahl" stattfindet!

LG Mike
Bitte warten ..
Mitglied: 76109
27.08.2010 um 08:57 Uhr
Zitat von xaumichi:
Ich bekomme bei:
01.
R = Range(Monat.Offset(1, 0), Monat.Offset(39, 0)).Address
wieder diesen Fehler, dass 'Range' vom Objekt '_Worksheets' nicht übertützt wird!
Seltsam, seltsam?

Hab jetzt
01.
 Range(B, E).Copy Sheets("Tabelle1").Range("B15")
versucht:
Jetzt funktioniert zwar das Kopieren, allerdings kopiert er mir nun die Werte nicht vom TB "Kalender" sondern von dem
TB, wo die "Monatswahl" stattfindet!
Ja, das kann natürlich nicht funktionieren, da jetzt das gerade Aktive Sheet als Quelle genommen wird

Dann sollte eigentlich das jetzt funktionieren:
01.
Private Sub CopyMonthRange(ByVal M As String) 
02.
    Dim Monat As Range, B As String, E As String, R As String 
03.
     
04.
    If M = "" Then Exit Sub 
05.
     
06.
    With Sheets("Kalender") 
07.
        Set Monat = .Rows(14).Find(M, LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False) 
08.
     
09.
        If Not Monat Is Nothing Then 
10.
            .Range(Monat.Offset(1, 0), Monat.Offset(39, 0)).Copy Sheets("Tabelle1").Range("B15") 
11.
        End If 
12.
    End With 
13.
End Sub
Gruß Dieter
Bitte warten ..
Mitglied: xaumichi
27.08.2010 um 09:02 Uhr
Das kappier ich nicht!
Das ist doch der selbe Code wie oben, außerdem werden B, E und R niergends verwendet, obwohl du sie definierst...oder überseh ich da was?
Wobei er funktioniert!
Toll, danke schön!

Jetzt hätte ich vl noch eine kleine Frage:
Kann man ein Ereignis auslösen, wenn der eingefügt Wert ein " " (als nichts) ist?
Das Problem ist ja das Einfügen von kopierten Werten...! (es geht um das Sperren und Grau hinterlegen, wenn "nichts" eingefügt wird)

Lg Mike
Bitte warten ..
Mitglied: 76109
27.08.2010 um 09:13 Uhr
Hallo Mike!

Zitat von xaumichi:
Das kappier ich nicht!
Das ist doch der selbe Code wie oben, außerdem werden B, E und R niergends verwendet, obwohl du sie definierst...oder
überseh ich da was?
Ja, wenn Du mal etwas genauer hinsiehst, dann wird Dir eventuell auffallen, dass sich die Copyzeile jetzt innerhalb der With-Anweisung befindet und das Range noch einen Punkt bekommen hat

Gruß Dieter
Bitte warten ..
Mitglied: xaumichi
27.08.2010 um 09:16 Uhr
Uhhhh.....das tut weh, dass ich das übersehen habe!
gut, thx.

Lg Mike
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

(1)

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
Administrator.de Feedback
gelöst Bug beim Übernehmen der Überschriften-Texte von Links? (2)

Frage von Lochkartenstanzer zum Thema Administrator.de Feedback ...

Microsoft Office
gelöst Schnellbausteine aus Word 2007 nach Word 2016 übernehmen (2)

Frage von TiTux zum Thema Microsoft Office ...

Windows Server
gelöst Handvoll Computer GPO nicht übernehmen (3)

Frage von 1410640014 zum Thema Windows Server ...

Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (13)

Frage von JayyyH zum Thema Switche und Hubs ...

DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...

Backup
Clients als Server missbrauchen? (9)

Frage von 1410640014 zum Thema Backup ...

Windows Server
Mailserver auf Windows Server 2012 (9)

Frage von StefanT81 zum Thema Windows Server ...