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

2 gleiche Funktionen mit einem Makro

2 gleiche Funktionen mit einem Makro
09.11.2008 20:50:00
dslsauger
Hallo Leute,
ich hoffe als absoluter Newbie hier Hilfe zu bekommen.
Ich habe ein Problem mit einem Excel-Makro. Es geht darum, daß ich eine Funktion, die bereits eingebaut war für eine zweite Funktion mitnutzen wollte. Leider weiß ich nicht wie ich die einfach dranhängen kann. Wäre nett wenn mir einer helfen könnte.
Es geht um dieses Makro, welches zur Kürzung einer Dropdownliste mittels KKLEINSTE erforderlich ist und zum Aktualisieren nach jeder Aktion. Folgendes steht in den jeweiligen Kategorien im VBA-Editor:
Tabelle1 (November2008)

Private Sub Worksheet_Change(ByVal Target As Range)
'Nach jeder Eingabe in einer Zelle das Makro
'"Auswertung_freie_Zugängeanzeige" ausführen
Auswertung_freie_Zugängeanzeige
End Sub


Module:
Makro_Auswertung


Sub Auswertung_freie_Zugängeanzeige()
'Letzte Zeile in Blatt"Hilfsblatt" in Spalte C für das
'Herunterkopieren der KKLEINSTE-Formel ermitteln
Zeile_KKLEINSTE = Sheets("Hilfsblatt").Range("C65536").End(xlUp).Offset(1, 0).Row
'Letzte Zeile in Blatt"Hilfsblatt" in Spalte A für
'die Bereichsangabe in der KKLEINSTE-Formel ermitteln
Zeile_Zugänge = Sheets("Hilfsblatt").Range("A65536").End(xlUp).Offset(1, 0).Row
'Eintragungen der KKLEINSTE-Formel in Zelle C1
Sheets("Hilfsblatt").Range("C1").FormulaR1C1 = "=SMALL(R2C2:R" _
& Zeile_Zugänge & "C2,ROW())"
'Herunterkopieren der KKLEINSTE-Formel in Spalte C
Sheets("Hilfsblatt").Cells(1, 3).AutoFill Destination:=Range(Sheets("Hilfsblatt").Cells(1, 3),   _
_
_
_
_
Sheets("Hilfsblatt").Cells(Zeile_KKLEINSTE, 3)), Type:=xlFillDefault
'Löschen der Zellinhalte in Spalte C, wenn dort der Eintrag "#ZAHL!" erscheint
For Wiederholungen = 1 To Sheets("Hilfsblatt").Cells(Rows.Count, 3).End(xlUp).Row
If IsError(Sheets("Hilfsblatt").Cells(Wiederholungen, 3)) _
Then Sheets("Hilfsblatt").Cells(Wiederholungen, 3).ClearContents
Next Wiederholungen
'Ändern des Bereiches des Bereichsnamen, der unter
'"Einfügen => Namen => Definieren..." für die Gültigkeitszellen
'in Tabellenblatt "November2008" vergeben werden muss.
ActiveWorkbook.Names.Add Name:="freie_Zugänge", RefersToR1C1:= _
"=Hilfsblatt!R1C3:R" & Sheets("Hilfsblatt"). _
Cells(Rows.Count, 3).End(xlUp).Row & "C3"
End Sub


Makro_Wechsel_zu_VBA


Sub Wechsel_zu_VBA()
On Error GoTo errorhandler
'Application.VBE.MainWindow.Visible = True   'In Tabellenprojekt springen
Application.Goto Reference:="Auswertung_freie_Zugängeanzeige" 'In Makro springen
Exit Sub
errorhandler:
Select Case Err
Case 1004
MsgBox "Sie arbeiten mit einer Excelversion die neuer als Excel 2000 ist. Damit die Funktion '  _
_
Zum VBA Code' ordnungsgemäß" & Chr(13) & Chr(13) _
& "ausgeführt werden kann, gehen Sie in der Menüleiste auf 'Extras => Makro => Sicherheit' und   _
_
klicken dann auf die" & Chr(13) & Chr(13) _
& "Registerkarte 'Vertrauenswürdige Quellen'. Dort suchen Sie den Auswahlpunkt 'Zugriff auf  _
Visual Basic-Projekt vertrauen' und" & Chr(13) & Chr(13) _
& "aktivieren diesen. Wenn nun der Button 'Zum VBA Code' erneut betätigt wird, sollte der  _
Fehler nicht mehr auftreten.", , "Fehler"
Case Else
MsgBox "Es ist ein unerwarteter Fehler aufgetretren"
End Select
End Sub


Ich habe jetzt eine zweite, genau gleiche Funktion angelegt. Nur diesmal nicht wie oben in den Spalten A-D sondern in den Spalten H-K mit dem Namen "freie_Nummern", ansonsten ist alles gleich. Wie kann ich beide Funktionen kombinieren, daß beide funktionieren ?
Oder muss ich ein neues Modul dafür anlegen ?
Danke für Eure Hilfe ...
@dslsauger

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: 2 gleiche Funktionen mit einem Makro
10.11.2008 14:47:00
fcs
Hallo dslsauger,
man kann die verschiedenen Spaltenbereiche/Namen als Variablen an die Routine übergeben.
Das kann dann etwa wie folgt aussehen.
Ich hoffe, dass ich alle anzupassenden Stellen korrkt erwischt hab, zumindest läuft das Makro ohne Fehlemeldung durch.
ggf. solltest du in der Worksheets_Change-Prozedur noch eine Prüfung auf die Spalten-Nummern, in denen die Werte geändert wurden, einbauen bevor die Aktualisierung der Hilfstabelle ausgeführt wird.
Das Arbeiten in der Tabelle liesse sich erheblich beschleunigen, wenn die Aktualisierung nur bei Änderungen in relevanten Spalten ausgeführt wird.
Gruß
Franz

Prozedur in Tabelle (November 2008)
Private Sub Worksheet_Change(ByVal Target As Range)
'Nach jeder Eingabe in einer Zelle das Makro
'"Auswertung_freie_Zugängeanzeige" ausführen
'Aktualisierung Spalten A bis D in Hilfstabelle
Call Auswertung_freie_Zugängeanzeige(Spalte1:=1, Spalte2:=2, Spalte3:=3, Spalte4:=4, _
strName:="freie_Zugänge")
'Aktualisierung Spalten H bis K in Hilfstabelle
Call Auswertung_freie_Zugängeanzeige(Spalte1:=8, Spalte2:=9, Spalte3:=10, Spalte4:=11, _
strName:="freie_Nummern")
End Sub
Prozedur im Modul_Auswertung
Sub Auswertung_freie_Zugängeanzeige(Spalte1&, Spalte2&, Spalte3&, Spalte4&, strName)
'Spalte1 bis Spalte4 sind Variablen fürdie Nummern der Spalten (A-D (1 bis 4) bzw. _
H-K (8 bis 11)
'strName ist die Variable für den Bereichsnamen
Dim wksHilf As Worksheet
Dim Zeile_KKLEINSTE As Long, Zeile_Zugänge As Long, Wiederholungen As Long
Set wksHilf = Sheets("Hilfsblatt")
'Letzte Zeile in Blatt"Hilfsblatt" in Spalte C für das
'Herunterkopieren der KKLEINSTE-Formel ermitteln
With wksHilf
Zeile_KKLEINSTE = .Cells(.Rows.Count, Spalte3).End(xlUp).Offset(1, 0).Row
'Letzte Zeile in Blatt"Hilfsblatt" in Spalte A für
'die Bereichsangabe in der KKLEINSTE-Formel ermitteln
Zeile_Zugänge = .Cells(.Rows.Count, Spalte1).End(xlUp).Offset(1, 0).Row
'Eintragungen der KKLEINSTE-Formel in Zelle C1
.Cells(1, Spalte3).FormulaR1C1 = "=SMALL(R2C" & Spalte2 & ":R" _
& Zeile_Zugänge & "C" & Spalte2 & ",ROW())"
'Herunterkopieren der KKLEINSTE-Formel in Spalte C
.Cells(1, Spalte3).AutoFill Destination:=.Range(.Cells(1, Spalte3), _
.Cells(Zeile_KKLEINSTE, Spalte3)), Type:=xlFillDefault
'Löschen der Zellinhalte in Spalte C, wenn dort der Eintrag "#ZAHL!" erscheint
For Wiederholungen = 1 To .Cells(Rows.Count, Spalte3).End(xlUp).Row
If IsError(.Cells(Wiederholungen, Spalte3)) _
Then .Cells(Wiederholungen, Spalte3).ClearContents
Next Wiederholungen
'Ändern des Bereiches des Bereichsnamen, der unter
'"Einfügen => Namen => Definieren..." für die Gültigkeitszellen
'in Tabellenblatt "November2008" vergeben werden muss.
ActiveWorkbook.Names.Add Name:=strName, RefersToR1C1:= _
"='" & .Name & "'!R1C" & Spalte3 & ":R" & _
.Cells(.Rows.Count, Spalte3).End(xlUp).Row & "C" & Spalte3
End With
End Sub


Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige