Microsoft Excel

Herbers Excel/VBA-Archiv

Funktion aus Makro aufrufen


Betrifft: Funktion aus Makro aufrufen von: Kai
Geschrieben am: 07.07.2017 14:05:00

Hallo zusammen,

folgendes Problem: Ich habe einen Code, der mir aus archivierten Arbeitsmappen Daten ausliest und in eine neue Mappe schreibt.
Ziel ist eine statistische Auswertung von Messergebnissen.
Der Code funktioniert, ich habe ihn schon mehrfach für andere Auswertungen verwendet.
Leider können in dem Archiv von den über 400 Mappen einige vorhanden sein in denen das Arbeitsblatt das die Daten enthält fehlt.
Durch googeln bin ich recht schnell auf eine Funktion gestoßen, die sich mir erschließt und die Aufgabe erledigen sollte.

Leider weiß ich nicht, wie ich diese Funtkion aufrufen kann. Ich habe die letzten zwei Stunden selber rumprobiert, möchte das Thema aber wenn möglich heute noch abschließen.

Hier ist der Code:

Option Explicit

Public Function BlattVorhanden(BlattName As String) As Boolean
    Dim Blatt As Object
    Dim BlattVorhanden As Boolean
    For Each Blatt In ActiveWorkbook.Sheets ' Namen aller Tabellen prüfen
        If Blatt.Name = "Elution_pH_el. LF" Then
            BlattVorhanden = True
            Exit Function
        End If
    Next Blatt
    BlattVorhanden = False
End Function
Sub Statistik_Projekt_LF()

     Dim strFile        As String
     Dim strPfad        As String
     Dim i              As Long
     Dim wsZ            As Worksheet
     Dim wbkQ           As Workbook
     
    
     Workbooks.Add
     Set wsZ = ActiveSheet
              
     'Application.ScreenUpdating = False
          
     strPfad = "Z:\Pfad zu den Berichten\"
     strFile = Dir(strPfad & "*W pH LF*.xl*", vbNormal)
          
     Do Until Len(strFile) = 0
     
         With wsZ
         
            Workbooks.Open strPfad & "\" & strFile
            
                        
            'WIE FÜHRE ICH AN DIESER STELLE DIE FUNKTION BlattVorhanden AUS???
            
                            
                If BlattVorhanden = True Then
                    
                     i = IIf(.Cells(.Rows.Count, 1).End(xlUp).Row < 1, 2, .Cells_
(.Rows.Count, 1).End(xlUp).Row + 1)
                     .Cells(i, 1).Value = ActiveWorkbook.Sheets("Elution_pH_el._
 LF").Range("B8").Value

' Und so weiter                                          

                End If
                
            ActiveWorkbook.Close False
         
         End With
         
         strFile = Dir$
     Loop
     
     'Application.ScreenUpdating = True
     
 End Sub
Wie wird die Funktion korrekt aufgerufen?

Die Beispiele die ich gefunden habe beziehen sich meistens auf die Übergabe von Argumenten, hier möchte ich eine Arbeitsmappe durchsuchen und kriege die Syntax nicht hin.

Gruß

Kai

  

Betrifft: AW: Funktion aus Makro aufrufen von: Kai
Geschrieben am: 07.07.2017 14:11:59

Das ist natürlich Quatsch in der Funktion:

Dim BlattVorhanden As Boolean

Habe ich schon korrigiert.


  

Betrifft: AW: Funktion aus Makro aufrufen von: mmat
Geschrieben am: 07.07.2017 14:21:07

Aufruf:

 If BlattVorhanden("Elution_pH_el. LF") = True Then
Änderung in der Funktion (Du hast da den Blattnamen als Literal reingepinnt, ts, ts, ts ....):
         If Blatt.Name = Blattname Then
vg, MM


  

Betrifft: AW: Funktion aus Makro aufrufen von: Kai
Geschrieben am: 07.07.2017 14:48:43

Aufruf:
 If BlattVorhanden("Elution_pH_el. LF") = True Then


Funktioniert. Das Wochenende naht...

Was ich allerdings nicht verstehe: In der Funktion setze ich BlattVorhanden auf True bzw. False. Warum muss dann noch ("Elution_pH_el. LF") angegeben werden? Ich bin davon ausgegangen, nur den Wert abfragen zu müssen.
Also abfragen ob BlattVorhanden = True damit die If-Verzweigung startet.
Änderung in der Funktion (Du hast da den Blattnamen als Literal reingepinnt, ts, ts, ts ....):   _
       
If Blatt.Name = Blattname Then

vg, MM

Du hast natürlich recht. Ich übe noch...

Vielen Dank

Kai


  

Betrifft: AW: Funktion aus Makro aufrufen von: mmat
Geschrieben am: 07.07.2017 15:10:58

Das ist, um die Funktion vielseitig einsetzbar zu machen. Du sagst beim Aufruf, wonach du suchst. Heute nach ("Evolution_pH_el. LF"), morgen brauchst du genau die gleiche Funktion um zu gucken, ob es ein Blatt "Tabelle1" gibt. Die Funktion bleibt unverändert, nur der Aufruf ist ein anderer.

vg, MM


  

Betrifft: AW: Funktion aus Makro aufrufen von: Matthias
Geschrieben am: 07.07.2017 15:16:34

Moin! Deine Funktion hat ja einen Parameter (Blattname). Den gibst du bei deiner letzten Variante von mmat an und dieser Wert wird abgeglichen. Eigentlich könntest du den Namen so wie in der ersten Variante fest in der Funktion festlegen (geht ja immer um den selben und kein variables Blatt). Dann brauchst du in der Funktion auch nichts angeben, musst aber den Kopf der FUnktion ohne Parameter festlegen. Letztendlich ist es egal - beides geht. Der Vorteil der jetzigen Funktion ist, dass du sie später noch anders verwenden könntest. VG


  

Betrifft: AW: Funktion aus Makro aufrufen von: Kai
Geschrieben am: 10.07.2017 09:06:54

Danke Euch beiden für die Erklärung. Verstanden. Ich habe den Blattnamen in der Funktion und im Makro angegeben, also unnötigerweise doppelt. Ich werde das noch mal in beiden Varianten testen, wenn ich hier etwas Ruhe habe. Montag morgen ist dafür schlecht geeignet.

Gruß

Kai


Beiträge aus den Excel-Beispielen zum Thema "Funktion aus Makro aufrufen"