Работа с динамической UserForm (VBA/Excel)

Узнай цену своей работы

Формулировка задачи:

Всем доброго времени суток!
Собственно есть код:

Форма с ListView отображается отлично. Все заданные свойства и поля отрабатывают на "ура", но когда я пытаюсь заполнить ListView, мне выдается сообщение:

"Run-time error '394' Property is write-only"

.

Как я понимаю,

frmData.Designer.Controls.Add("MSComCtlLib.ListViewCtrl")

(что-то вроде макета дизайнера), добавляет контрол на форму и позволяет изменять только часть свойств, но не дает вносить содержимое.

frmData.Controls.Add("MSComCtlLib.ListViewCtrl")

выдает ошибку, как я понимаю, в виду того что

frmData

на момент обращения еще не сгенерированна и поэтому мы не можем добавить на нее контрол.
Попробовал обойти данную ситуацию добавив следующий код:

Но он так же не отрабатывает, хотя никаких ошибок не выдает. В связи с этим появилось несколько вопросов:
1. Есть ли возможность заполнить содержимое ListView на динамически созданной форме?
2. Почему не отрабатывает Call LWDActivate, а в частности ilwData.BackColor = RGB (20, 20, 20)?
3. Где можно более подробно почитать о работе с динамически создаваемыми объектами?
__________________
С уважением, Lepaj

Решение задачи: «Работа с динамической UserForm (VBA/Excel)»

textual
Листинг программы
<font color="blue">Dim</font> X <font color="blue">As</font> <font color="blue">Integer</font>
    <font color="blue">With</font> frmData.CodeModule
        X = .CountOfLines
        .InsertLines X + <font color="darkblue"><b>1</b></font>, <font color="teal">"Private Sub UserForm_Activate()"</font>
        .InsertLines X + <font color="darkblue"><b>2</b></font>, <font color="teal">"   Dim li As MSComctlLib.ListItem"</font>
        .InsertLines X + <font color="darkblue"><b>3</b></font>, <font color="teal">"   Dim ilwData As MSComctlLib.ListView"</font>
 
<font color="00AA00">' Судя по всему проблема была здесь, похоже было неправильное обращение к элементу</font>
<font color="00AA00">' .InsertLines X + 7, <font color="teal">"Set ilwData = "</font> & frmData.Name & <font color="teal">"."</font> & lwData.Name</font>

        .InsertLines X + <font color="darkblue"><b>4</b></font>, <font color="teal">"   Set ilwData = Me."</font> & lwData.<font color="blue">Name</font> <font color="00AA00">' правильное обращение к элементу</font>

        .InsertLines X + <font color="darkblue"><b>5</b></font>, <font color="teal">"   Dim i As Integer"</font>
        .InsertLines X + <font color="darkblue"><b>6</b></font>, <font color="teal">"   With ilwData"</font>
        .InsertLines X + <font color="darkblue"><b>7</b></font>, <font color="teal">"       For i = 0 To 2"</font>
        .InsertLines X + <font color="darkblue"><b>8</b></font>, <font color="teal">"       Set li = .ListItems.Add (, , pArrayData(i).year)"</font>
        .InsertLines X + <font color="darkblue"><b>9</b></font>, <font color="teal">"       li.SubItems(1) = Format$(pArrayData(i).money,"</font> & Chr(<font color="darkblue"><b>34</b></font>) & <font color="teal">"Currency"</font> & Chr(<font color="darkblue"><b>34</b></font>) & <font color="teal">")"</font>
        .InsertLines X + <font color="darkblue"><b>10</b></font>, <font color="teal">"       li.SubItems(2) = Format$(pArrayData(i).count,"</font> & Chr(<font color="darkblue"><b>34</b></font>) & <font color="teal">"# ##0 øò"</font> & Chr(<font color="darkblue"><b>34</b></font>) & <font color="teal">")"</font>
        .InsertLines X + <font color="darkblue"><b>11</b></font>, <font color="teal">"      Next i"</font>
        .InsertLines X + <font color="darkblue"><b>12</b></font>, <font color="teal">"   End With"</font>
        .InsertLines X + <font color="darkblue"><b>13</b></font>, <font color="teal">"End Sub"</font>
    <font color="blue">End</font> <font color="blue">With</font>

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.2 из 5