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

Codename auslesen bei neuem sheet

Codename auslesen bei neuem sheet
23.08.2007 13:54:25
Rambo
Hallo Ihr da draußen !
Ich sitze nun schon fast einen ganzen Tag an diesem Problem.
Ich moechte Ereignisprozeduren in zur Laufzeit erstellten Tabellenblaettern einfuegen.
Problem : Der Codename des neu eingefuegten Blattes ist erst nach verlassen des Makros oder mit geoeffnetem VB-Editor über z.B. Worksheets.codename auslesbar.
Loesung : kurzzeitiges oeffnen des VBE - Editors zur Laufzeit also wie schon einmal Thema hier:

With Application.VBE.MainWindow
.SetFocus
.Visible = True
End With
Sheets.Add.Name = "CONTROL"
codename_of_sheet = Sheets("CONTROL").CodeName
With ThisWorkbook.VBProject.VBComponents(codename_of_sheet).CodeModule
.AddFromString "' " & codename_of_sheet
End With
With Application.VBE.MainWindow
.SetFocus
.Visible = False
End With
end sub 


Problem : ich moechte mich nicht mit einem flackernden Programm unternehmensweit und vor mir selber blamieren
2. gefundene Loesung von Heiko S.:


' Name festlegen
strNameOfSheet = "CONTROL"
' Neues Sheet anlegen
Sheets.Add
' Nun erstmal den Namen auslesen um auch den "VBA-Namen" zu bekommen.
strHilf = ActiveSheet.Name
' Und dann erst umbenennen
Sheets(strHilf).Name = strNameOfSheet
' Diesee Zeile kann auch weggelassen werden, dann bleibt der VBA-Name halt Tabelle...
ThisWorkbook.VBProject.VBComponents.Item(strHilf).Name = strNameOfSheet
' Ohne die Zeile über "mir" müßte die With Zeile so aussehen.
' With ThisWorkbook.VBProject.VBComponents(strhilf).CodeModule
With ThisWorkbook.VBProject.VBComponents(strNameOfSheet).CodeModule
.AddFromString "' " & strNameOfSheet
End With
end sub


Nun kommt mein Problem: An sich war ich von obiger Loesung zunaechst begeistert. Allerdings funktioniert sie bei mir nicht und zwar aus folgendem Grund: bei der Erzeugung meines Tabellenblattes bekommt das Blatt als Namen z.B.: Tabelle5 und als Codenamen Tabelle7 (unter Testbedingungen momentan ist die Nummer des Codenamens immer um 2 hoeher als der Tabellenname). Ich schaetze, dass dies daran liegt, dass ich vorher 2 Pivottabellenberichte einfuege und zwar auf folgende Art und Weise:


Sub pivot(xxx As String, yyy As String, zzz As String, Bname As String, tname As String,  _
dname   _
_
As String)
'erstellen des Pivottables
Worksheets(Bname).Activate
Worksheets(Bname).PivotTableWizard SourceType:=xlDatabase, _
SourceData:=rngrange, TableDestination:=Worksheets(Bname).Range("a1"), tablename:= _
tname
With ActiveSheet.PivotTables(tname)
.PivotFields(xxx).Orientation = xlPageField
.PivotFields(xxx).Orientation = xlRowField
.PivotFields(yyy).Orientation = xlColumnField
.PivotFields(zzz).Orientation = xlDataField
End With
End Sub 


Das Problem ist dass ich eine unbestimmte Zahl an Pivottables einfuege und so spaeter nicht mehr so einfach
sagen kann welche Differenz nun zwischen Blattnamennummer und Codenamennummer ist. Natuerlich koennte ich nun
eine globale Integervariable die eingefuegten Pivottables zaehlen lassen und dann immer den Codenamen ausrechnen.
Aber ich fuege sehr viele Blaetter ueber Prozeduren ein und ich habe einfach keine Lust auf diese Spielchen.
Hat jemand eine elegante Loesung fuer dieses Problem ?
mit besten Grueßen,
R. Z.
P.S. : Codenamen aendern funktioniert auch nicht, da ich dazu ja auch den Codenamen brauche. Eine Loesung
waere vielleicht wenn ich folgende Formel verwenden koennte ohne den Codenamen uebergeben zu muessen und
stattdessen nur den Blattnamen:


' zielname ist hier ein string der den codenamen darstellt
With ActiveWorkbook.VBProject.VBComponents(zielname).CodeModule
ii = .CreateEventProc("SelectionChange", "worksheet") + 1
end sub


10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Codename auslesen bei neuem sheet
23.08.2007 14:02:00
Rudi
Hallo,
also das funktioniert einwandfrei:

Sub tt()
Dim wks As Worksheet
Set wks = Worksheets.Add
With ThisWorkbook.VBProject.VBComponents(wks.CodeName).CodeModule
.AddFromString "' " & wks.CodeName
End With
End Sub


Gruß
Rudi
Eine Kuh macht Muh, viele Kühe machen Mühe

AW: Codename auslesen bei neuem sheet
23.08.2007 14:05:00
Rambo
Vielen Dank fuer die schnelle Antwort !
Aber in Excel 2003 funktioniert das nicht - jedenfalls bei mir.
Fuer: wks.CodeName erhalte ich nur folgendes (bei geschlossenem VBE zur Laufzeit) : ""
Also leerer String
mfG,
R.Z.

Anzeige
AW: Codename auslesen bei neuem sheet
23.08.2007 16:00:00
luschi
Hallo Rambo Zambo,
ich habe den Code von Rudi soeben mit Win 2003 (Server) und Excel 2003 ausprobiert:
und es funktioniert!
Gruß von Luschi
aus klein-Paris

AW: Codename auslesen bei neuem sheet
23.08.2007 14:14:00
Rambo
Dein Makro bringt bei geschlossenem VB-Editor folgenden Fehler:
Laufzeitfehler 9
Index außerhalb des gueltigen Bereichs
Bei VBE offen gehts einwandfrei.

AW: Codename auslesen bei neuem sheet
23.08.2007 14:18:00
Heiko
Hallo ?,
schön mal seine eigenen Codeschnipsel wiederzusehen.
Also mit folgendem Code:

Sub NeuesSheet2()
Dim strNameOfSheet As String, strHilf As String
' Name festlegen
strNameOfSheet = "CONTROL"
' Neues Sheet anlegen
Sheets.Add
' Nun erstmal den Namen auslesen um auch den "VBA-Namen" zu bekommen.
strHilf = ActiveSheet.Name
' Und dann erst umbenennen
Sheets(strHilf).Name = strNameOfSheet
' Gibt den VBA CodeName aus.
MsgBox ThisWorkbook.VBProject.VBComponents.Item(strHilf).Name
End Sub


Kann ich unter XP und EXCEL 2002 neue Blätter erstellen und den VBA Namen aulesen ohne das der VBE Editor offen sein muss.
Ansonsten kann ich dein Problem nicht nachvollziehen, muß du mal ne Beispielmappe machen und genau erklären was du willst!
Gruß Heiko
PS: Rückmeldung wäre nett !

Anzeige
AW: Codename auslesen bei neuem sheet
23.08.2007 15:11:45
Knut
Hallo Heiko !
Mein Name ist Knut. Ich habe mal ein Beispielfile hochgeladen. Duerfte selbsterklaerend sein.
Wie Du siehst sind Blattname und Codename bei Erstellung unterschiedlich und den Codenamen bekomme ich nur bei geoeffnetem VBE. Drueck einfach den gruenen Knopf im ersten Blatt
https://www.herber.de/bbs/user/45320.xls
Grueße,
Knut

AW: Codename auslesen bei neuem sheet
23.08.2007 15:29:00
Knut
Hmm - hab das hochgeladene File getestet und jetzt geht es ja - sorry - habe den Fehler zunaechst geschafft zu reproduzieren aber nun scheint es keinen Bug mehr zu geben - ich verstehe das nicht - muß weiter testen. Danke fuer die Hilfe.

Anzeige
AW: Codename auslesen bei neuem sheet
23.08.2007 15:38:00
Knut
Argh - manchmal gehts manchmal gehts nicht !!!

AW: Codename auslesen bei neuem sheet
23.08.2007 16:11:27
Heiko
Hallo Knut,
ich kann dein Problem jetzt nachvollziehen, wenn beim Sheets erstellen Excelsheet Name und VBA Name nicht gleich sind gelingt es auch meinem Code nicht aufs VBE zuzugreifen.
Ich muss nu erstmal weg, schaue mir das ganze Morgen früh nochmal an. Aber das ich ne Lösung finde kann ich dir natürlich nicht versprechen.
Gruß Heiko

AW: Codename auslesen bei neuem sheet
24.08.2007 07:43:51
Heiko
Min Knut,
so wie unten, läuft es nun bei mir, mit und ohne geöffneten VB-Editor.

Sub NeuesSheet2()
Dim strNameOfSheet As String
Dim intDummy As Integer
strNameOfSheet = "CONTROL"
' Neues Sheet anlegen
Sheets.Add.Name = strNameOfSheet
' Man muss schienbar erstmal irgendwas anderes im VBE machen, dann geht es bei mir.
intDummy = ThisWorkbook.VBProject.VBComponents(1).CodeModule.CountOfLines
' Gibt den VBA CodeName aus.
MsgBox ThisWorkbook.Sheets(strNameOfSheet).CodeName
End Sub


Gruß Heiko
PS: Rückmeldung wäre nett !

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige