2011-12-21 22 views
0

次のような小さなVBA関数を書きました。関数の出力として、私はあなたが私はこの問題を解決するのに役立つてもらえ範囲VBAタイプの不一致、実行時エラー13

Public Function selectRows(col As String) As Range 

Dim begin, fini As Integer 
Set TopCell = Cells(1, col) 
Set BottomCell = Cells(Rows.Count, col) 
If IsEmpty(TopCell) Then Set TopCell = TopCell.End(xlDown) 
If IsEmpty(BottomCell) Then Set BottomCell = BottomCell.End(xlUp) 
begin = TopCell.Row 
fini = BottomCell.Row 
Set selectRows = Activesheet.Range(col & begin & ":" & col & fini) 
End Function 

それから私は、型の不一致エラーを取得し、それが出力を設定しようとする=レンジ(...)

を取得したいと思い問題は、事前にたくさんおねがいします。

+0

関数は値を返します。しかし、この関数では 'selectRows'を何にも設定しません。 – JimmyPena

答えて

2

変数の名前としてcolumnなどの予約語を使用することは非常に悪い考えです。あなたは関数が範囲を返すようにしたい場合は、あなたが望む:

Set selectRows = Range(scol & TopCell.Row & ":" & scol & BottomCell.Row) 

むしろより:

Set output = Range(column & TopCell.Row & ":" & column & BottomCell.Row) 

を、そのような列が空であるかのように他の問題があります。

+0

こんにちはRemou、残念ながら私はまだエラーが表示されますか?列が空ではない、私は列の値を持っている – Eva

+0

@Eva、私は一度、私はすべての列への参照を置き換えない。ブレークポイント(F9)を追加し、トップセルとボトムセルの値を確認します。 – Fionnuala

+0

はいtopcellとbottomcellの値がありますが、次のコマンドで型の不一致エラーが発生します。Set selectRows = Range(....) – Eva

0

あなたはあなたが持っている列の数よりも大きな入力を入れています。たとえば、私のExcel 2003にはIVの列があり、IWに入れると、Error 13がスローされます。あなたのコードをきれいにしたい場合は、私のコードを残しておきます。何らかのエラー処理が役立つので、これは再び起こりません。

Public Function selectRows(ByVal sColumn As String) As Range 

    Dim lColumn As Long 
    Dim TopCell As Range, BottomCell As Range 
    Dim wks As Worksheet 

    Set wks = ActiveSheet 

    lColumn = wks.Range(sColumn & "1").Column 

    Set TopCell = wks.Cells(1, lColumn) 
    Set BottomCell = wks.Cells(Rows.Count, lColumn) 
    If IsEmpty(TopCell) Then Set TopCell = TopCell.End(xlDown) 
    If IsEmpty(BottomCell) Then Set BottomCell = BottomCell.End(xlUp) 
    Set selectRows = wks.Range(TopCell, BottomCell) 

End Function 
関連する問題