Supportnet Computer
Planet of Tech

Supportnet / Forum / Tabellenkalkulation

VBA Problem





Frage

Hallo zusammen, ich habe wieder mal ein kleines Problem mit einen VBA Code, der so weit auch funktioniert nur müsste ich da eine kleine Änderung einbauen. Da wo jetzt "test.xls" und "test-neu.xls" steht soll jeweils der Datei-Name aus einer Zelle R4 und R5 vom TabellenBlatt3 übernommen werden. Im voraus vielen Dank. Workbooks("test.xls").Sheets("Safebags").Cells(Ende, 5) = Workbooks("test-neu.xls").Sheets("Wechsler").Range("B7").Value mfg Achim

Antwort 1 von Hajo_Zi

Hallo Achim,

With Worksheets("TabellenBlatt3")
Workbooks(.Range("r4")).Sheets("Safebags").Cells(Ende, 5) = Workbooks(.Range("R5")).Sheets("Wechsler").Range("B7").Value
End With

Gruß Hajo

Antwort 2 von achim71

Hallo Hajo,

Danke erst mal für deine Hilfe, aber leider funktioniert das ganze noch nicht und zwar kommt bei folgender Zeile With Worksheets("TabellenBlatt3") , folgender fehler :Laufzeitfehler 9
Index außerhalb des gültigen Bereichs.

Ich hoffe du kannst mir da weiter helfen.
Mit TabellenBlatt3 meinte ich natürlich Tabelle3 in einer Mappe.


Gruß
Achim

Antwort 3 von Hajo_Zi

Hallo Achim,

in Deiner Datei gibt es keine Tabelle mit dem Namen "TabellenBlatt3" wie es in Deinem ersten Beitrag Stand. Ändere den Namen.

Gruß Hajo

Antwort 4 von achim71

Hallo Hajo,

bin so eben auch auf den Fehler gekommen, ich hatte leider Vergessen das es sich um zwei Mappen handelt, die erste in den der VBA Code steht wo die eingaben gemacht werden, die zweite in der die Daten übertragen werden.
folgend nun ein teil des VBA Code:

Workbooks.Open Filename:=Range("o1")
Ende = Workbooks("test1.xls").Sheets("Tabelle1").Range("B38").End(xlUp).Offset(1, 0).Row


Workbooks("test1.xls").Sheets("Tabelle1").Cells(Ende, 5) = Workbooks("test2.xls").Sheets("Tabelle3").Range("B7").Value

Workbooks("test1.xls").Sheets("Tabelle1").Cells(Ende, 3) = Workbooks("test2.xls").Sheets("Tabelle3").Range("C1").Value



Workbooks("test1.xls").Sheets("Tabelle1").Cells(Ende, 4) = Workbooks("test2.xls").Sheets("Tabelle3").Range("F3").Value

Workbooks("test1.xls").Sheets("Tabelle1").Cells(Ende, 2) = Workbooks("test2.xls").Sheets("Tabelle3").Range("F44").Value

nun soll da wo test1.xls steht der Wert ( Name der Datei ) von zelle r4 aus test2.xls und wo test2.xls der Wert ( Name der Datei ) von Zelle r5 aus test2.xls stehen.
Ich hoffe ich konnte mich nun einigermaßen verständlich ausdrücken was ich erreichen möchte.

Grüß und schönen Abend
Achim

Antwort 5 von Hajo_Zi

Hallo Achim,

ich hoffe mal ich habe es richtig interpretiert.
With Workbooks("Datei1.xls").Worksheets("TabellenBlatt3")
Workbooks(.Range("r4")).Sheets("Safebags").Cells(Ende, 5) = Workbooks(.Range("R5")).Sheets("Wechsler").Range("B7").Value
End With

Dateiname und Tabellennamen anpassen

Gruß Hajo

Antwort 6 von achim71

Hallo Hajo,

Erst mal Danke das du dich meinem Problem an nimmst.
anbei der Orginal Code:
Der VBA Code wird in der Vorlage-neu.xls durch ein Button gestartet, es wird nun eine Datei Names Safebagsauflistung.xls geöffnet und dann werden die Daten von der Vorlage-neu.xls übertragen und abgespeichert.
Nun soll aber überall da wo Safebagauflistung.xls und Vorlage-neu.xls steht, die Werte ( Dateinamen ) aus der Vorlage-neu.xls von Zelle R4 und R5 übernomen werden, da sich die Dateinamen ändern können und die in den zwei Zellen geschrieben werden.
Ich hoffe ich verlange nicht zu viel.

Dim name, Ende, Bereich

Application.ScreenUpdating = False
name = Range("o1")
Workbooks.Open Filename:=Range("o1")
Ende = Workbooks("Safebagauflistung.xls").Sheets("Safebags").Range("B38").End(xlUp).Offset(1, 0).Row

Workbooks("Safebagauflistung.xls").Sheets("Safebags").Cells(Ende, 5) = Workbooks("Vorlage-neu.xls").Sheets("Wechsler").Range("B7").Value
Workbooks("Safebagauflistung.xls").Sheets("Safebags").Cells(Ende, 3) = Workbooks("Vorlage-neu.xls").Sheets("Wechsler").Range("C1").Value
Workbooks("Safebagauflistung.xls").Sheets("Safebags").Cells(Ende, 4) = Workbooks("Vorlage-neu.xls").Sheets("Wechsler").Range("F3").Value
Workbooks("Safebagauflistung.xls").Sheets("Safebags").Cells(Ende, 2) = Workbooks("Vorlage-neu.xls").Sheets("Wechsler").Range("F44").Value
i = MsgBox("SpeichernAktion kann nicht rückgängig gemacht werden!" & Chr(13) & _
"" & Chr(13) & _
"Sicher? Dann OK, sonst ABBRECHEN" & Chr(13), 1 + vbExclamation, "Festwerte in neue Datei speichern")
Rem wenn Abbrechen angeklickt, makroende
If i = 2 Then Exit Sub
Rem SpeichernDialog aufrufen
ActiveWorkbook.SaveAs lw_pfad & ActiveSheet.Range("p1").Value & ".xls"
MsgBox "Die Datei wurde unter " & lw_pfad & ActiveSheet.Range("p1").Value & ".xls gespeichert.", , "OK"
End If
Application.ScreenUpdating = True


Gruß
Achim

ich komme einfach nicht weiter, so ein sch....

Antwort 7 von Hajo_Zi

Hallo Achim,

Deine Code passrt nicht zu Diner Beschreibung. In DEinem Code steht nirgen R4 oder R5.

Einen Code den man postet sollte schon lauffähig sein. Also alle Variablen definiert und kein End If zu viel.
Es sollten auch paar Kommentare drin sein.
Du öffnest die Datei
Workbooks.Open Filename:=Range("o1")
im weiteren verlaufd wird aber von

Workbooks("Safebagauflistung.xls") und Workbooks("Vorlage-neu.xls") gesprochen. Woz wurde die Datei geöffnt?

Gruß Hajo

Antwort 8 von achim71

Hallo Hajo,


hier jetzt der ganze VBA Code der auch so weit läuft.
Nur kann sich die Datei "Kassierliste-Vorlage-neu.xls" leider auch ändern zB. " abc.xls " und das soll nun in dem VBA Code berücksichtigt werden.


Sub Safebagübertragen()

Rem Abfrage ob in Zelle F44 was steht

If Sheets("Wechsler").Range("F44") = "" Then MsgBox ("Safebag Nr. muß noch eingeben werden!"): Exit Sub
Application.ScreenUpdating = False
Dim lw_pfad As String
lw_pfad = ActiveSheet.Range("o1").Value
lw_pfad = InputBox("Geben Sie hier das Laufwerk und den Pfad an, wo die Datei gespeichert werden soll ( z.B. c:\test\06 ). " & Chr(13) & Chr(13) & "(Ihre Eingabe wird in de Zelle O1 als neuer Default-Wert gespeichert.)", "Datei speichern unter...", lw_pfad)
If lw_pfad = "" Then
MsgBox "Die Datei wird nicht gespeichert, da Sie [Abbrechen] gedrückt oder nichts eingegeben haben.", , "Abbruch"
Exit Sub
Else
If Right(lw_pfad, 1) <> "\" Then lw_pfad = lw_pfad
ActiveSheet.Range("o1").Value = lw_pfad

Rem Speicherort fertig, Ordner anlegen

If Dir(Range("o1"), vbDirectory) = "" Then
MkDir (Range("o1"))
MsgBox "Ordner wurde angelegt!"
Else
MsgBox "Ordner ist bereits vorhanden!"
End If

Rem Ordner anlegen ferig


Dim name, Ende, Bereich

Rem Datei die Safebagauflistung.xls öffnen

Workbooks.Open Filename:="Safebagauflistung.xls"

Rem letzte frei Zeile in der Datei finden

Ende = Workbooks("Safebagauflistung.xls").Sheets("Safebags").Range("B38").End(xlUp).Offset(1, 0).Row

Rem Daten von Kassierliste-Vorlage-neu.xls in Safebagauflistung.xls übertragen

Workbooks("Safebagauflistung.xls").Sheets("Safebags").Cells(Ende, 5) = Workbooks("Kassierliste-Vorlage-neu.xls").Sheets("Wechsler").Range("B7").Value
Workbooks("Safebagauflistung.xls").Sheets("Safebags").Cells(Ende, 3) = Workbooks("Kassierliste-Vorlage-neu.xls").Sheets("Wechsler").Range("C1").Value
Workbooks("Safebagauflistung.xls").Sheets("Safebags").Cells(Ende, 4) = Workbooks("Kassierliste-Vorlage-neu.xls").Sheets("Wechsler").Range("F3").Value
Workbooks("Safebagauflistung.xls").Sheets("Safebags").Cells(Ende, 2) = Workbooks("Kassierliste-Vorlage-neu.xls").Sheets("Wechsler").Range("F44").Value

i = MsgBox("SpeichernAktion kann nicht rückgängig gemacht werden!" & Chr(13) & _
"" & Chr(13) & _
"Sicher? Dann OK, sonst ABBRECHEN" & Chr(13), 1 + vbExclamation, "Festwerte in neue Datei speichern")
Rem wenn Abbrechen angeklickt, makroende
If i = 2 Then Exit Sub
Rem SpeichernDialog aufrufen
ActiveWorkbook.SaveAs lw_pfad & ActiveSheet.Range("p1").Value & ".xls"
MsgBox "Die Datei wurde unter " & lw_pfad & ActiveSheet.Range("p1").Value & ".xls gespeichert.", , "OK"
End If
Application.ScreenUpdating = True
If Sheets("Safebags").Range("B38") = "" Then: Exit Sub
If Sheets("Safebags").Range("B37") >= 0 Then MsgBox ("Die liste ist voll, bitte Speichen sie die Liste unter einen neuen Namen ab. Die alte Liste wird danach gelöscht.!")
i = MsgBox("SpeichernAktion kann nicht rückgängig gemacht werden!" & Chr(13) & _
"" & Chr(13) & _
"Sicher? Dann OK, sonst ABBRECHEN" & Chr(13), 1 + vbExclamation, "Festwerte in neue Datei speichern")
Rem wenn Abbrechen angeklickt, makroende
If i = 2 Then Exit Sub
Rem SpeichernDialog aufrufen
Neuer_Dateiname = Application.GetSaveAsFilename(InitialFileName:="", fileFilter:="Excel-Arbeitsmappe, *.xls")
If Neuer_Dateiname = False Then Exit Sub
ActiveWorkbook.SaveAs Filename:=Neuer_Dateiname

Workbooks.Open Filename:=name
Range("B3:E38").Select
Selection.ClearContents
Range("F1").Select
Workbooks("Safebagauflistung.xls").Save
Workbooks("Safebagauflistung.xls").Close
Application.ScreenUpdating = True
End Sub

Vielen Dank für deine Hilfe.
Gruß und einen schönen Sonntag

Achim

Antwort 9 von Hajo_Zi

Hallo Achim,

ich habe keine Glaskugel, Du hast immer noch nichts dazu geschrieben was die geöffnete Datei mit dem Code zu tun hat und was das für 2 andere Dateien sind. Ich sehe nur das was Du hier im Forum schreibst.
Ich habe mir Deinen Code jetzt nicht angesehen.


Gruß Hajo

Antwort 10 von achim71

Hallo Hajo,

Sorry, ich versuche jetzt mein Problem genauer zu erklären.

Die Datei Kassierliste-Vorlage-neu.xls ist eine reine Eingabe Datei, wenn die Eingaben gemacht worden sind wird ein Button gedrückt und der VBA Code wird ausgeführt. Dadurch wird die Datei Safebagauflistung.xls geöffnet und die Daten von Kassierliste-Vorlage-neu.xls werden in die Datei Safebagauflistung.xls übertragen und danach wird die Datei wieder gespeichert als Safebagauflistung.xls gespeichert.

Mir geht es nun darum die Datei Kassierliste-Vorlage-neu.xls kann sich auch ändern zb. in abc.xls und das müsste in den VBA Code berücksichtigt werden.


Gruß
Achim

Antwort 11 von Hajo_Zi

Hallo Achim,

mir scheint wir kommen nicht zusammen. In Dein er Beschreibung sin feste Namen, die sich aber auch ändern können. Aber keine Erklärung warum.
In dem Code wird aber eine Datei geöffnet deren Name aus einer Zelle kommt.
Ich habe es jetzt paarmal klären, Du kannst es aber nicht so rüber bringen das ich es verstehe.

Ich räume den Platz und lasse andere ran, vielleicht bin ich nun nicht aufnahmefähig. Noch ein schönes Wochenende.

Gruß Hajo

Antwort 12 von JoeKe

Moin Achim,

um die Dateinamen flexibel zu gestallten, übergibt sie einer Variable.

z.B. so:

Dim strQuelle as String
Dim strZiel as String

strQuelle = Range("R4")
strZiel = Range("R5")

Workbooks(strZiel).Sheets("Safebags").Cells(Ende, 5) = Workbooks(strQuelle).Sheets("Wechsler").Range("B7").Value

Gruß

JöKe

Antwort 13 von achim71

Hallo JöKe,

sorry das ich mich jetzt erst Melde, war beruflich Unterwegs.

Danke für Deine Hilfe, dann war meine Beschreibung doch nicht so schlecht, ich hab schon an mir selber gezweifelt.
Aber nun zu deiner Lösung das ist genau das was ich brauchte.



Gruß
Achim

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: