1

次のコードは、Excel から転送された配列要素を含む x(,) マトリックスになり、QuickWatch を使用して見ると、0 から始まる配列を示します。ただし、配列は 1 から始まり、QuickWatch に表示される (0,0) 要素にはアクセスできません。

QuickWatch は (0,0) 要素が存在することを示しているため、この動作はバグであると考えていますが、実際には存在しません。アクセスできないためです。

次のコードは問題の x(,) 配列を生成し、QuickWatch で表示すると (0,0) 要素が表示されます。

コードを実装するには、フォームに OperFileDialog1 を追加し、次のコードをボタンなどに貼り付けます。開いている Excel に有効な文字列または数値セル A1、A2、B1、B2 があることを確認する必要があります。QuickWatch で表示すると x(0,0) 要素にデータが表示されるにもかかわらず、何らかの理由で実行時に要素 x(0,0) を読み取ることができません。

Dim i, j As Integer
Dim filename As String
Dim x(,) As Object
Dim myx(,) As Object
With OpenFileDialog1
    .FileName = "*.*"
    .CheckFileExists = True
    .ShowReadOnly = True
    .Filter = "Excel 2010 *.xlxs|*.xlxs|Excel 2003-2007 *.xls|*.xls"
    If .ShowDialog = Windows.Forms.DialogResult.OK Then
        'Load file
        filename = .FileName
    End If
End With


' Create new Application.
Dim rXL As New Excel.Application
Dim rWB As Excel.Workbook
Dim rSheet As Excel.Worksheet
Dim rRng As Excel.Range
rWB = rXL.Workbooks.Open(filename)

For i = 1 To 1 '  rWB.Sheets.Count To 1 Step -1
    Dim sheet As Excel.Worksheet = rWB.Sheets(i)
    Dim r As Excel.Range = sheet.UsedRange
    If r.Rows.Count = 0 Then Exit For
    Dim eCellArray As System.Array = r.Value
    ReDim x(r.Rows.Count, r.Columns.Count)
    x = r.Value
    rRng = Nothing
Next
ReDim myx(x.GetLength(0) + 1, x.GetLength(1) + 1)
For i = 0 To x.GetLength(0)
    For j = 0 To x.GetLength(1)
        myx(i + 1, j + 1) = x(i, j)
    Next
Next
4

1 に答える 1

1

これはvb.net2008で機能します。

Dim x(100, 100) As Object
x(0, 0) = "asdf"
MsgBox(x(0, 0))

文字列を間違った配列要素に割り当てているか、正しい配列要素を文字列配列などの単一の文字列以外のものに割り当てている可能性があります。

于 2013-02-03T00:34:34.600 に答える