[解決済み】Excel VBAのByRef引数の型の不一致
質問
VBAで作業をしています。ユーザー定義関数を書きました。
string
を処理し、クリーンな
string
. 何が問題なのかよくわかりません。私はこれを呼び出して、私の文字列を処理してそれを返すように依頼することができません。私はそれを定義するか返す方法に間違いがあると思います。
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
そして、この関数を次のように使っています。
Worksheets(data_sheet).Range("C2").Value = ProcessString(last_name)
Last name は文字列変数で、通常は次のようになります。
Lastname*****
で、その後ろにある星を全部消そうとしているのです。その際
Lastname
を星なしで表示します。
受け取った
Compile error: ByRef arugment type mismatch
を実行しようとしたところ Windows XPにOffice 2003を使用しています。
EDIT: 私が持っているコードの基本的な構造を追加しました。必要な各フィールドに同じことを行っています。
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)
解決方法は?
が設定されていないのではないでしょうか?
last_name
を呼び出し元で適切に設定する必要があります。
というステートメントで
Worksheets(data_sheet).Range("C2").Value = ProcessString(last_name)
の場合のみ機能します。
last_name
が文字列である場合、すなわち
Dim last_name as String
が呼び出し元のどこかに表示されます。
この理由は、VBAが変数で渡す 参照で はデフォルトで、呼び出し側と呼び出し側でデータ型が正確に一致しなければならないことを意味します。
2つの修正
1)
強制 ByVal
-- 変数 ByVal を渡すように関数を変更します。
Public Function ProcessString(ByVal input_string As String) As String
または
2)
Dim varname
-- put
Dim last_name As String
を使用する前に、呼び出し元で
(1) が機能するのは
ByVal
関数に渡すときに input_string のコピーが取られ、正しいデータ型に変換されます。また、関数が呼び出し元の変数を変更できないため、プログラムの安定性にもつながります。
関連
-
[解決済み】VBA。ランタイム1004を取得する。オブジェクト'_Worksheet'のメソッド'Range'は、セルを使用するときに失敗しました。
-
[解決済み] Excel VBA "レンジクラスのオートフィルメソッドに失敗しました"
-
[解決済み] エクセルVBAです。エラー1004 WorkSheetFunction 'Unable to get Vlookup property'
-
[解決済み] コンパイルエラーです。End If without block If
-
[解決済み] .docx、.pptxなどの正しいMIMEタイプは何ですか?
-
[解決済み] VBAのコードに「Label Not define」がありますが、これは何ですか?
-
[解決済み] Microsoft Officeをインストールせずに、C#でExcel(.XLSおよび.XLSX)ファイルを作成するにはどうすればよいですか?
-
[解決済み] Microsoft Excelで正規表現(Regex)をセル内とループの両方で使用する方法
-
[解決済み] Excel VBA Projectのパスワードを解読する方法はありますか?
-
[解決済み】Excel VBAでSelectを使用しないようにする方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】VBA。ランタイム1004を取得する。オブジェクト'_Worksheet'のメソッド'Range'は、セルを使用するときに失敗しました。
-
[解決済み] OutlookでVBAスクリプトを実行しようとすると、「SubまたはFunction not defined」と表示される。
-
[解決済み] Excel VBA "レンジクラスのオートフィルメソッドに失敗しました"
-
[解決済み] エクセルVBAです。エラー1004 WorkSheetFunction 'Unable to get Vlookup property'
-
[解決済み] コンパイルエラーです。End If without block If
-
[解決済み] VBAのコードに「Label Not define」がありますが、これは何ですか?
-
[解決済み] コンパイルエラーです。Forがない場合は次へ|VBA
-
[解決済み] FormulaR1C1 の機能は何ですか?
-
[解決済み] VBAでIFERRORを使用する
-
[解決済み】Office VBA Editorでコードのブロックにコメントやアンコメントを付ける方法