Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1300to1304
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

modulaufruf per Commandbutton vs. einzelne Makros

modulaufruf per Commandbutton vs. einzelne Makros
04.03.2013 16:40:45
Rene
Hallo Leute,
ich habe 6 Module erstellt, in denen ich 1 Makro bzw. 3 Makros stehen habe. Wenn ich nun per commandbutton alle Module nacheinander laufen lasse bekomme ich ein anderes Ergebnis, als wenn ich die Module einzeln nacheinander abspiele. Liegt das vielleicht daran, dass ich in jedem einzelnen Modul den gleichen Begriff "dimme" - also Dim wks, arrwks pro Modul? Ein Auszug der Module folgt.
Danke Euch & Grüße
Rene
Commandbutton sieht so aus:
Private Sub CommandButton1_Click()
Call BlattschutzAus
Call SpaltenEinblenden
Call Rest
End Sub
Modul 1
Sub BlattschutzAus()
Dim wks As Worksheet
For Each wks In ThisWorkbook.Sheets
If wks.ProtectContents Then
wks.Unprotect "test"
End If
Next wks
End Sub Modul2
Sub SpaltenEinblenden()
Dim wks, arrwks
arrwks = Array(Worksheets("tabelle1"), Worksheets("tabelle2"), Worksheets("tabelle3"))
For Each wks In arrwks
wks.Range("A:BT").EntireColumn.Hidden = False
Next wks
End Sub Modul3 => hier passiert dann das "Mysterium", indem der einzelne Code etwas anderes macht als über den Aufruf per Commandbutton?!!
Sub Rest()
Dim StM, FM, VM as Date
Dim wks, arrwks
arrwks = Array(Worksheets("tabelle1"), Worksheets("tabelle2"), Worksheets("tabelle3"))
FM= DateSerial(Year(Date), Month(Date), 1)
StM = DateSerial(Year(Date), Month(Date) - 14, 1)
VM = DateSerial(Year(Date), Month(Date) - 1, 1)
E = Application.Match(CLng(FM), Range("A4:BT4"), 0)
A = Application.Match(CLng(StM), Range("A4:BT4"), 0)
M = Application.Match(CLng(VM), Range("A4:BT4"), 0)
For Each wks In arrwks
With wks
If wks.ProtectContents Then
wks.Unprotect "test"
End If
wks.Range("A:BT").EntireColumn.Hidden = False
If IsError(SpalteE) Then
MsgBox "Fehler"
Else
.Range("B:BT").ColumnWidth = 15
.Range(.Cells(4, E), .Cells(1, 72)).EntireColumn.Hidden = True
End If
If IsError(A) Then
MsgBox "Fehler"
Else
.Range(.Cells(1, 2), .Cells(4, A)).EntireColumn.Hidden = True
End If
End With
Next wks
End Sub

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: modulaufruf per Commandbutton vs. einzelne Makros
04.03.2013 16:50:20
Rudi
hallo,
das
E = Application.Match(CLng(FM), Range("A4:BT4"), 0)
A = Application.Match(CLng(StM), Range("A4:BT4"), 0)
M = Application.Match(CLng(VM), Range("A4:BT4"), 0)
bezieht sich immer auf das aktive Blatt, also das mit dem Button.
Gruß
Rudi

AW: modulaufruf per Commandbutton vs. einzelne Makros
04.03.2013 19:22:09
Rene
Servus Rudi,
wie muss ich das Application.Match anpassen, sodaß es nur auf das worksheet angewendet wird? Oder soll ich den "Dim-Teil" mit in meinen Commandbutton reinsetzen?
Danke Dir nochmal!
Rene

Hier läuft ja wohl verständnismäßig ...
04.03.2013 20:42:52
Luc:-?
…einiges verquer, Rene!
1. hat Rudi dir nur mitgeteilt, worauf sich das 2.Argument von Match in deinem PgmCode stets bezieht;
2. ist in diesem Zusammenhang nicht recht klar, was du mit deiner 1.Frage zum Ausdruck bringen willst und …
3. wird deine 2.Frage hierbei vollends unverständlich, abgesehen davon, dass man keinen "Dim-Teil" in einen Commandbutton reinsetzen kann — physisch!
Gruß Luc :-?

Anzeige
AW: Hier läuft ja wohl verständnismäßig ...
05.03.2013 10:20:03
Rene
Hallo Luc,
dann versuche ich mal, da etwas "Licht" hineinzubringen :-)
zu 1.
mein Verständnis ist folgendes:
Im Tabellenblatt x habe ich den Commandbutton reingesetzt. Da ist sonst kein weiterer Code enthalten. Von diesem Blatt aus werden die Module aufgerufen, also interpretiere ich Rudi's Nachricht so, dass in genau diesem Blatt (=aktives Blatt) sowohl ein Datum als auch die Suchzeile A4:BT4 enthalten sein müsste, um das Application.Match(CLng(FM), Range("A4:BT4"), 0) erfolgreich abzuspielen. Das ist aber nicht so, denn das Datum & Suchzeile sind in den Tabellenblättern 1-3 enthalten, welche ich dann als array & wks ansteuern möchte.
zu 2.
aus obigem ergibt sich dann meine Frage, was genau ich im aktiven Blatt mit dem CommandButton anpassen muss, sodaß mir der Aufruf der Codes nacheinander erfolgreich durchläuft. Als absoluter VBA-Laie weiss ich nicht, warum der Aufruf von Makros über den CommandButton ein anderes Ergebnis bringt, als der einzelnen Aufruf jedes einzelnen Makros?! Deswegen habe ich alle codes gepostet.
zu 3.
Danke für die Info, denn -wie geschrieben- kenne ich mich gar nicht aus und ziehe mir jegliche Infos aus dem Archiv und lerne daraus.
Leider ist das Problem weiterhin offen und ich wäre Dir für Deine Hilfe sehr dankbar!
VG
Rene

Anzeige
AW: Hier läuft ja wohl verständnismäßig ...
05.03.2013 11:47:58
fcs
Hallo Rene,
mit folgenden Anpassungen sollte es funktionieren, d.h. die Nummer der Soalten wird in dem Blatt gesucht, in dem die Spalten ein-/ausgeblendet werden sollen.
Gruß
Franz
P.S.: Wenn man schon mit With Object bzw. Objektvariable arbeitet, dann sollte man auch konsequent den Bezug zum Objekt mit dem vorangestellten Punkt herstellen und die Variable nicht permanent wiederholen.
Sub Rest()
Dim StM, FM, VM As Date
Dim wks, arrwks
arrwks = Array(Worksheets("tabelle1"), Worksheets("tabelle2"), Worksheets("tabelle3"))
FM = DateSerial(Year(Date), Month(Date), 1)
StM = DateSerial(Year(Date), Month(Date) - 14, 1)
VM = DateSerial(Year(Date), Month(Date) - 1, 1)
For Each wks In arrwks
With wks
E = Application.Match(CLng(FM), .Range("A4:BT4"), 0)
A = Application.Match(CLng(StM), .Range("A4:BT4"), 0)
M = Application.Match(CLng(VM), .Range("A4:BT4"), 0)
If .ProtectContents Then
.Unprotect "test"
End If
.Range("A:BT").EntireColumn.Hidden = False
'      If IsError(SpalteE) Then
If IsError(E) Then
MsgBox "Fehler"
Else
.Range("B:BT").ColumnWidth = 15
.Range(.Cells(4, E), .Cells(1, 72)).EntireColumn.Hidden = True
End If
If IsError(A) Then
MsgBox "Fehler"
Else
.Range(.Cells(1, 2), .Cells(4, A)).EntireColumn.Hidden = True
End If
End With
Next wks
End Sub

Anzeige
Lösungsversuch
05.03.2013 11:50:50
Rudi
Hallo,
damit E,A,M immer aus wks ermittelt werden:
Sub Rest()
Dim StM, FM, VM As Date
Dim wks, arrwks
arrwks = Array(Worksheets("tabelle1"), Worksheets("tabelle2"), Worksheets("tabelle3"))
FM = DateSerial(Year(Date), Month(Date), 1)
StM = DateSerial(Year(Date), Month(Date) - 14, 1)
VM = DateSerial(Year(Date), Month(Date) - 1, 1)
For Each wks In arrwks
With wks
E = Application.Match(CLng(FM), .Range("A4:BT4"), 0)
A = Application.Match(CLng(StM), .Range("A4:BT4"), 0)
M = Application.Match(CLng(VM), .Range("A4:BT4"), 0)
If .ProtectContents Then
.Unprotect "test"
End If
.Range("A:BT").EntireColumn.Hidden = False
If IsError(SpalteE) Then
MsgBox "Fehler"
Else
.Range("B:BT").ColumnWidth = 15
.Range(.Cells(4, E), .Cells(1, 72)).EntireColumn.Hidden = True
End If
If IsError(A) Then
MsgBox "Fehler"
Else
.Range(.Cells(1, 2), .Cells(4, A)).EntireColumn.Hidden = True
End If
End With
Next wks
End Sub

Gruß
Rudi

Anzeige
Funktioniert jetzt!
06.03.2013 10:51:17
Rene
Hallo an ALLE,
bin gestern leider nicht mehr zum Testen gekommen. Aber jetzt klappt es genau so, wie es zu sein hat!
Vielen Dank an Euch alle!!
Grüße
Rene

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige