2012-04-01 2 views
2

Wie kann ich eine Funktion schreiben in Excel VBA das ist so etwas in PHP?schreiben Sie eine VBA Excel-Funktion nicht zu wissen Parameter ist Zeichenfolge oder Wörterbuch

public function name($data) { 

    if ($data==="*") { 
    return "*"; 
    } 

    if (isset($data[0])) { 
    return $data[0]; 
    } 
} 

Das größte Problem ist, dass ich brauche, um den Datentyp in der Funktion für meine Parameter

ich erwarte entweder einen String oder ein Wörterbuch zu definieren, die einen Schlüssel „0“

Antwort

3
genannt hat

Ein 0 im Wörterbuch enthält keinen Wert. A 1 kann Ihnen vielleicht das gewünschte Ergebnis geben. Ich weiß nicht, PHP, aber was auch immer ich aus dem oben genannten Code und Ihre Anforderung verstehen konnte, das ist, was ich kam, so dass ich nicht sicher bin, ob das, was Sie wollen?

Sub Sample() 
    Dim Dict1 As Dictionary 
    Dim sString As String 

    Set Dict1 = New Dictionary 

    With Dict1 
     .CompareMode = BinaryCompare 
     .Add 1, "Item 1" 
    End With 

    sString = "Sid" 

    Debug.Print sName(Dict1) 
    Debug.Print sName(sString) 
End Sub 

Public Function sName(Inpt As Variant) As Variant 
    If TypeName(Inpt) = "Dictionary" Then 
     sName = Inpt.Item(1) 
    ElseIf TypeName(Inpt) = "String" Then 
     sName = Inpt 
    End If 
End Function 

EDIT

Wenn Sie noch 0 verwenden möchten, dann während dem Wörterbuch hinzufügen, verwenden Sie eine 0 zum Beispiel

With Dict1 
     .CompareMode = BinaryCompare 
     .Add 0, "Item 1" 
    End With 

und dann können Sie eine 0 in der Verwendung Funktion wie unten

sName = Inpt.Item(0) 

SNAPSHOT (ALLE 3 BEDINGUNGEN - VERWENDUNG VON 0 und 1)

enter image description here

HTH

Sid

+0

Vielen Dank für die ausführliche Antwort! Ich werde dies als richtig markieren, sobald ich es bestätige –

+0

, soweit ich verstehe, Wörterbuchschlüssel sind immer Text. Im obigen Codebeispiel denke ich, dass Sie "1" oder "0" verwenden müssten. Es ist auch in der Regel eine gute Idee, mit '.exists 'auf die Existenz der Schlüssel zu prüfen. – Pynner

+0

@Pynner: Ja, Sie haben absolut Recht auf' .exists'. Ich habe absichtlich nicht ".Exist" verwendet, um die Verwendung von "0" wie in Fall 2 oben zu demonstrieren :) Wenn Sie in CASE 2 feststellen, dass '. (0)' anstelle von '. (1) 'gibt einen Null-Wert anstelle eines Fehlers. :) –

Verwandte Themen