Свойство «Items» является ошибкой «ReadOnly» при переходе с VBA на VB.NET - PullRequest
0 голосов
/ 09 августа 2011

Update2

Пожалуйста, смотрите мой ответ на мой вопрос.

Обновление

Итак, я обновил код в соответствии с комментарием @Eddy, приведенным ниже, однако я все еще получаю сообщение об ошибке в строке myRange = Globals.Sheet ....

Dim xlDown, i As Int32
Dim myRange As Excel.Range

myRange = Globals.Sheet1.Application.Transpose(
                             Globals.Sheet1.Range(
                                 Globals.Sheet1.Range("A1"), 
                                 Globals.Sheet1.Range("A1").End(xlDown)).Value)

 For i = 1 To myRange.Rows.Count
      ListBox2.Items.Add(myRange.Cells(i, 1).Value)
 Next i

ОШИБКА говорит:

System.RuntimeType.ForwaredCallToInvokeMember (String memberName, Флаги BindingFlags, Цель объекта, Int32 [] aWrapperTypes, MessageData & msgData) в Microsoft.Office.Interop.Excel.Range.get_End (XlDirection Направление)

Есть идеи?

Еще раз спасибо

--------------------------------- Orig Question ------------ -------------------------

У меня есть программа VBA excel, которую я конвертирую в VB.net (используя Visual Studio 2010), и я получаю сообщение об ошибке, которого у меня не было в старой версии VBA. Ошибка возникает при попытке транспонировать диапазон Excel в список:

Элементы недвижимости доступны только для чтения

В пределах с

Dim xlDown As Int32

With Globals.Sheet1
    ListBox2.Items = Globals.Sheet1.Application.Transpose(
                         Globals.Sheet1.Range(
                             Globals.Sheet1.Range("A1"), 
                             Globals.Sheet1.Range("A1").End(xlDown)).Value)
End With

Я не уверен, что с этим делать, может, я не правильно ссылаюсь на Globals.Sheet1?

Спасибо

Ответы [ 2 ]

0 голосов
/ 12 августа 2011

Проведя дальнейшие исследования, я понял, что мне не нужно использовать метод транспонирования для назначения значений excel.range списку.

Спасибо тем, кто откликнулся.

        Dim range As Excel.Range = Globals.Sheet1.UsedRange
        Dim obj As Object

        For rCnt = 1 To range.Rows.Count
            For cCnt = 1 To range.Columns.Count
                obj = CType(range.Cells(rCnt, cCnt), Excel.Range)
                ListBox1.Items.Add(obj.value)
            Next
        Next
0 голосов
/ 09 августа 2011

Вы не можете заменить саму коллекцию Items, вы должны заменить все элементы в ней.Вы можете использовать метод Clear для удаления предыдущих элементов и метод AddRange для добавления новых:

ListBox2.Items.Clear() ' If you need to remove previous items
ListBox2.Items.AddRange(Globals.Sheet1.Application.Transpose(Globals.Sheet1.Range(Globals.Sheet1.Range("A1"), Globals.Sheet1.Range("A1").End(xlDown)).Value))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...