1

以下のコードを使用して、別のシートからいくつかの値を検索しています。実行時エラー13を受け取るたび。データ型を修正する方法がわかりません。私にとって奇妙なのは、適切な値を返すが、このエラーを受け取らないことではないことです(これにより、残りのコードの実行が停止します)。これを修正する方法を説明できますか?ありがとう!

Dim acs As Integer

For acs = 2 To 2000

Set rng1 = Sheets("RD" & y).Range("C" & acs)
Set rng2 = Sheets("RD" & y).Range("D" & acs)
Set rng3 = Sheets("RD" & y).Range("E" & acs)

If Sheets("Tsecond").Range("Y" & acs) = Sheets("inputs").Range("B" & y) Then
Sheets("Tsecond").Range("AE" & acs).Copy
Sheets("RD" & y).Range("C" & acs).Select
Selection.PasteSpecial Paste:=xlPasteValues

Sheets("Tsecond").Range("AE" & acs).Copy
Sheets("RD" & y).Range("C" & acs).Select
Selection.PasteSpecial Paste:=xlPasteValues

Sheets("Tsecond").Range("Y" & acs).Copy
Sheets("RD" & y).Activate
rng2.Select
ActiveSheet.Paste

Sheets("Tsecond").Range("T" & acs).Copy
Sheets("RD" & y).Activate
rng3.Select
ActiveSheet.Paste


End If
Application.ScreenUpdating = False

Next acs
4

1 に答える 1

2

1行のコードで紛らわしいエラーが発生した場合、単純な割り当てを使用して、その行を複数の行に分割します。これらの単純な割り当てを実行し、他のデバッグ情報とともにエラーが発生するものを監視すると、問題を明らかにするのに十分な光が当てられることがあります。あなたのラインのために:

If Sheets("Tsecond").Range("Y" & acs) = Sheets("inputs").Range("B" & y) Then

私がすることはこのようなものです:

Set s1 = Sheets("Tsecond")
Let rc1 = "Y" & acs
Set r1 = s1.Range(rc1)
Set s2 = Sheets("inputs")
Let rc2 = "B" & y
Set r2 = s2.Range(rc2)
If r1 = r2 then

の前にエラーが表示された場合If、デバッガーは、さまざまなタイプの分解された式が何であるかを確認するのに役立ちます。行にエラーが表示された場合は、次のIfように変更します。

Let v1 = r1.Value
Let v2 = r2.Value
if v1 = v2 then

デバッガーは、v1とv2のタイプ(互換性がない場合)、または他のエラーがあるかどうか(つまり、r2.Valueが単一の値ではなく複数のセルを表す)を表示するのに役立ちます。

おそらく、これはあなたに問題への洞察を与えるでしょう。

于 2012-12-05T21:39:34.250 に答える