Automatische Namengebung für Tabellen geht nicht

Bild

Betrifft: Automatische Namengebung für Tabellen geht nicht
von: urmel-online
Geschrieben am: 15.03.2005 10:13:33
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

Bild

Betrifft: AW: Automatische Namengebung für Tabellen geht nicht
von: Volker
Geschrieben am: 15.03.2005 10:44:46
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
Bild

Betrifft: AW: Automatische Namengebung für Tabellen geht nicht
von: Luc
Geschrieben am: 15.03.2005 12:00:42
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
Bild

Betrifft: AW: Automatische Namengebung für Tabellen geht nicht
von: Waldemar
Geschrieben am: 16.03.2005 09:35:05
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
Bild

Betrifft: AW: Automatische Namengebung für Tabellen geht nicht
von: Volker
Geschrieben am: 16.03.2005 09:41:36
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
Bild

Betrifft: AW: Automatische Namengebung für Tabellen geht nicht
von: Waldemar
Geschrieben am: 16.03.2005 10:32:34
Nein ich habe es nicht im Modul stehen sondern als Makro im jeweiligen Tabellenblatt.
Grüße
Waldemar
Bild

Betrifft: Heureka (oder nicht ?!)
von: Volker
Geschrieben am: 16.03.2005 11:06:31
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
Bild

Betrifft: AW: Heureka (oder nicht ?!)
von: Waldemar
Geschrieben am: 17.03.2005 11:41:40
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
Bild

Betrifft: AW: Heureka (oder nicht ?!)
von: Volker
Geschrieben am: 17.03.2005 12:21:18
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
Bild

Betrifft: AW: Deine letzte Aussage stimmt nicht,...
von: Luc :-?
Geschrieben am: 17.03.2005 14:09:19
...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 :-?
Bild

Betrifft: @ Luc
von: Volker
Geschrieben am: 17.03.2005 14:24:01
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
Bild

Betrifft: AW: @ Volker: OK - gern geschehen! mT
von: Luc :-?
Geschrieben am: 17.03.2005 14:51:31
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 :-?
Bild

Betrifft: AW: Heureka (oder nicht ?!)
von: Waldemar
Geschrieben am: 17.03.2005 14:13:34
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
Bild

Betrifft: erröt.....
von: Volker
Geschrieben am: 17.03.2005 14:57:27
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
 Bild

Beiträge aus den Excel-Beispielen zum Thema "Automatische Namengebung für Tabellen geht nicht"