ByRef argument type mismatch in Excel-VBA
Ich arbeite mit VBA. Ich schrieb ein user define-Funktion ein string
-, Prozess-und auch wieder gereinigt string
. Ich bin nicht sicher was ist falsch mit ihm. Ich bin nicht in der Lage, es zu nennen und zu bitten, es zu verarbeiten, meinen string und gibt ihn zurück. Ich denke es gibt einen Fehler in der Art, wie ich bin, definieren oder Rückgabe.
Public Function ProcessString(input_string As String) As String
' The temp string used throughout the function
Dim temp_string As String
For i = 1 To Len(input_string)
temp_string = Mid(input_string, i, 1)
If temp_string Like "[A-Z, a-z, 0-9, :, -]" Then
return_string = return_string & temp_string
End If
Next i
return_string = Mid(return_string, 1, (Len(return_string) - 1))
ProcessString = return_string & ", "
End Function
Und ich verwenden Sie diese Funktion wie folgt
Worksheets(data_sheet).Range("C2").Value = ProcessString(last_name)
Letzte name ist ein string-variable, in der Regel sieht wie folgt aus Lastname*****
, und ich bin versucht, entfernen Sie alle die Sterne dahinter. Haben es zurück Lastname
ohne stars.
Erhielt ich Compile error: ByRef arugment type mismatch
wenn ich versuchte zu laufen. Ich benutze Windows XP mit Office 2003.
EDIT: ich habe den basic-struction von dem code, den ich habe, habe ich etwa 20 Zeilen der gleiche code. Tun die gleiche Sache für jeden Bereich, die ich brauche.
Private Sub CommandButton2_Click()
' In my original production code I have a chain of these
' Like this Dim last_name, first_name, street, apt, city, state, zip As String
Dim last_name As String
' I get the last name from a fixed position of my file. Because I am
' processing it from another source which I copied and pasted into excel
last_name = Mid(Range("A4").Value, 20, 13)
' Insert the data into the corresponding fields in the database worksheet
Worksheets(data_sheet).Range("C2").Value = ProcessString(last_name)
Es flaged auf der Linie, wenn ich es nennen.
Worksheets(data_sheet).Range("C2").Value = ProcessString(last_name)
InformationsquelleAutor George | 2013-05-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich vermute, dass Sie noch nicht eingerichtet haben
last_name
richtig in die Anrufer.Mit der Aussage
Worksheets(data_sheet).Range("C2").Value = ProcessString(last_name)
wird dies nur funktionieren, wenn
last_name
ist ein string, d.h.erscheint in der caller irgendwo.
Der Grund dafür ist, dass VBA geht in Variablen durch Verweis standardmäßig, was bedeutet, dass die Datentypen müssen exakt übereinstimmen zwischen Anrufer und angerufenen.
Zwei Korrekturen:
1) Kraft ByVal -- Ändern Sie Ihre Funktion übergeben, variable ByVal:
Public Function ProcessString(ByVal input_string As String) As String
oder2) Dim varname -- setzen
Dim last_name As String
in der Anrufer, bevor Sie es verwenden.(1) funktioniert, weil für
ByVal
eine Kopie von input_string genommen wird, wenn die übergabe an die Funktion, die zwingen, ihn in den richtigen Datentyp. Es führt auch zu einer besseren Programm für Stabilität, da die Funktion kann nicht ändern Sie die variable im Aufrufer.ByVal
problem behoben, jetzt ist der code läuft einwandfrei!Ich immer erklären, alle meine VBA-Funktionen, die mit "ByVal", wie es verbessert die Stabilität. Mit Java haben Sie keine andere Wahl, alles von Wert übergeben wird.
InformationsquelleAutor Bathsheba
Ich weiß nicht warum, aber es ist sehr wichtig zu deklarieren, die Variablen getrennt, wenn Sie wollen, um die übergabe von Variablen (als Variablen) in anderen Prozedur oder Funktion.
Beispielsweise gibt es ein Verfahren, die eine manipulation mit den Daten: basierend auf ID zurück Teilenummer und Menge Informationen. ID als Konstanten Wert, die beiden anderen Argumente sind Variablen.
die nächste Haupt-code gibt mir ein "ByRef argument mismatch":
und der nächste ist nicht so gut arbeiten:
Ich war den Verstand zu verlieren, ich kann nicht glauben, dass ich gebraucht, danke.
Eine Zeile Erklärungen nicht so funktioniert, wie wir dachten!!!! : stackoverflow.com/a/34036529/4316542
InformationsquelleAutor ArpaG
Änderte ich ein paar Dinge für die Arbeit mit
Option Explicit
, und der code lief Geldstrafe gegen eine Zelle mit"abc.123"
, welche zurückgegeben"abc.12,"
. Es gab keine Fehler bei der Kompilierung.Ich werde vorschlagen, Sie buchen mehr relevanten code (das nennt diese Funktion). Sie haben erklärt, dass Nachname ist ein String, aber es scheint, dass kann nicht der Fall sein. Schritt für Schritt durch den code Zeile für Zeile und sorgen dafür, dass dies tatsächlich der Fall ist.
Private Sub CommandButton2_Click()
, und auch dielast_name
markiert ist. Sehr seltsames Verhalten, mein Sub ist im Grunde eine Taste, die eine Liste von Dingen.Vielen Dank für den Hinweis auf die verpasste Dim-Anweisung!
InformationsquelleAutor Gaffi
Während die Schleife durch den string ein Zeichen zu einem Zeitpunkt ist eine praktikable Methode, es gibt keine Notwendigkeit. VBA verfügt über integrierte Funktionen für diese Art der Sache:
InformationsquelleAutor PowerUser
Etwas ist falsch mit dieser Zeichenfolge versuchen wie diesem:
InformationsquelleAutor Gorodeckij Dimitrij