2

ワークシート内の特定の範囲の行を 1 行おきにシェーディングする単純な関数があります。

Public Function ShadeEveryOtherRow()
Sheets("mySheet").Select
ShadedRows = Range("myRange").Rows.Count
' determines the number of rows to shade in the range

' Code that loops through and shades rows here

End Function

特定のワークシート名と範囲を入力としてこの関数を呼び出せるようにしたいと思います。以下に示すように関数を記述し、test() サブルーチンを使用して実行しようとすると、「コンパイル エラー: 型が一致しません」というエラーが発生します。任意の支援をいただければ幸いです。ありがとう。

Public Function ShadeEveryOtherRow(targetSheet As Worksheet, targetRange As Range)

Dim targetSheet As Worksheet
Dim targetRange As Range

Sheets(targetSheet).Select
shadeRows = Range(targetRange).Rows.Count

'Code that shades rows here

End Function


Sub test()
ShadeEveryOtherRow "mySheet", "myRange"

End Sub
4

2 に答える 2

1

targetRangetargetSheetオブジェクトとして関数に渡されるのではなく、文字列型である必要があります。

Public Function ShadeEveryOtherRow(targetSheet As string, targetRange As string)

Dim targetSheet As Worksheet
Dim targetRange As Range

Sheets(targetSheet).Select
shadeRows = Range(targetRange).Rows.Count

'Code that shades rows here

End Function


Sub test()
ShadeEveryOtherRow "mySheet", "myRange"

End Sub
于 2013-05-02T16:50:43.620 に答える
1

Dim変数を 2 回使用しないでください。関数シグネチャで宣言するだけで十分です。また、使用しないでください.Select。やりたいことを明確に行う。

Public Function ShadeEveryOtherRow(targetSheet As string, targetRange As string)

shadeRows = Sheets(targetSheet).Range(targetRange).Rows.Count

'Code that shades rows here

End Function

編集: 以下で Sigil が指摘するように、変数には文字列を使用する必要があります。もう 1 つのオプションは、範囲を明示的に渡すことです。

Public Function ShadeEveryOtherRow(targetRange As Range)

    shadeRows = targetRange.Rows.Count

    'Code that shades rows here
End Function


Sub test()
    ShadeEveryOtherRow Sheets("mySheet").Range("myRange")
End Sub

そして覚える!常にOption Explicitすべてのコードの先頭で使用してください。

于 2013-05-02T16:54:32.033 に答える