Die ASB-Bundesliga-Tippliga 2022/23 startet! Alle Infos findet ihr hier. Jetzt mittippen! :super:

Jump to content
Indurus

Excel Frage

496 posts in this topic

Recommended Posts

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?

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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.

Edited by lx99

Share this post


Link to post
Share on other sites

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?

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

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

Edited by jojoba

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Join the conversation

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

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

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

Loading...


×
×
  • Create New...