Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

передача данных из InputBox в xl2003

32K
03 апреля 2013 года
assei
24 / / 03.04.2013
Здравствуйте ребята! помогите с моим же кодом сам написал, сам же немогу понять из-за чего происходит ошибка! ругается вот в этой строке
Private Sub Command4_Click()
strDate = InputBox("Добавить новые данные по фирме")
If strDate = "" Then Exit Sub
lngRow = Xl.Worksheets("БД").Range("B2:B10").Row + 1
Xl.Worksheets("БД").Range("B2:B10").SpecialCells(2).Cells = strDate

Combo2.AddItem strDate
End Sub

Заранее благодаре, с уважением Дмитрий!
275
03 апреля 2013 года
pashulka
985 / / 19.09.2004
Если оставить в покое строку lngRow = Xl.Worksheets("БД").Range("B2:B10").Row + 1 где lngRow всегда будет = 3 и перейти к следующей (на которой, как я понял, и появляется ошибка), то ошибка может возникнуть, если в указанном диапазоне B2:B10 не окажется ячеек, содержащих константы и/или если рабочий лист + ячейки будут защищены.
32K
03 апреля 2013 года
assei
24 / / 03.04.2013
lngRow = Xl.Worksheets("БД").Range("B2:B10").Row + 1, я в этом деле новичок но упорно пытаюсь понять и учится, Этой строкой по моему мнению я добавляю в столбец следующую строку +1, которая будет вводится из инпутбокс, защиты на листе нет, а вотпро константы мне треба понять как в ячейке может появится константа и с чем ее едят!
32K
03 апреля 2013 года
assei
24 / / 03.04.2013
да действительно строка бесполезная мне так показалось
275
03 апреля 2013 года
pashulka
985 / / 19.09.2004
Цитата:
lngRow = Xl.Worksheets("БД").Range("B2:B10").Row + 1 Этой строкой по моему мнению я добавляю в столбец следующую строку +1



Нет, эта инструкция позволяет получить номер строки (свойство .Row) самой первой ячейки указанного диапазона, т.е. ячейки B2, прибавить к нему единицу и получить 3

Цитата:
а вотпро константы мне треба понять как в ячейке может появится константа и с чем ее едят!



В MS Excel откройте любую рабочую книгу, желательно содержащую некие данные, выделите диапазон с данными, затем в меню Правка выберите команду Перейти (или воспользуйтесь клавишей F5 или CTRL+G), кликните кнопку Выделить, установите переключатель напротив Константы и кликните Ok и Вы увидите, что Excel считает константой, и какие ячейки Вы пытаетесь "мучить" используя SpecialCells(2) ;)
Разумеется приветствуется и прочтение справки, и внимательное ознакомление с "флажками", типа числа, текст, логические значения, ошибки

275
03 апреля 2013 года
pashulka
985 / / 19.09.2004
Что касается ввода новых фирм, то возможно Вам нужно что-то вроде этого :

Код:
Private Sub Command4_Click()
   Dim strDate$, lngRow&
   
   strDate = InputBox("Добавить новую фирму")
   If Len(strDate) Then
      With Xl.Worksheets("БД")
           lngRow = .Cells(65536, "B").End(-4162).Row + 1
           .Cells(lngRow, "B").Value = strDate
      End With
      Combo2.AddItem strDate
    End If
End Sub
или так :

Код:
Private Sub Command4_Click()
   Dim strDate$
   
   strDate = InputBox("Добавить новую фирму", "Моя первая программа")
   If strDate = "" Then Exit Sub

   Xl.Worksheets("БД").Cells(65536, 2).End(-4162).Item(2) = strDate
   'Xl.Worksheets("БД").Cells(65536, "B").End(-4162).Cells(2) = strDate
   'Xl.Worksheets("БД").Range("B65536").End(-4162).Offset(1) = strDate
     
   Combo2.AddItem strDate
End Sub
32K
03 апреля 2013 года
assei
24 / / 03.04.2013
Да, "о сколько", "мне еще придется сделать "открытий чудных" в програмированни!можно прокоментировать строки
первую половину понял а вот- End(-4162).Item(2)
Xl.Worksheets("БД").Cells(65536, 2).End(-4162).Item(2) = strDate
Xl.Worksheets("БД").Cells(65536, "B").End(-4162).Cells(2) = strDate


Заранее благодарен!
275
03 апреля 2013 года
pashulka
985 / / 19.09.2004
Поверьте, в офисной справке можно найти более чем исчерпывающую информацию (теорию), но если нужна практика, то :

1) выделяем последнюю ячейку в столбце B, в версиях XL97-XL2003 это ячейка B65536 (VBA: если нужен универсальный вариант, то вместо максимального количества строк, т.е. константы 65536 лучше использовать Rows.Count)
2) нажимаем CTRL+стрелка вверх (VBA: End(xlUp) либо End(-4162) что одно и тоже, ибо -4162 это значение константы xlUp)
3) смещаемся относительно полученной ячейки вниз на одну ячейку (VBA: строго говоря, смещение это Offset, но так как данное свойство учитывает наличие об'единённых ячеек, то лично я предпочитаю использовать свойство Item либо Cells)

А чтобы проще было понять ними разницу, предлагаю в Excel протестировать :

Код:
Dim iCell As Range
Set iCell = Range("A1")

MsgBox iCell(1).Address    'iCell.Item(1).Address
MsgBox iCell(1, 1).Address 'iCell.Item(1, 1).Address

MsgBox iCell.Cells(1).Address
MsgBox iCell.Cells(1, 1).Address

MsgBox iCell.Offset(1).Address
MsgBox iCell.Offset(1, 1).Address

MsgBox iCell(2).Address    'iCell.Item(2).Address
MsgBox iCell(2, 2).Address 'iCell.Item(2, 2).Address

MsgBox iCell.Cells(2).Address
MsgBox iCell.Cells(2, 2).Address

MsgBox iCell.Offset(2).Address
MsgBox iCell.Offset(2, 2).Address


Dim iSource As Range
Set iSource = Range("A1:B1")

MsgBox iSource(1).Address    'iSource.Item(1).Address
MsgBox iSource.Cells(1).Address

MsgBox iSource.Offset(1).Address 'важное различие
32K
03 апреля 2013 года
assei
24 / / 03.04.2013
Огромнейшее спасибо!!!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог