Excel Frage


Indurus

Recommended Posts

Harry Wijnvoord Fußballgott

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?

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Harry Wijnvoord Fußballgott

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".

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Hear me Roar

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.

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Surft nur im ASB

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.

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Hear me Roar

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.

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

  • 4 weeks later...
Postinho

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

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Surft nur im ASB

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 von lx99

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Postinho

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?

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Surft nur im ASB

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.

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Postinho

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 von jojoba

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Surft nur im ASB

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

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Postinho

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

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Lädt...


  • Folge uns auf Facebook

  • Partnerlinks

  • Unsere Sponsoren und Partnerseiten

  • Wer ist Online

    • Keine registrierten Benutzer online.