次のコードは、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