2016-03-19 6 views
1

VBAからVSTOに切り替えようとしていますが、範囲のサイズを変更しようとしているときに慣れていないエラーが発生しています。VSTO:Excel vb.netのサイズ変更範囲

私は、x行の数でセルの範囲を分割できるようになるはずのコードを以下に示します。

私はVSTOでプロジェクトをアドインとして作成しました。 Visual Studioのボタンを押してコードを実行すると、「COMExeptionはユーザーコードで処理されていませんでした」と表示され、最後の行がハイライトされ、範囲のサイズを変更して出力しようとしています。

私は間違っていますか?

オブジェクトにあなたの出力配列を宣言する必要があります
Private Sub Button1_Click(sender As Object, e As RibbonControlEventArgs) Handles Button1.Click 

    Dim sheet As Excel.Worksheet = Globals.ThisAddIn.Application.ActiveSheet 
    Dim inputrange As Excel.Range 
    'Dim cell As Excel.Range 
    Dim numberOfOutputRows As Long 
    Dim numberOfOutPutColumns As Long 
    Dim outputRange As Excel.Range 
    Dim inputArray(0, 0) As Long 
    Dim i As Long 
    Dim iRow As Long 
    Dim iCol As Long 
    Dim numberOfCells As Long 
    Dim arrayInputValue As Excel.Range 
    Dim val As Object 


    inputrange = CType(sheet.Application.InputBox("select range",,,,,,, Type:=8), Excel.Range) 

    'Dim myRange As Excel.Range 

    numberOfOutputRows = InputBox("You have " & inputrange.Count & " cells. Enter the number of rows you want to split up in") 

    numberOfOutPutColumns = inputrange.Cells.Count/numberOfOutputRows 

    outputRange = CType(sheet.Application.InputBox("Output to single cell",,,,,,, Type:=8), Excel.Range) 

    inputrange = inputrange.Columns(1) 

    ReDim inputArray(0 To numberOfOutputRows, 0 To numberOfOutPutColumns + 1) 

    numberOfCells = inputrange.Cells.Count - 1 

    For i = 0 To numberOfCells 
     arrayInputValue = CType(inputrange.Cells(i + 1), Excel.Range) 
     val = arrayInputValue.value() 
     iRow = i Mod numberOfOutputRows 
     iCol = Int(i/numberOfOutputRows) 
     inputArray(iRow + 1, iCol + 1) = val ' arrayInputValue 
    Next i 

    outputRange.Resize(RowSize:=UBound(inputArray, 1), ColumnSize:=UBound(inputArray, 2)).Value = inputArray 

答えて

0

の代わりに、ロング

Dim inputArray(0, 0) As Object 

VSTOは/オブジェクトなどの細胞への/からのデータの読み書きを行います。

+0

ありがとうございます。私はinputArrayに値をいくつか入れてしまったので、他にもいくつかの問題があるように思えます。 – Jmorte13

+0

VBAで動作するのと同じ方法で動作するはずです。あなたはVBAで試しましたか? Visual Studioでコードをデバッグして、配列に正確に何が書き込まれるかを確認できます。 私はホーンにしようとはしませんでした。あなたがそれを理解することができず、私があなたを助けようとしたら教えてください。 – PetLahev

+0

私はVBAで試してみました。私は少し厳しい修正があります。私はdebuggen Visual Studioに精通していません。どうしたのですか?ここにVBAコードを貼り付けますが、十分な文字がありません。 – Jmorte13