Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1480to1484
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

makro sheet.activate

makro sheet.activate
17.03.2016 13:01:56
mucki4
Hallo Leute,
ich habe folgendes Problem bei meinem Makro, vielleicht kann ja jemand helfen.
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
' Makro2 Makro
'
Dim ZielZelle As Range
Dim ZielZeile As Integer
Dim ZielSpalte As Integer
Dim Taktnummer As Range
Dim wb As Workbook
Set wb = Workbooks.Open("P:\...)
Windows("Bewertungsbogen 2.xlsm").Activate
Sheets("Bewertungsbogen").Select
Range("L6:L7").Select
Selection.Copy
Set Taktnummer = Range("L6:L7")
wb.Activate
Sheets("Tabelle1").Select
Cells.Find(What:=Taktnummer, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Activate

zunächst kann ich den Code nicht per einzelschritt debuggen sondern lediglich durchs speichern auslösen. gibt es dafür einen bestimmten Grund?
Mein Hauptproblem ist aber, dass der Befehl Sheets("Tabelle1").Select nicht funktioniert. Da zeigt er an "Laufzeitfehler 9, Index außerhalb des gültigen Bereichs". Das sheet "Tabelle1" befindet sich in dem Dokument "wb"
Ich hatte den Code vorher bereits in einem "normalen" Sub geschrieben also nich mit der beforeSave funktion, da hat er funktioniert, allerdings mit der Einschränkung, dass er beim Einzelschritt debuggen nach:
"Dim wb As Workbook
Set wb = Workbooks.Open("P:\...)

automatisch sämtliche Befehle ( der Code geht nach meinem Ausschnitt noch etwas weiter) ausgeführt hat und das debuggen beendet hat.
Bin relativ neu auf dem Gebiet und deshalb um jede hilfe dankbar.
Danke schon mal im Vorraus
Gruß

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: makro sheet.activate
17.03.2016 13:39:07
ChrisL
Hi
Makros lassen sich "abspielen". Ereignisse nicht, weil es eben Ereignisse sind und keine Makros. OK, Begründung mangelhaft aber ist auch egal :)
Select und Activate sind (fast) immer überflüssig. Vermutlich hilft eine saubere Referenzierung d.h. Bereiche unter Angabe von Mappen- und Tabellennamen eindeutig ansprechen.
z.B.
Worksbooks("Bewertungsbogen 2.xlsm").Sheets("Bewertungsbogen").Range("L6:L7").Copy
z.B.
wb.Sheets("Tabelle1").Cells.Find(What:=Taktnummer, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Activate
Mit Taktnummer ist was komisch
Set Taktnummer = Range("L6:L7")
Unklar auf welche Mappe und Tabelle sich der Bereich beziehen soll. Ausserdem stellt dies dein Suchbegriff dar. Suchbegriffe können nicht über mehrere Zellen gehen.
Leider sind die Code-Schnipsel etwas zusammenhangslos. Ich würde dir empfehlen, den Code von Grund auf neu aufzubauen in etwa nach diesem Muster:
https://www.herber.de/forum/messages/1482390.html
d.h. Mappe 1 und 2, sowie Tabelle 1 und 2 erst einmal sauber definieren und danach referenzierst du konsequent mit diesen Variablen.
cu
Chris

Anzeige
AW: makro sheet.activate
22.03.2016 08:50:33
mucki4
Hi,
danke schonmal für die Hilfe.
Ich hatte auch schon mit dem Gedanken gespielt das alles nochmal neu zu machen. Was mich nur verwirrt ist, dass der gleiche Code in einem "einfachen" Modul einwandfrei funktioniert. Nur in verbindung mit dem BeforeSave kann er das Sheet nicht mehr öffnen.
Bei Taktnummer sind L6 und L7 verbundenen Zellen, also quasi nur eine. Müsste die tabelle nicht klar sein, weil ich vorher Bewertungsbogen öffne und auch da die Werte kopiere? Auch das hat ja wie gesagt im Modul vorher funktioniert.
Gruß

AW: makro sheet.activate
22.03.2016 17:36:20
ChrisL
Hi Muki
Eine Ferndiagnose ist schwierig. Lade eine Beispielmappe hoch.
Der Fehler lässt wie gesagt auf fehlende Referenzierung schliessen d.h. Tabelle1 ist nicht vorhanden. Vermutlich ist nicht die richtige Mappe aktiv (auch wenn sie vermeindlich aktiv scheint). Darum sollten die ganzen Select und Activate weg.
Warum es einmal geht und einmal nicht, kann ich aus der Ferne auch nicht sagen. Aber eben, packe das Problem an der Wurzel an.
cu
Chris

Anzeige
AW: makro sheet.activate
24.03.2016 08:27:58
mucki4
HI Chris,
ich habe nochmal versucht ein paar von deinen Tipps umzusetzen, das hat auch soweit ganz gut funktioniert^^. Er geht den Code jetzt beim speichern ganz durch und trägt die werte aus "Bewertungsbogen 2" in "Berechnungstabelle 2" ein. Problem: Er tut das an der falschen Stelle.
Liegt wahrscheinlich irgendwie an der Variablen "Taktnummer" oder? Da hattest du ja gleich gesagt stimmt was nicht mit. Code sieht jetzt wie folgt aus:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
' Makro2 Makro
Dim ZielZelle As Range
Dim ZielZeile As Integer
Dim ZielSpalte As Integer
Dim Taktnummer As Range
Dim wb As Workbook
'Quellmappe öffnen und der Variable wb zuweisen
Set wb = Workbooks.Open("P:\TD-4_Montage\TD-44_Karosseriemontage_H52\98_Transfer\ _
Eingang\Prenzer\Bachelorarbeit\Berechnungstabelle 2.xlsm")
Workbooks("Bewertungsbogen 2.xlsm").Sheets("Bewertungsbogen").Range("L6:L7").Copy
Set Taktnummer = Range("L6:L7")
wb.Sheets("Tabelle1").Cells.Find(What:=Taktnummer, After:=ActiveCell, LookIn:=xlFormulas,  _
LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Activate
ZielZeile = ActiveCell.Row
ZielSpalte = ActiveCell.Column
Workbooks("Bewertungsbogen 2.xlsm").Sheets("Bewertungsbogen").Activate
Range("O1:O7").Select
Application.CutCopyMode = False
Selection.Copy
Workbooks("Berechnungstabelle 2.xlsm").Sheets("Tabelle1").Activate
Cells(ZielZeile, ZielSpalte + 2).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True
End Sub
Ich habe auch schon versucht die Range bei Taktnummer genauer zu definieren wie zum beispiel:
set Taktnummer = Workbooks("Bewertungsbogen 2.xlsm").Sheets("Bewertungsbogen").Range("L6:L7")
oder mit Range("L6:L7").value
Hab auch mal die Variable Tatknummer als variant deklariert.
Aber dann kamen wieder Fehlermeldungen.
Oder leigt das Problem darin die richtige Zelle dann als aktive Zelle zu definieren? Wobei ich per Exit sub mal bur den oberen Teil habe durchlaufen lassen und er gar nicht erst in die richtige Zelle springt.
Vielleicht weißt du ja noch einen Rat :)
Vielen Dank schonmal
Gruß
Lukas
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige