2016-04-19 9 views
1

を埋めるためにしようとしたとき、私はランタイム13エラーにファイル名を指定して実行時エラー「13」:型の不一致2つの別々のフィールドを移入しようとしている一方で、テキストボックス

を受けていますフィールドにテキストを追加するコードは

です

Private Sub cmdAddMDS_Click() SetText GetMDS(currentMDS, cboxMDS.Value) SetCat catMDS(currentMDS, cboxMDS.Value) <-- This creates the runtime error End Sub

潜水は同じ、ちょうど別のサブ名の近くにある加算する値を設定し、誰もが肝炎ん

Function GetMDS(mdsName As Worksheet, templateName As String) As String 

Dim Lrow As Long, rng As Range 

On Error Resume Next 

Lrow = mdsName.Range("A" & Rows.Count).End(xlUp).row 

With mdsName.Range("A2:A" & Lrow) 

    Set rng = .Find(templateName, LookIn:=xlValues) 

    If Not rng Is Nothing Then 
     GetMDS = rng.Offset(, 1).Value 
    End If 

End With 

End Function 

---------------------------------------------------------- 
Function catMDS(mdsName As Worksheet, templateName As String) As String 

Dim Lrow As Long, rng As Range 

On Error Resume Next 

Lrow = mdsName.Range("A" & Rows.Count).End(xlUp).row 

With mdsName.Range("A2:A" & Lrow) 

    Set rng = .Find(templateName, LookIn:=xlValues) 

    If Not rng Is Nothing Then 
     catMDS = rng.Offset(, 3).Value 
    End If 

End With 

End Function 

を相殺しますどのような洞察力がこのエラーの原因になっているのでしょうか?

答えて

1

ラインで

SetCat catMDS(currentMDS, cboxMDS.Value) 

二つのことは、型の不一致エラートリガすることができます。catMDSに渡された値がGetMDSに渡された値と同じになるようにに表示されますので

1) There is a problem passing the parameters to the function catMDS

2) There is a problem passing the returned string to SetCat

をし、それらの2つの関数は同じ型を持っている、説明1)はありそうもない。しかし、SetTextのいずれかの値が変更された場合、すべてのベットはオフになります。

したがって - 2)がそうである可能性があります。 SetCatの内容を明らかにしていないので、エラーが発生する理由はわかりません。そのサブを含むように質問を編集することができます。次のように

は、デバッグの目的のために、あなたはあなたのコードを変更できます。

Private Sub cmdAddMDS_Click() 
    Dim s As String 
    SetText GetMDS(currentMDS, cboxMDS.Value) 
    s = catMDS(currentMDS, cboxMDS.Value) 
    SetCat s 
End Sub 

これは、サブコールからの関数呼び出しを分離します。最後の2行のうちの1行がエラーを投げるべきです。どのラインがエラーをスローすると、デバッグ作業に集中することができます。

+0

を引き起こしていた二つの異なるパラメータに同じ名前を使用し、答えを考え出しsetCatの場合、セルの内容を次のようにテキストボックスに修正します。 'Sub SetCat(ByVal txt As String、オプションとして追加Boolean = False) txt = txt&vbNewLine&" ______________________________________ "&vbNewLine もしappend = True Then frmMDS.catMDS.Text =(frmMDS.catMDS.Text + vbNewLine)&txt Else frmMDS.catMDS.Text = txt 終了の場合 終了サブ ' – Jmcewen50

0

iはエラーが `のS =のcatMDS(currentMDS、cboxMDS.Value)`コードに登場したようにデバッグする場合、競合

+0

うまくいけばうれしいです。ところで、「On Error Resume Next」はめったに良い考えではありません。あまりにも頻繁に 'On Bug Hide Error'になります。電池を煙感知器から取り外すのと同等のVBAを行うのではなく、明示的なエラー処理を使用する方が良いでしょう。 –

関連する問題