Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
440to444
440to444
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Range / "Array" Input bei VBA-Functions

Range / "Array" Input bei VBA-Functions
11.06.2004 15:42:04
Thomas
hallo,
ich möchte selbstdefinierte funktionen so gestalten, dass sie sowohl mit range als input als auch mit zwischenresultaten anderer funktionen (etwa in form von n x m matrizen) als input funktionieren.
zwei fragen habe ich dazu:
1. bei der bestimmung der zeilen und spalten kann ich bei den ranges .columns.count usw. und bei datenfeldern l/ubound(feld, 1) usw. verwenden. gibt es auch eine abfrageart, die für beide typen zulässig ist?
2. habe ich ein range objekt als input, so kann ich bequem per range.columns(i) z.b. auf die i-te spalte zugreifen und auf dieser dann berechnungen durchführen (z.b. application.stdev(rangeobject.columns(i)))
gibt es so eine zugriffsmöglichkeit auf komplette zeilen und spalten auch bei 2-dim datenfeldern?
gruss und danke für jede hilfe
thomas
AW: Range / "Array" Input bei VBA-Functions
NE
Hallo,
zu 2.:
Du kannst zwar zB bei
dim arr(5,2)
via ubound(arr(),2) das der 2.Dimension abfragen aber wenn Du wissen
willst wieviel Dimensionen das Feld hat ... null Plan,
vermute mal dat jeht nich.
Gruss Nancy
AW: Range / "Array" Input bei VBA-Functions
K.Rola
Hallo,
meinst du das so?
Option Explicit
Option Base 1

Sub teste()
Dim arr(1 To 12, 1 To 3) As Double, z As Byte, s As Byte
For z = 1 To 12
For s = 1 To 3
arr(z, s) = Rnd
Next
Next
MsgBox "Erste Dimension: " & UBound(arr, 1) & Chr(10) & "Zweite Dimension: " & UBound(arr, 2)
End Sub

Gruß K.Rola
Anzeige
AW: Range / "Array" Input bei VBA-Functions
Thomas
Hallo K., hallo Nancy,
ich meine das so:

Function madd(m1 As Variant, m2 As Variant) As Variant
Dim i, j, nr, nc As Integer
nr = UBound(m2, 1)
nc = UBound(m2, 2)
ur = LBound(m2, 1)
uc = LBound(m2, 2)
Dim madd2() As Double
ReDim madd2(ur To nr, uc To nc) As Double
For i = ur To nr
For j = uc To nc
madd2(i, j) = m1(i, j) + m2(i, j)
Next j
Next i
madd = madd2
End Function

Diese Funktion addiert elementweise zwei Matrizen. Eine Funktion also , die in Excel enthalten ist, aber nicht in VBA (wo ich sie aber innerhalb von anderen Funktionen benötige). Problem: Diese Funktion soll sowohl Dateninput (also z.B. das Ergebnis von application.minverse(matrixn)) als auch direkten Input aus Excel-Sheets (als Ranges) verarbeiten können.
Gruss
Thomas
Anzeige
AW: Range / "Array" Input bei VBA-Functions
NE
Hallo Thomas,
*ismirschlecht*, ich geb's auf ;;-))
Gruss Nancy
AW: Range / "Array" Input bei VBA-Functions
Thomas
he nancy,
nicht aufgeben :))
thomas
AW: Range / "Array" Input bei VBA-Functions
11.06.2004 17:41:02
Nepumuk
Hallo Thomas,
so lange es sich nur um zweidimensionale Arrays handelt, dann einfach so:


Option Explicit
Private Function total(ParamArray Area() As VariantAs Double
    Dim varArea1 As Variant, varArea2 As Variant
    For Each varArea1 In Area
        For Each varArea2 In varArea1
            If varArea2 <> 0 Then
               total = total + varArea2
            End If
        Next
    Next
End Function
Public Sub test_Range()
    MsgBox total(Range("A1:C20"))
End Sub
Public Sub test_Array()
    Dim intIndex1 As Integer, intIndex2 As Integer
    Dim myArray(1 To 10, 1 To 10) As Variant
    For intIndex1 = 1 To 10
        For intIndex2 = 1 To 10
            myArray(intIndex1, intIndex2) = 5
        Next
    Next
    MsgBox total(myArray)
End Sub


Wenn die Dimensionen variabel sind, dann wird es schwierig, aber nicht unmöglich.
Gruß
Nepumuk
Anzeige
OT Hallo Nepumuk...
K.Rola
...kennst du eine Möglichkeit zu überprüfen, ob der Druck eines sheets
erfolgreich war oder ob ein Fehler aufgetreten ist, z.B. Papierstau?
Ist nicht so wichtig, nur wenn dir spontan was einfällt.
Gruß K.Rola
AW: OT Hallo Nepumuk...
11.06.2004 19:43:18
Nepumuk
Hi K.Rola,
kennst du die Funktion "EnumPrinters"? Mit dem Typ PRINTER_INFO_2 kannst du über die Variable "Status" den Druckerstatus abfragen. Der liefert dir:
'PRINTER_INFO_2 Status-Konstanten
PRINTER_STATUS_BUSY = &H200 'Der Drucker ist nicht bereit
PRINTER_STATUS_DOOR_OPEN = &H400000 'Die klappe des Druckers ist geöffnet
PRINTER_STATUS_ERROR = &H2 'Es liegt ein Druckerfehler vor
PRINTER_STATUS_INITIALIZING = &H8000 'Der Drucker wird Initialisiert
PRINTER_STATUS_IO_ACTIVE = &H100 'Eine Datenkomunikation mit dem Drucker findet statt
PRINTER_STATUS_MANUAL_FEED = &H20 'Der Drucker ladet papier mit manuellen Papiereinzug nach
PRINTER_STATUS_NO_TONER = &H40000 'Der Drucker hat keine Farbe mehr
PRINTER_STATUS_NOT_AVAILABLE = &H1000 'Es kann nicht auf den Drucker zugegriffen werden
PRINTER_STATUS_OFFLINE = &H80 'Der Drucker ist Offline
PRINTER_STATUS_OUT_OF_MEMORY = &H200000 'Der Drucker hat nicht genügend speicher zum fortsetzen der letzten Aktion
PRINTER_STATUS_OUTPUT_BIN_FULL = &H800 'Das Papierausgabefach ist voll
PRINTER_STATUS_PAGE_PUNT = &H80000 'Der Druck wurde wegen zu hoher Komplexität abgebrochen
PRINTER_STATUS_PAPER_JAM = &H8 'Das Drucker papier kann nicht nachgezogen werden
PRINTER_STATUS_PAPER_OUT = &H10 'Das Druckerpapier ist leer
PRINTER_STATUS_PAPER_PROBLEM = &H40 'Es liegt ein Problem mit der Papierzufuhr vor
PRINTER_STATUS_PAUSED = &H1 '(Win NT) Der Drucker befindet sich in eine Pause-Phase
PRINTER_STATUS_PENDING_DELETION = &H4 '(Win NT) Die Ausdrucke in der warteschleife werden gelöscht
PRINTER_STATUS_PRINTING = &H400 'Der Drucker durckt
PRINTER_STATUS_PROCESSING = &H4000 'Der Drucker erhält Informationen
PRINTER_STATUS_TONER_LOW = &H20000 'Die Farbpatronen des Drucker gehen zur neige
PRINTER_STATUS_USER_INTERVENTION = &H100000 'Der Benutzer hat in die Druckeraktion eingegriffen
PRINTER_STATUS_WAITING = &H2000 'Der Drucker wartet
PRINTER_STATUS_WARMING_UP = &H10000 'Der Drucker wärmt sich auf
Gruß
Nepumuk
PS. Funktioniert nicht mit USB-Anschluss unter Win2000
Anzeige
AW: OT Hallo Nepumuk...
K.Rola
Hallo Meister,
danke, die Funktion kenne ich aber die Konstanten nicht alle.
Gruß K.Rola
AW: Range / "Array" Input bei VBA-Functions
Thomas
hallo nepumuk,
danke für die antwort. deine funktion "total" summiert aber alle elemente zu einer zahl auf. ich interessiere mich hingegen für die möglichst felxible gestaltung einer elementweisen addition, wo das ergebnis wieder eine matrix ist.
gruss
thomas
AW: Range / "Array" Input bei VBA-Functions
NE
Hallo K.Rola,
meinstest Du mich? ;-)
Weisst Du was ich bald vermute, Thomas versucht sowas wie aus dem
Array einzelne ArrayItems am Stück zu ziehen,
bekomm' ich aber auch nicht hin irgendwie.
Gruss Nancy
Option Explicit
Option Base 1

Sub teste()
Dim arr(1 To 12, 1 To 3) As Double, z As Byte, s As Byte
For z = 1 To 12
For s = 1 To 3
arr(z, s) = Rnd
Next
Next
'MsgBox "Erste Dimension: " & UBound(arr, 1) & Chr(10) & "Zweite Dimension: " & UBound(arr, 2)
Range(Cells(1, 1), Cells(1, UBound(arr, 2))) = arr(12, 3)
End 

Sub

Anzeige
AW: Range / "Array" Input bei VBA-Functions
K.Rola
Hallo,
hab das wohl irgendwie falsch verstanden, vergiss es einfach.
Gruß K.Rola

371 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige