Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
484to488
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
484to488
484to488
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Array an Function übergeben

Array an Function übergeben
13.09.2004 19:18:31
bastian
Hallo liebe Excelexperten,
ich hänge hier mal wieder mit einem Arrayproblem fest. Ich möchte an eine Funktion ein (String-) Array übergeben, diese Funktion verarbeitet das übergebene Array und gibt ein anderes zurück. Wie kann ich der Funktion klarmachen, daß sie ein Array zurückgeben soll ?
Bisher habe ich folgendes:
Im Sub: efsArray = getEfsOfOccurrence(searchTermArray)
(-> hier kommt schon der erste Fehler: "Argumenttyp ByRef unverträglich")
In der Funktion:

Function getEfsOfOccurrence(searchTermArray As String) As String
verarbeite
getEfsOfOccurrence = processedArray
End Function

Weiteres Problem ist, daß ich vorher nicht weiss, wie gross das efsArray sein wird, das kann verschieden sein.
Hat jemand einen Tip für mich ?
Vielen Dank & Gruss,
Bastian

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Array an Function übergeben
13.09.2004 20:24:09
Nepumuk
Hallo Bastian,
mal ein Beispielcode. Der macht zwar keinen Sinn, aber du siehst, wie es funktioniert.


Public Sub test()
    Dim strarray(1 To 5) As String, var_neuarray As Variant
    var_neuarray = testfunktion(strarray())
End Sub
Private Function testfunktion(strarray() As StringAs Variant
    Dim lngindex As Long, return_array() As String
    For lngindex = LBound(strarray) To UBound(strarray)
        ReDim Preserve return_array(1 To lngindex)
        return_array(lngindex) = CStr(lngindex)
    Next
    testfunktion = return_array
End Function


Gruß
Nepumuk
Anzeige
OFFTOPIC @ Nepumuk
Boris
Hi Großmeister aller VBComponents,
...du hattet mir mal nen Link (oder sogar das Proramm selbst?) gepostet, mit dem du dir alle Anwendungen anzeigen lässt, die im Hintergrund auf dem PC so ihr (Un)wesen treiben - und man konnte bequem wählen, was man denn gerne haben möchte und was nicht.
Hab den Link (das Programm?) aber leider irgendwie "verbummelt" - kannst du mir das nochmals kurz posten?
Besten Dank und Grüße
{Boris}
AW: OFFTOPIC @ Nepumuk
Rupert
Hi,
dafür gibts in Windows den Taskmanager.
mfg Rupert
AW: OFFTOPIC @ Nepumuk
14.09.2004 16:01:03
Nepumuk
Hallo Boris,
damit bekommst du alle offenen Anwendungen:


Option Explicit
Private Declare Function GetWindow Lib "user32" (ByVal hwnd As LongByVal wCmd As LongAs Long
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As LongByVal wIndx As LongAs Long
Private Declare Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" (ByVal hwnd As LongAs Long
Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As LongByVal lpString As StringByVal cch As LongAs Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As StringByVal lpWindowName As StringAs Long
Private Enum Constant
    GW_HWNDFIRST = 0
    GW_HWNDNEXT = 2
    GWL_STYLE = -16
    WS_VISIBLE = &H10000000
    WS_BORDER = &H800000
End Enum
Public Sub GetWindowList()
    Dim hwnd As Long, sTitle As String, lStyle As Long, lngZeile As Long
    hwnd = GetWindow(FindWindow(vbNullString, vbNullString), GW_HWNDFIRST)
    Do
        lStyle = GetWindowLong(hwnd, GWL_STYLE) And (WS_VISIBLE Or WS_BORDER)
        sTitle = GetWindowTitle(hwnd)
        If (lStyle = (WS_VISIBLE Or WS_BORDER)) = True And Trim$(sTitle) <> "" Then
            lngZeile = lngZeile + 1
            Cells(lngZeile, 1) = sTitle & " " & hwnd
        End If
        hwnd = GetWindow(hwnd, GW_HWNDNEXT)
    Loop Until hwnd = 0
End Sub
Private Function GetWindowTitle(ByVal hwnd As LongAs String
    Dim lResult As Long, sTemp As String
    lResult = GetWindowTextLength(hwnd) + 1
    sTemp = Space(lResult)
    lResult = GetWindowText(hwnd, sTemp, lResult)
    GetWindowTitle = Left(sTemp, Len(sTemp) - 1)
End Function


Und damit alle laufenden Prozesse:


Option Explicit
Private Declare Function CreateToolhelp32Snapshot Lib "kernel32.dll" (ByVal dwFlags As LongByVal th32ProcessID As LongAs Long
Private Declare Function Process32First Lib "kernel32.dll" (ByVal hSnapshot As LongByRef lppe As PROCESSENTRY32) As Long
Private Declare Function Process32Next Lib "kernel32.dll" (ByVal hSnapshot As LongByRef lppe As PROCESSENTRY32) As Long
Private Declare Function CloseHandle Lib "kernel32.dll" (ByVal hObject As LongAs Long
Private Enum Costant
    TH32CS_SNAPPROCESS = &H2
    MAX_PATH = 260
End Enum
Private Type PROCESSENTRY32
    dwSize As Long
    cntUsage As Long
    th32ProcessID As Long
    th32DefaultHeapID As Long
    th32ModuleID As Long
    cntThreads As Long
    th32ParentProcessID As Long
    pcPriClassBase As Long
    dwFlags As Long
    szExeFile As String * MAX_PATH
End Type
Public Sub Alle_Prozesse()
    Dim Snap As Long, Process As PROCESSENTRY32, Result As Long
    Snap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)
    If Snap <> -1 Then
        Process.dwSize = Len(Process)
        Result = Process32First(Snap, Process)
        Do Until Result = 0
            Debug.Print Process.szExeFile
            Result = Process32Next(Snap, Process)
        Loop
    End If
    CloseHandle Snap
End Sub


Gruß
Nepumuk
Anzeige
AW: OFFTOPIC @ Nepumuk
Rupert
"und man konnte bequem wählen, was man denn gerne haben möchte und was nicht."
...und das wird mit deinem Code abgedeckt?
mfg Rupert
AW: OFFTOPIC @ Nepumuk
14.09.2004 18:15:38
Nepumuk
Hallo Rupert,
dann verrate mir mal, wie du dem Taskmanager dazu bringst, dass, wenn z.B. ein ICQ-Fenster aufpopt, er ein akustisches Signal erzeugt, welches mich aus der Küche an den Computer lockt.
Gruß
Nepumuk
AW: OFFTOPIC @ Nepumuk
Rupert
Hi,
was hat das denn jetzt mit meiner Rückfrage zu tun? Davon war bisher noch keine Rede.
Obwohl das mit WMI natürlich kein Problem ist.
mfg Rupert
AW: OFFTOPIC @ Nepumuk
14.09.2004 19:31:08
Nepumuk
Hallo Rupert,
ein konkretes Beispiel, wozu ich das nutze?
Ich habe eine ziemlich große Anwendung in VB geschrieben. Um die einzelnen Programme zu starten kann der User ein kleines Formular mit Buttons aufrufen. Da die Programme auf einem Server liegen und das Netz meistens ziemlich ausgelastet ist, kann es ein paar Sekunden dauern, bis das Programm geladen ist und das erste Formular erscheint. Da die meisten User nach 0,5 Sekunden schon ungeduldig werden klicken sie immer wieder auf den Button und starten so das Programm mehrfach. Um das zu verhindern, wird der Button nach dem ersten Klick disabled. Dann sucht ein Makro nach dem Formular und erst, wenn es auf dem Bildschirm erscheint, wird der Button wieder enabled.
Gruß
Nepumuk
Anzeige
AW: OFFTOPIC @ Nepumuk
Boris
Hi Nepumuk,
immer diese 3-Zeiler ;-)
Funktionieren naturgemäß perfekt - vielen Dank dafür.
Allerdings hast du mir letztens - so glaube ich zumindest - irgendeine .exe verlinkt/hochgeladen, mit der man die Registry-Einträge direkt beeinflussen kann - nach dem Motto: Will ich künftig nicht mehr haben - klick und weg damit.
Oder irre ich mich da ?!?
Heißen Dank!
Grüße Boris
AW: OFFTOPIC @ Nepumuk
15.09.2004 16:28:43
Nepumuk
Hallo Boris,
jetzt weiß ich was du meinst. Bitteschön: https://www.herber.de/bbs/user/10914.zip
Gruß
Nepumuk
P.S. Zusatzzeile, damit's kein Dreizeiler wird.
Anzeige
Perfekt!!!
Boris
Hi Nepumuk,
genau das Teil hab ich gemeint - besten Dank!
Grüße Boris
AW: OFFTOPIC @ Nepumuk
15.09.2004 08:24:33
Harald
Hallo Nepumuk,
ich hab mir erlaubt, diese Codes ebenfalls abzugreifen.
Bei Boris klappt's offensichtlich...ich bekomme ne Fehlermeldung in der ersten Codezeile für die offenen Anwendungen.
Nach End Sub, etc dürfen nur Kommentare stehen.
Ich hab's 1:1 in ein neues Modul einer leeren Arbeitsmappe kopiert.
Richtig so, oder Anfängerfehler ?
Gruß
Harald
AW: OFFTOPIC @ Nepumuk
15.09.2004 15:59:28
Nepumuk
Hallo Harald,
das sind zwei Programme. Kopiere sie in jeweils ein eigenes Modul.
Gruß
Nepumuk
AW: Array an Function übergeben
bastian
Hi Nepomuk,
das hat geklappt vielen Dank !
Gruss B.
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige