Autor
|
Thema: Tabelle1 ansprechen (15163 mal gelesen)
|
hotstaks2005 Mitglied Elektriker
Beiträge: 142 Registriert: 03.07.2008 EPLAN 5.7 Office 2003
|
erstellt am: 19. Jul. 2011 11:31 <-- editieren / zitieren --> Unities abgeben:
Hi Excelgemeinde Nach langer Zeit mal wieder eine Nachfrage: Mit einem aufgezeichneten Makro vergleiche ich Spalteninhalte auf Vorhandensein in beiden Tabellen. Ich schaffe es nicht bei diesem Code die Tabelle1 anzusprechen; mit dem Namen der Tabelle geht es einwandfrei. ActiveCell.FormulaR1C1 = _ "=VLOOKUP(RC[-1],'Nummer_01_Name1.xls'!C[10],1,FALSE)" ' hier sollte Tabelle1 angesprochen werden Range("C2").Select ActiveCell.FormulaR1C1 = _ "=VLOOKUP(RC[-2],'Nummer_01_Name1.xls.xls'!C[14],1,FALSE)" ' hier sollte Tabelle1 angesprochen werden Range("B2:C2").Select Wie muss ich anpassen um statt des Tabellennamens "'Nummer_01_Name1.xls.xls" Tabelle1 anzusprechen. Hinweis der Tabellenname heißt wirklich so (*.xls) Danke Euch und einen schönen Tag ------------------ Immer wieder neu lernen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Jester_Karbach Mitglied Im Wandel
Beiträge: 344 Registriert: 09.01.2006 Windows alle Leiden seit 3.1
|
erstellt am: 19. Jul. 2011 11:34 <-- editieren / zitieren --> Unities abgeben: Nur für hotstaks2005
|
runkelruebe Moderator Straßen- / Tiefbau
Beiträge: 8075 Registriert: 09.03.2006 MS-Office 365 ProPlus x86 WIN7(x64)
|
erstellt am: 19. Jul. 2011 11:40 <-- editieren / zitieren --> Unities abgeben: Nur für hotstaks2005
Nach Möglichkeit nicht mit ActiveSheet. [<- bezog sich auf eine von Jester inzwischen editierte Aussage] Zu unsicher, es sei denn, man stellt sicher, dass das gewünschte sheet auch wirklich das ActiveSheet ist. Aber dann kann man das sheet auch gleich direkt ansprechen: Code: Workbooks(1).Sheets(1).Cells(1, 1).Value = "Fred" Workbooks("Mappe2.xlsm").Sheets("Tabelle1").Range("A1").Value = "FRED"
HTH------------------ Gruß, runkelruebe Herr Kann-ich-nich wohnt in der Will-ich-nich-Straße... System-Info | Dateianhänge | FAQ-ACAD | CAD.de-Hilfe | Sei eine Antilope Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
hotstaks2005 Mitglied Elektriker
Beiträge: 142 Registriert: 03.07.2008 EPLAN 5.7 Office 2003
|
erstellt am: 19. Jul. 2011 12:36 <-- editieren / zitieren --> Unities abgeben:
Hi - Besten Dank für eure Antworten. Hier der vollständige Code: Sub Querverweis() ' ' Querverweis Makro ' Makro am 18.07.2011 von ' ' Tabelle3.Select 'Hier klappt es Columns("I:I").Select Selection.Copy Sheets("Tabelle2").Select ' Heißt immer so Range("A1").Select ActiveSheet.Paste Columns("A:A").Select Application.CutCopyMode = False Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlYes, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ DataOption1:=xlSortNormal Columns("A:A").Select Range("A1:A1000").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range( _ "B1"), Unique:=True Columns("A:A").Select Selection.Delete Shift:=xlToLeft Range("B2").Select ActiveCell.FormulaR1C1 = _ "=VLOOKUP(RC[-1],'Nummer_01_VBG.xls'!C[10],1,FALSE)" 'statt TB-Name Tabelle1 da Name immer anders Range("C2").Select ActiveCell.FormulaR1C1 = _ "=VLOOKUP(RC[-2],'Nummer_01_VBG.xls'!C[14],1,FALSE)" 'statt TB-Name Tabelle1 da Name immer anders Range("B2:C2").Select Selection.AutoFill Destination:=Range("B2:C28"), Type:=xlFillDefault Range("B2:C28").Select End Sub Jester_Karbach Das mir Tabelle.Select funzt nicht; bzw. hab ich es auch falsch eingesetzt Runkelrübe > ist immer das aktive Sheet "unsicher, es sei denn, man stellt sicher, dass das gewünschte sheet auch wirklich das ActiveSheet ist" ------------------ Immer wieder neu lernen
[Diese Nachricht wurde von hotstaks2005 am 19. Jul. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
runkelruebe Moderator Straßen- / Tiefbau
Beiträge: 8075 Registriert: 09.03.2006 MS-Office 365 ProPlus x86 WIN7(x64)
|
erstellt am: 19. Jul. 2011 12:42 <-- editieren / zitieren --> Unities abgeben: Nur für hotstaks2005
|
hotstaks2005 Mitglied Elektriker
Beiträge: 142 Registriert: 03.07.2008 EPLAN 5.7 Office 2003
|
erstellt am: 19. Jul. 2011 13:28 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von hotstaks2005: ActiveCell.FormulaR1C1 = _ "=VLOOKUP(RC[-1],'Nummer_01_VBG.xls'!C[10],1,FALSE)" 'statt TB-Name Tabelle1 da Name immer anders Range("C2").Select ActiveCell.FormulaR1C1 = _ "=VLOOKUP(RC[-2],'Nummer_01_VBG.xls'!C[14],1,FALSE)" 'statt TB-Name Tabelle1 da Name immer anders [/B]
Mal eine Nachfrage; im obigen Code erstelle ich in Zelle C2 ja einen SVerweis. Kann ich an dieser Stelle überhaubt den Tabellennamen austauschen? Sollte ich nicht besser die Namen der Tabellen auslesen und diese verwenden? Danke Wolfgang ------------------ Immer wieder neu lernen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Paulchen Mitglied Bauing./SW-Entwickler
Beiträge: 1227 Registriert: 19.08.2004 Büro: Win10 Enterprise 64bit, Office Professional Plus 2013 - Privat: Linux Mint 15, LibreOffice
|
erstellt am: 19. Jul. 2011 13:43 <-- editieren / zitieren --> Unities abgeben: Nur für hotstaks2005
Hi, Zitat: Kann ich an dieser Stelle überhaubt den Tabellennamen austauschen?
Ja, warum nicht? Es ist das gleiche, als ob Du die Formel per Hand in die Zelle schreiben würdest. Natürlich müssen die Bereiche stimmen, die Namen existieren etc. - sonst Fehler. Zitat: Sollte ich nicht besser die Namen der Tabellen auslesen und diese verwenden?
"Besser" - nunja, schwer zu sagen. Kommt darauf an, was Du später noch vorhast. Flexibler wärst Du damit vermutlich schon, und sicherer, und besser nachzuvollziehen, falls Du da in 17 Monaten nochmal ran musst... Obacht: Sollte jemand (Du?) die Namen der Register in Excel später ändern, kracht's auch. ------------------ DIN1055.de | Lastannahmen für Anwender Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
hotstaks2005 Mitglied Elektriker
Beiträge: 142 Registriert: 03.07.2008 EPLAN 5.7 Office 2003
|
erstellt am: 19. Jul. 2011 13:59 <-- editieren / zitieren --> Unities abgeben:
Hallo Paulchen, Bei einem SVERWEIS definiere ich eine Matrix (Nummer_01_Name1.xls); hier weiß Excel dann in welcher Tabelle gesucht wird. Meine Frage: Kann ich der Matrix auch den Internen Tabellennamen "Tabelle1" geben? Hintergrund: Namen der 1. und 2. Tabellen sind immer anders; deshalb der Versuch auf den internen Tabellennamen zuzugreifen. ------------------ Immer wieder neu lernen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Paulchen Mitglied Bauing./SW-Entwickler
Beiträge: 1227 Registriert: 19.08.2004 Büro: Win10 Enterprise 64bit, Office Professional Plus 2013 - Privat: Linux Mint 15, LibreOffice
|
erstellt am: 19. Jul. 2011 14:34 <-- editieren / zitieren --> Unities abgeben: Nur für hotstaks2005
Hmja, geht. Lass' mal das hier mit F5 laufen und sieh Dir die Ausgabe an. Code: Sub test() Sheets(1).Select Debug.Print "Aktiv: " & ActiveSheet.Name Sheets(2).Select Debug.Print "Aktiv: " & ActiveSheet.Name Debug.Print "INaktiv: " & Sheets(1).Name Debug.Print "Name Tab1: " & Tabelle1.Name 'egal, an welcher Position End Sub
Es ändert sich natürlich alles, wenn Du die Reihenfolge Deiner Register vertauschst: Dann greift Sheets vermeintlich falsch, und Du kommst nur noch mit dem VBA-internen Namen ran. (Keine Ahnung, wie das in Wirklichkeit heißt - jedenfalls der Name des Registers vor der Klammer in VBA.) Siehe auch Hilfe zu Sheets().------------------ DIN1055.de | Lastannahmen für Anwender Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
hotstaks2005 Mitglied Elektriker
Beiträge: 142 Registriert: 03.07.2008 EPLAN 5.7 Office 2003
|
erstellt am: 19. Jul. 2011 16:48 <-- editieren / zitieren --> Unities abgeben:
Hi - ich noch mal. Per VBA schreibe ich in Tabelle2 in Zelle B2 den SVERWEIS: =SVERWEIS(A2;'Nummer_01_Name1.xls'!L:L;1;FALSCH) Wenn der Tabellenname auch 'Nummer_01_Name1.xls' ist, dann kein Problem. Da sich der Tabellenname 'Nummer_01_Name1.xls' bei jedem Projekt ändert möchte ich per VBA sowas schreiben: =SVERWEIS(A2;'Tabelle1'!L:L;1;FALSCH) Hierbei kommt natürlch der Hinweis "NV"; klar Tabelle1 findet der Sverweis nicht. Wie kann ich dem Sverweis beibringen das er den internen Namen der Tabelle "Tabell1" nimmt? Danke für Eure Mithilfe Wolfgang ------------------ Immer wieder neu lernen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Paulchen Mitglied Bauing./SW-Entwickler
Beiträge: 1227 Registriert: 19.08.2004 Büro: Win10 Enterprise 64bit, Office Professional Plus 2013 - Privat: Linux Mint 15, LibreOffice
|
erstellt am: 19. Jul. 2011 17:05 <-- editieren / zitieren --> Unities abgeben: Nur für hotstaks2005
|
hotstaks2005 Mitglied Elektriker
Beiträge: 142 Registriert: 03.07.2008 EPLAN 5.7 Office 2003
|
erstellt am: 20. Jul. 2011 10:40 <-- editieren / zitieren --> Unities abgeben:
|
Comos User Mitglied
Beiträge: 112 Registriert: 23.03.2010
|
erstellt am: 21. Jul. 2011 13:35 <-- editieren / zitieren --> Unities abgeben: Nur für hotstaks2005
Hallo, nun mal Butter bei die Fische natürlich läß sich in VBA jedes Object (und nichts anderes ist ein Sheed) mit dem Codename ansprechen. Der Vorteil ist: der Codename kann zur Laufzeit nicht geändert werden. Er ist also konstant, genau das was dich interessiert. SVerweis bzw. VLOOKUP ist jedoch ein Formelausdruck, und der versteht das nicht! ist ja nicht objektorientiert. Also kombinieren: Code: Sub Querverweis() ' ' Dim TAB1 As String Tabelle3.Columns("I:I").Copy Destination:=Tabelle2.Range("A1") Tabelle2.Columns("A:A").Sort Key1:=Tabelle2.Range("A2"), Order1:=xlAscending, Header:=xlYes, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ DataOption1:=xlSortNormal Tabelle2.Range("A1:A285").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("B1"), Unique:=True Tabelle2.Columns("A:A").Delete Shift:=xlToLeft TAB1 = Tabelle1.Name Tabelle2.Range("B2:B28").FormulaR1C1 = "=VLOOKUP(RC[-1],'" & TAB1 & "'!C[10],1,FALSE)" Tabelle2.Range("c2:c28").FormulaR1C1 = "=VLOOKUP(RC[-2],'" & TAB1 & "'!C[14],1,FALSE)" End Sub
Den unseligen Code des Makrogenerators habe ich mal gestrafft. Kugst du hier:http://www.online-excel.de/excel/singsel_vba.php?f=78 Da du deine Aufgabenstellung nicht genau angegeben hast, bin ich nicht sicher ob alles so ist wie es seien soll Gruß Peter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Pflichtpraktikum - Gebäudemanagement / Facility Management & Energieversorgungskonzepte - REF54013M | Continental entwickelt wegweisende Technologien und Dienste für die nachhaltige und vernetzte Mobilität der Menschen und ihrer Güter. Das 1871 gegründete Technologieunternehmen bietet sichere, effiziente, intelligente und erschwingliche Lösungen für Fahrzeuge, Maschinen, Verkehr und Transport. Continental erzielte 2022 einen Umsatz von 39,4 Milliarden Euro und beschäftigt aktuell rund 200.000 Mitarbeiterinnen und Mitarbeiter in 57 Ländern und Märkten.... | Anzeige ansehen | Gebäude-, Versorgungs-, Sicherheitstechnik |
|
hotstaks2005 Mitglied Elektriker
Beiträge: 142 Registriert: 03.07.2008 EPLAN 5.7 Office 2003
|
erstellt am: 02. Aug. 2011 15:40 <-- editieren / zitieren --> Unities abgeben:
Hi CAD.de User und Excelfans, an dieser Stelle mal wieder meinen besten Dank für die Hilfestellung. Rückmeldung ob es erfolgreich war erst jetzt da ich in Urlaub war. Hallo Comos User - deine Antwort löste meine Fragestellung - Danke. Schönen Tag noch. Hotsteaks ------------------ Immer wieder neu lernen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |