2016-03-19 15 views
1

Ich versuche, von VBA zu VSTO zu wechseln, aber ich habe einige Fehler, die ich nicht kenne, wenn ich versuche, eine Größe zu ändern.VSTO: Excel Größenänderung in vb.net

Ich habe den Code unten, der am Ende in der Lage sein sollte, einen Bereich von Zellen in x Zeilenanzahl aufzuteilen.

Ich habe das Projekt in VSTO als Add-In erstellt. Wenn ich den Code ausführe, indem ich die Schaltfläche in Excel drücke, gibt Visual Studio mir eine "COMExeption wurde von Benutzercode nicht behandelt" und es markiert die letzte Zeile, wo ich versuche, die Größe zu ändern und den Bereich auszugeben.

Was mache ich falsch?

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 

Antwort

0

Sie haben Ihre Ausgabe-Array deklarieren anstelle von Long

Dim inputArray(0, 0) As Object 

VSTO liest/schreibt Daten aus/in Zellen als Objekt Objekt.

+0

Vielen Dank. Es sieht so aus, als hätte ich auch noch ein paar andere Probleme, da ich einige der Werte im InputArray verloren habe. Kannst du mir dabei helfen? – Jmorte13

+0

Es sollte genauso funktionieren wie es in VBA funktioniert. Hast du es in VBA versucht (mit ein paar leichten Änderungen)? Sie wissen, dass Sie Ihren Code in Visual Studio debuggen können und sehen, was genau in Ihrem Array geschrieben wird, richtig? Ich habe nicht versucht, es zu sein, lassen Sie mich wissen, wenn Sie es nicht herausfinden können und ich werde versuchen, Ihnen zu helfen – PetLahev

+0

Ich habe es in VBA versucht und es funktioniert perfekt. Ich habe ein paar leichte Modifikationen. Ich bin nicht vertraut mit dem Debuggen Visual Studio, wie ist das gemacht? Ich werde den VBA-Code hier einfügen, aber ich habe nicht genug Zeichen. – Jmorte13