Indurus Harry Wijnvoord Fußballgott Geschrieben 8. Januar 2013 Ich habe in Zelle A1 den String "Range("B1")=1" stehen. Diesen würde ich gerne in einem Makro 1:1 so als Bedingung in ein If-Statement einbauen, also quasi in den Quellcode pasten. Also: if <Bedingung, exakt so wie sie als String in A1 steht> then <Code> Ist das möglich, wenn ja wie? 0 Zitieren Diesen Beitrag teilen Link zum Beitrag Auf anderen Seiten teilen More sharing options...
samot Hear me Roar Geschrieben 8. Januar 2013 If Cells(1,2).value = 1 then end if ist eine Möglichkeit 0 Zitieren Diesen Beitrag teilen Link zum Beitrag Auf anderen Seiten teilen More sharing options...
Indurus Harry Wijnvoord Fußballgott Geschrieben 8. Januar 2013 Das macht nur in meinem Beispiel Fall das was es soll, aber nicht allgemein. So war es aber nicht gedacht. Es soll jede beliebige Bedingung die als String in A1 steht (also nicht zwangsläufig nur diese eine) im If Statement verwenden, also quasi den String aus A1 in die Bedingung des Codes "kopieren". 0 Zitieren Diesen Beitrag teilen Link zum Beitrag Auf anderen Seiten teilen More sharing options...
samot Hear me Roar Geschrieben 8. Januar 2013 Aso hab ich nicht so genau gelesen. Versuch mal den String aus A1 in eine Variable zu speichern und diese dann in die if bedingung einzusetzen. Weiß aber nicht sicher ob das dann so geht, hab leider momentan wenig Zeit sonst würd ichs mir eh genauer anschauen. 0 Zitieren Diesen Beitrag teilen Link zum Beitrag Auf anderen Seiten teilen More sharing options...
lx99 Surft nur im ASB Geschrieben 8. Januar 2013 Ich würd das in etwa so angehen: Sub Code_aus_Zelle_einfuegen_und_ausfuehren() Dim strCode As String With ThisWorkbook.VBProject.VBComponents("Tabelle1").CodeModule strCode = .Lines(1, 1) If strCode <> "" Then .DeleteLines 1, 4 Call Code_einfuegen End With Call Sheets("Tabelle1").Temp End Sub Sub Code_einfuegen() With ThisWorkbook.VBProject.VBComponents("Tabelle1").CodeModule .InsertLines 1, "'Code Beginn" .InsertLines 2, "Sub Temp" .InsertLines 3, ActiveWorkbook.Sheets(1).Range("A1").Value .InsertLines 4, "End Sub" End With End Sub In meinem Beispiel holt sich das Makro den Programmcode aus Zelle A1 in Tabelle1. Wichtig ist dabei, dass du vorher in den Excel-Optionen "Zugriff auf das VBA-Projektobjektmodell vetrauen" aktivierst. 0 Zitieren Diesen Beitrag teilen Link zum Beitrag Auf anderen Seiten teilen More sharing options...
samot Hear me Roar Geschrieben 8. Januar 2013 Ich würd das in etwa so angehen: Sub Code_aus_Zelle_einfuegen_und_ausfuehren() Dim strCode As String With ThisWorkbook.VBProject.VBComponents("Tabelle1").CodeModule strCode = .Lines(1, 1) If strCode <> "" Then .DeleteLines 1, 4 Call Code_einfuegen End With Call Sheets("Tabelle1").Temp End Sub Sub Code_einfuegen() With ThisWorkbook.VBProject.VBComponents("Tabelle1").CodeModule .InsertLines 1, "'Code Beginn" .InsertLines 2, "Sub Temp" .InsertLines 3, ActiveWorkbook.Sheets(1).Range("A1").Value .InsertLines 4, "End Sub" End With End Sub In meinem Beispiel holt sich das Makro den Programmcode aus Zelle A1 in Tabelle1. Wichtig ist dabei, dass du vorher in den Excel-Optionen "Zugriff auf das VBA-Projektobjektmodell vetrauen" aktivierst. Also ich hätte gedacht, ich hätte schon so ziemlich alles was an VBA Code in Excel möglich ist gesehen, aber auf so eine Idee bin ich noch nicht gekommen. 0 Zitieren Diesen Beitrag teilen Link zum Beitrag Auf anderen Seiten teilen More sharing options...
Indurus Harry Wijnvoord Fußballgott Geschrieben 9. Januar 2013 Danke lx99, das kommt meinem Problem schon sehr nahe und hilft mir weiter! 0 Zitieren Diesen Beitrag teilen Link zum Beitrag Auf anderen Seiten teilen More sharing options...
jojoba Postinho Geschrieben 4. Februar 2013 Hallo Leute, kämpfe da gerade mit Makros. Folgendes: Aus einer Excel Datei sollen bestimmte Werte in ein anderes Excel-Sheet übernommen werden. Die Zellen sollten aber nicht verknüpft werden, sondern nur die Werte übernommen werden. Beispiel unten: Aus der Zelle der Datei 1 soll der Wert ausgwählt (500) und in eine andere Excel Datei 2 kopiert werden. Beim nächsten Mal soll dann der Wert 700 ausgewählt werden und in die andere Excel Datei übernommen werden. Aber: In der ersten Datei ändern sich die Bezugszelle nie (die Werte werden in Datei 1 einfach überschrieben, deswegen 2014 in der Klammer > der 2013 Wert wird einfach durch 2014 überschrieben) In der Datei 2 sollen die Werte jedoch nicht überschrieben werden, sondern in in der nächsten Spalte eingefügt werden. Bsp: Datei 1: 2013: 500 (2014): (700) Datei 2: 2013: 500 2014: 700 Soweit das die Daten von Datei 1 in Datei 2 übernommen werden bin ich ja schon, nur wie schaff ich es, dass die Werte in Datei 2 beim nächsten mal nicht überschrieben werden, sondern in eine neue Spalte geschrieben werden? Gibts jemanden, der meinem Problem halbwegs folgen kann und eine Lösung weiß ? LG 0 Zitieren Diesen Beitrag teilen Link zum Beitrag Auf anderen Seiten teilen More sharing options...
lx99 Surft nur im ASB Geschrieben 4. Februar 2013 (bearbeitet) könnte z.B. so funktionieren: Sub Copy_Test() Dim strWB1 As String Dim strWB2 As String Dim intCol As Integer Workbooks(strWB2).Activate intCol = 1 While Cells(1, intCol).Value <> "" intCol = intCol + 1 Wend Cells(1, intCol).Value = Workbooks(strWB1).Range("A1").Value Cells(1, intCol + 1).Value = Workbooks(strWB1).Range("B1").Value End Sub Im Beispiel gehe ich davon aus, dass die Werte in der ersten Zeile stehen und die Namen der beiden Dateien in den Variablen strWB1 und strWB2 bekannt sind. bearbeitet 4. Februar 2013 von lx99 0 Zitieren Diesen Beitrag teilen Link zum Beitrag Auf anderen Seiten teilen More sharing options...
jojoba Postinho Geschrieben 4. Februar 2013 könnte z.B. so funktionieren: Sub Copy_Test() Dim strWB1 As String Dim strWB2 As String Dim intCol As Integer Workbooks(strWB2).Activate intCol = 1 While Cells(1, intCol).Value <> "" intCol = intCol + 1 Wend Cells(1, intCol).Value = Workbooks(strWB1).Range("A1").Value Cells(1, intCol + 1).Value = Workbooks(strWB1).Range("B1").Value End Sub Im Beispiel gehe ich davon aus, dass die Werte in der ersten Zeile stehen und die Namen der beiden Dateien in den Variablen strWB1 und strWB2 bekannt sind. Danke für die schnelle Antwort. Bin aber absoulter Neuling auf dem Gebiet, daher habe ich noch paar Fragen: Workbooks(strWB2): In die Klammer muss ich dann den Dateipfad schreiben oder? also zB: ("C:\Datei2") Workbooks(strWB1) Pfad von Datei 1? 0 Zitieren Diesen Beitrag teilen Link zum Beitrag Auf anderen Seiten teilen More sharing options...
lx99 Surft nur im ASB Geschrieben 4. Februar 2013 Workbooks(strWB2): In die Klammer muss ich dann den Dateipfad schreiben oder? also zB: ("C:\Datei2") Ja, sollte sowohl absolut ("C:\Datei2.xlsx" ... Hochkommas nicht vergessen) als auch relativ ("Datei2.xlsx") funktionieren. Workbooks(strWB1) Pfad von Datei 1? Korrekt. Ich würde aber die Dateinamen schon vorher den Variablen zuweisen (z.B. strWB1=activeworkbook.name) und im Code selbst nur mehr die Variablen ansprechen. 0 Zitieren Diesen Beitrag teilen Link zum Beitrag Auf anderen Seiten teilen More sharing options...
jojoba Postinho Geschrieben 4. Februar 2013 (bearbeitet) Ja, sollte sowohl absolut ("C:\Datei2.xlsx" ... Hochkommas nicht vergessen) als auch relativ ("Datei2.xlsx") funktionieren. Korrekt. Ich würde aber die Dateinamen schon vorher den Variablen zuweisen (z.B. strWB1=activeworkbook.name) und im Code selbst nur mehr die Variablen ansprechen. Hm.. Also wenn ich - Dim ("C:\Datei2.xlsx") As String - eingebe kommt gleich einmal Syntaxfehler .. Zudem kommt auch immer die Fehlermeldung "Index außerhalb des gültigen Bereiches" bei Cells(1, intCol).Value = Workbooks("C:\Datei2.xlsm").Range("A1").Value bearbeitet 4. Februar 2013 von jojoba 0 Zitieren Diesen Beitrag teilen Link zum Beitrag Auf anderen Seiten teilen More sharing options...
lx99 Surft nur im ASB Geschrieben 4. Februar 2013 Hm.. Also wenn ich - Dim ("C:\Datei2.xlsx") As String - eingebe kommt gleich einmal Syntaxfehler .. Zudem kommt auch immer die Fehlermeldung "Index außerhalb des gültigen Bereiches" bei Cells(1, intCol).Value = Workbooks("C:\Datei2.xlsm").Range("A1").Value Die Variablen für die Dateinamen sind bereits dimensioniert: Dim strWB1 As String Dim strWB2 As String Du musst sie nur mehr setzen - z.B.: strWB1="C:\Datei1.xlsm" strWB2="C:\Datei2.xlsm" Die Werte kopierst du mit Cells(1, intCol).Value = Workbooks(strWB1).Range("A1").Value oder alternativ, falls das Fenster mit der Zieldatei nicht im Vordergrund ist mit Workbooks(strWB2).ActiveSheet.Cells(1, intCol).Value = Workbooks(strWB1).Range("A1").Value Achtung: Die Variable intCol muss vor der ersten Verwendung bereits einen gültigen Wert zugewiesen bekommen intCol = 1 0 Zitieren Diesen Beitrag teilen Link zum Beitrag Auf anderen Seiten teilen More sharing options...
jojoba Postinho Geschrieben 4. Februar 2013 intCol).Value = Workbooks(strWB1).Range("A1").Value Da bekomme ich aber immer die Meldung: Index außerhalb des gültigen Bereiches?! Sub Test() Dim strWB1 As String Dim strWB2 As String strWB1 = "C:\Datei1.xlsm" strWB2 = "C:\Datei2.xlsm" Dim intCol As Integer intCol = 1 While Cells(1, intCol).Value <> "" intCol = intCol + 1 Wend Cells(1, intCol).Value = Workbooks(strWB1).Range("A1").Value Cells(1, intCol + 1).Value = Workbooks(strWB1).Range("B1").Value End Sub 0 Zitieren Diesen Beitrag teilen Link zum Beitrag Auf anderen Seiten teilen More sharing options...
lx99 Surft nur im ASB Geschrieben 4. Februar 2013 OK...kurz mal nachgefragt... - in welcher Datei liegt das Makro? - welchen Wert hat intCol nach der While-Schleife? 0 Zitieren Diesen Beitrag teilen Link zum Beitrag Auf anderen Seiten teilen More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.