VBA Function Matrix Declaration
#1
Hallo zusammen...

ich bräuchte mal wieder Hilfe bitte..

und zwar möchte ich eine Matrix in meiner selber geschriebenen Function, über mehrere Tabellenblätter nutzen. Momentan ist die Matrix als Range Deklariert da sie nur im Tabellenblatt das aktiv war genutzt wurde z.B. (A1:A5).

Nun bräuchte ich aber das ganze für z.B. (Tabelle1!A1:A5) aus Tabelle2 aufgerufen! 

Wie muss ich das deklarieren?
Top
#2
Hallo,

ich möchte KEINEN Streit anzetteln, aber mein Vorschlag ist:

Code:
Sub F_en()

Ar = Sheets(1).Range("A5:F34")

'mach was

end sub

Ar ist ein 2-dim Array.

mfg
Top
#3
Das ist ein fester Bereich, ich übergebe den Bereich über die Function (Formel im Tabellenblatt)
Top
#4
Hallo,

Du kannst einer Funktion doch mehr als einen Parameter übergeben, gib halt auch das Worksheet mit.
Gruß Stefan
Win 10 / Office 2016
Top
#5
Meine Function sieht momentan so aus:

Code:
Function WE(Suchtag As String, SuchtageBereich As Range, SuchName As String, SFr?h As Range, SSp?t As Range, SNacht As Range, Optional ByVal Datsuch As Integer) As Integer
Dim Spalte As Integer
Dim Cell As Range
Dim i As Integer
Dim g As Integer
Dim h As Integer
Dim A As Integer

'Suchtag ist der zu suchende Wochentag / Feiertage
'SuchtageBereich ist der Bereich in dem der Tag/Begriff gesucht werden soll
'SFr?h ist der Suchbereich Fr?hschicht
'SSp?t ist der Suchbereich Sp?tschicht
'SNacht ist der Suchbereich Nachtschicht
'SuchName ist die zu suchende Person


If Datsuch = 1 Then

For Each Cell In SuchtageBereich

     If Cell.Value > "" And Cell.Value <= Date Then
       If Format(Cell, "DDDD") = Suchtag Then
           For i = SFr?h.Cells(1).Row To SFr?h.Cells(SFr?h.Cells.Count).Row
                 If Cell <> "" Then
                   If Cells(i, Cell.Column).Value = SuchName Then A = A + 1
                 End If
           Next
           For g = SSp?t.Cells(1).Row To SSp?t.Cells(SSp?t.Cells.Count).Row
                  If Cell <> "" Then
                   If Cells(g, Cell.Column).Value = SuchName Then A = A + 1
                  End If
           Next
           For h = SNacht.Cells(1).Row To SNacht.Cells(SNacht.Cells.Count).Row
                  If Cell <> "" Then
                   If Cells(h, Cell.Column - 1).Value = SuchName Then A = A + 1
                  End If
           Next
        End If
      End If

Next

Else

For Each Cell In SuchtageBereich

     If Cell.Value > "" Then
       If Format(Cell, "DDDD") = Suchtag Then
           For i = SFr?h.Cells(1).Row To SFr?h.Cells(SFr?h.Cells.Count).Row
                 If Cell <> "" Then
                   If Cells(i, Cell.Column).Value = SuchName Then A = A + 1
                 End If
           Next
           For g = SSp?t.Cells(1).Row To SSp?t.Cells(SSp?t.Cells.Count).Row
                  If Cell <> "" Then
                   If Cells(g, Cell.Column).Value = SuchName Then A = A + 1
                  End If
           Next
           For h = SNacht.Cells(1).Row To SNacht.Cells(SNacht.Cells.Count).Row
                  If Cell <> "" Then
                   If Cells(h, Cell.Column - 1).Value = SuchName Then A = A + 1
                  End If
           Next
        End If
      End If

Next

End If

WE = A

End Function

nun möchte ich mit der Formel aber die Berechnung nicht im Aktiven Tabellenblatt machen, sondern eben in einem andern! Allerdings wird die Formel dann eben halt nicht berechnet! Meine Vermutung war dann eben jetzt, dass das Tabellenblatt eben nicht richtig in die Dimensionierung mit übergeben wird...
Top
#6
Ich hab den Fehler für "Each cell" muss das Tabellenblatt aktiv sein...
Top
#7
Hallo,

Fragezeichen im Variablennamen? Geht das bei dir? Bei mir werden die Zeilen rot angzeigt.
Gruß Stefan
Win 10 / Office 2016
Top
#8
die Fragezeichen sind Umlaute die es beim Kopieren wohl nicht erkannt hat...
Top
#9
Moin!

VBA speaks english.
Deshalb sollte man es sich angewöhnen, ausschließlich (erlaubte) Zeichen zu verwenden, die auch auf der US-Tastatur vorhanden sind.
Schließlich würde kein Däne eine UDF Øre nennen (auch wenn das funktioniert), wenn das produktiv auch bei uns eingesetzt werden muss … 
Zitat:Ich hab den Fehler für "Each cell" muss das Tabellenblatt aktiv sein...

Nein!
Steffl schrieb Dir doch bereits, was Du machen musst (Parameter $Sh oder in der langen Schreibweise TabellenName As String)

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Top
#10
Jetzt sitze ich auf der Leitung Ralf... Ich habe bereits Separat (in der Syntax) versucht den Tabellennamen mit in die Formel zu integrieren, das hat jedoch auch nicht funktioniert... könntest du mir das näher in einem Beispiel oder anhand meines codes zeigen?? Ich ab schon Google bemüht jedoch ohne Erfolg...
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste