Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
584to588
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
584to588
584to588
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Automatische Namengebung für Tabellen geht nicht

Automatische Namengebung für Tabellen geht nicht
15.03.2005 10:13:33
urmel-online
Hi Excel-Fans,
ich habe u.s. (Makro1) geschrieben welches sich aus einer Tabelle den Namen und das Filterkriterium herauslesen soll und den gefilterten Inhalt dann in eine Tabelle mit dem entsprechenden Namen einfügt. Die Namen der Tabellen werden aber auch schon mit einem anderen Makro im Vorfeld gesetzt (Makro2), welches in den jeweiligen Tabellen enthalten ist. Wenn ich jetzt Makro1 ausführe, gibt es immer eine Fehlermeldung beim reinkopieren der selektierten Daten in die entsprechende Tabelle. Die Fehlermeldung kommt dann in Makro2. Überschreibe oder verändere ich dort vielleicht irgendwelche Parameter ? Ich hoffe mir kann jemand helfen oder einen anderen Lösungsvorschlag anbieten.
Danke schon mal vorab.....
MAKRO1:
Sub Kopieren_Tabelle1()
Sheets("Chart Project planning total").Select
Range("A2:H78").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Data transfer").Select
Range("A2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Dim ws As String
Dim zeile1 As Integer
Dim zeile2 As Integer
Dim spalte1 As Integer
Dim spalte2 As Integer
Dim wname As String
ws = ""
wname = ""
Sheets("Chart Project planning total").Select
Range("P103").Select
zeile1 = ActiveCell.Row
spalte1 = ActiveCell.Column
ws = ActiveCell.Value
Range("I103").Select
zeile2 = ActiveCell.Row
spalte2 = ActiveCell.Column
wname = ActiveCell.Value
Sheets("Data transfer").Select
Selection.AutoFilter Field:=8, Criteria1:=wname
Range("A1").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Application.CutCopyMode = False
Selection.Copy
Sheets(ws).Select
Range("A2:H41").Select
Selection.ClearContents
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("A2:H41").Select
Selection.Sort Key1:=Range("B2"), Order1:=xlAscending, Header:=xlNo, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Range("A1").Select
End Sub
MAKRO2:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("ca1")) Is Nothing Then
Range("ca2").Select
End If
If Target = Range("ca1") Then ActiveSheet.Name = Target
End Sub

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Automatische Namengebung für Tabellen geht nicht
15.03.2005 10:44:46
Volker
Hallo Urmel,
kannst Du nicht wenigstens mit Realnamen unterschreiben.
Ist hier üblich und "Hallo Urmel" ist irgendwie peinlich.
Zu Deiner Frage, ohne Deinen Code zu analysieren:
Wo hast Du denn das 2. Makro hinkopiert?
Beim Worksheet_Change handelt es sich um eine Ereignisprozedur, die im Code des jeweiligen Tabellenblattes zu stehen hat und nicht in einem Modul.
Gruß
Volker
AW: Automatische Namengebung für Tabellen geht nicht
15.03.2005 12:00:42
Luc
Hallo Urmel,
ohne deinen Code näher betrachtet zu haben, fällt mir doch der Standort der Dim-Befehle in Makro1 auf. Diese gehören zwingend an den Makroanfang!
Gruß Luc
AW: Automatische Namengebung für Tabellen geht nicht
16.03.2005 09:35:05
Waldemar
OK,
ist ja kein Problem mit dem Vornamen, also i bin der Waldemar :-)
Das Makro 2 steht im jeweiligen Blatt und funktioniert auch ohne Probleme. Nur im Zusammenspiel mit dem Makro 1 kommt es zu einer Fehlermeldung.
Die Dim Definitionen habe ich jetzt nach vorne gestellt. Sie dürften aber für das Probleme nicht relevant sein.
Grüße
Waldemar
Anzeige
AW: Automatische Namengebung für Tabellen geht nicht
16.03.2005 09:41:36
Volker
MAKRO2:
Moin Waldemar,
noch mal die Frage:
Wo hast Du das hingeschrieben? In ein Modul?
Dann lies noch mal meine 1. Beitrag
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("ca1")) Is Nothing Then
Range("ca2").Select
End If
If Target = Range("ca1") Then ActiveSheet.Name = Target
End Sub

Gruß
Volker
AW: Automatische Namengebung für Tabellen geht nicht
16.03.2005 10:32:34
Waldemar
Nein ich habe es nicht im Modul stehen sondern als Makro im jeweiligen Tabellenblatt.
Grüße
Waldemar
Heureka (oder nicht ?!)
16.03.2005 11:06:31
Volker
Hallo Waldemar,
da raten nichts gebracht hat, hab ich deinen Code mal ausprobiert.
Das Problem ist die Zeile
If Target = Range("ca1") Then ActiveSheet.Name = Target
Wenn ich richtig sehe, kopierst Du einen Zellbereich....
Range("A2:H78").Select
Application.CutCopyMode = False
Selection.Copy
...und fügst ihn dann ein. Im WS-change Ereignis ist damit Target auch ein Zellbereich,
daher kommt beim Vergleich mit einer Zelle natürlich der Fehler "Typen unverträglich".
Das ist, als ob Du sagst:
if Range("A1:C3")= 1
Stimmt's oder hab ich Recht?
Wäre in Zukunft übrigens hilfreich, wenn Du den Fehler gleich mit angibst und nicht nur schreibst, Makro2 verursacht Fehler.
Das erspart dem Antworter häufig das Ausprobieren des Codes.
Ist nämlich mühsam, wenn man entweder alle Mappen- und Blattnamen im Code ändern muß oder sich so eine Mappe erst mal erstellen muß, damit die Namen passen.
Dann muß man noch an die wichtigen Stellen Daten schreiben.
Wie gesagt, sehr aufwändig.
Gruß
Volker
Anzeige
AW: Heureka (oder nicht ?!)
17.03.2005 11:41:40
Waldemar
Danke Volker das Du dir soviel Mühe gemacht hast. Und nächstes werde ich den Fehler noch detaillierter beschreiben :-)
Mir ist nicht ganz klar was Du erklärst. Ich kopiere doch nur etwas in einen Bereich der mit der range("ca1") gar nichts zu tun hat. Bevor diese Tabellen gefüllt werden, steht auch schon etwas drin und die Tabellennamen werden ohne Probleme angezeigt. Nur wenn ich halt etwas in diese Tabellen hineinkopieren kommt die Fehlermeldung.
Ich weiß nicht was ich abändern soll oder hast Du einen anderen Lösungsansatz wie ich den Namen der Tabelle anhand eines Bezugs auf z.B. eine Referenztabelle vergeben kann ohne das ich dann mit dem Makro Probleme bekomme ?
Grüße
Waldemar
Anzeige
AW: Heureka (oder nicht ?!)
17.03.2005 12:21:18
Volker
Tach Waldemar,
Bevor ich Deinen Code durchackere, versuch ich noch mal zu erklären, was falsch ist:
Du kopierst einen Bereich, der aus mehreren Zellen besteht, und fügst ihn in eine andere Tabelle ein. Dadurch wird das WorksheetChange Ereignis angetriggert,
in dem die Bedingung:
If Target = Range("ca1") Then ActiveSheet.Name = Target
abgeprüft wird.
Ändert sich nur eine Zelle, repräsentiert Target den neuen Wert dieser Zelle, nicht dessen Adresse.
Ändern sich mehrere Zellen, repräsentiert Target keinen Wert.
Kannst Du testen, indem Du z.B: x=Target an den Anfang des Ereignisses schreibst.
Besteht Target aus mehreren Zellen, gibt es zwar keinen Fehler, aber x wird auch kein Wert zugewiesen.
Der langen Rede kurzer Sinn: Du vergleichst hier verschiedene Typen von Objekten und bekommst daher die Fehlermeldung:
Fehler "Typen unverträglich".
Überleg Dir, welche Bedingung erfüllt sein soll, damit die Tabelle den entspr. Namen bekommt.
Noch was: Dieses Target stellt auch keinen Range dar.
Target.Offset(1,1).select gibt z.B. auch einen Fehler
Es muß lauten Target.address.Offset(1,1).select
Daher dürfte auch die Abfrage "if not intersect..." niemals klappen
Gruß
Volker
Anzeige
AW: Deine letzte Aussage stimmt nicht,...
17.03.2005 14:09:19
Luc
...Volker! Target ist ein Range (s.Definition in der Editorhilfe). Damit sollten auch alle verwendbaren Operationen klappen. Wenn es sich um eine Einzelzelle handelt, wird bei alleiniger Angabe von Target der Default-Rückgabewert .Value gewählt. Das klappt natürlich nicht bei Bereichen, da müsste dann ja ein Datenfeld zurückgegeben wdn. Also - Fehler wie von dir erläutert. Da gerade zuvor durch die Kopiererei Target (engl "Ziel") auf den Zielbereich dieser Operation gesetzt wurde, repräsentiert es jetzt diesen ganzen Bereich und der kann ja wohl kaum als Name für ein Sheet verwendet wdn, Waldemar. Da stecken etliche Denkfehler drin! Du musst noch eine Zelle auswählen, in der der Name steht!
Gruß Luc :-?
Anzeige
@ Luc
17.03.2005 14:24:01
Volker
Hallo Luc,
mit Rangeobjekten stand ich schon immer auf Kriegsfuß.
Das mit dem Default-Rückgabewert war mir neu.
Und schon wieder was gelernt
Gruß
Volker
AW: @ Volker: OK - gern geschehen! mT
17.03.2005 14:51:31
Luc
Bei Ranges ist die Default-Eigenschaft für den Rückgabewert stets .Value. Deshalb kann man das ja auch weglassen. Ist in Analogie zum Arbeitsblatt, da wdn ja regulär auch die Werte angezeigt, obwohl man ja auch die Formeln anzeigen lassen könnte.
Gruß Luc :-?
AW: Heureka (oder nicht ?!)
17.03.2005 14:13:34
Waldemar
Volker DU bist ja echt ein Profi (von wegen nur VBA mit Rekorder ;-))
Ich habe es zwar jetzt einigermaßen verstanden, nur eine Lösung für mein Problem will mir jetzt einfach nicht einfallen.
Dann muss ich wohl noch mal ganz von vorne anfangen.......
Grüße
Waldemar
Anzeige
erröt.....
17.03.2005 14:57:27
Volker
Wär schön, wenn ich Profi wär.
Bestenfalls fortgeschritten, was irgendwo zwischen Anfänger und gut liegt, aber das Level kann man nicht angeben. Das Level was Du bei den Beiträgen siehst, ist übrigens immer das des Fragers, also in dem Fall Dein's. Als Antworter kann man kein Level angeben.
Aber es wär doch gelacht, wenn Dir nicht zu helfen wäre. Ich muß nur wissen, was Du vorhast.
Also Du kopierst Range("A2:H78") von Blatt "Chart Project planning total" und fügst es
auf Blatt "Data transfer" ab Range("A2") ein.
Wie lauten danach die Bedingungen für die Namensvergabe des Blattes und wo steht der Name?
Gruß
Volker
Anzeige

302 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige