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
передача данных из InputBox в xl2003
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
Заранее благодаре, с уважением Дмитрий!
Если оставить в покое строку lngRow = Xl.Worksheets("БД").Range("B2:B10").Row + 1 где lngRow всегда будет = 3 и перейти к следующей (на которой, как я понял, и появляется ошибка), то ошибка может возникнуть, если в указанном диапазоне B2:B10 не окажется ячеек, содержащих константы и/или если рабочий лист + ячейки будут защищены.
lngRow = Xl.Worksheets("БД").Range("B2:B10").Row + 1, я в этом деле новичок но упорно пытаюсь понять и учится, Этой строкой по моему мнению я добавляю в столбец следующую строку +1, которая будет вводится из инпутбокс, защиты на листе нет, а вотпро константы мне треба понять как в ячейке может появится константа и с чем ее едят!
да действительно строка бесполезная мне так показалось
lngRow = Xl.Worksheets("БД").Range("B2:B10").Row + 1 Этой строкой по моему мнению я добавляю в столбец следующую строку +1
Нет, эта инструкция позволяет получить номер строки (свойство .Row) самой первой ячейки указанного диапазона, т.е. ячейки B2, прибавить к нему единицу и получить 3
В MS Excel откройте любую рабочую книгу, желательно содержащую некие данные, выделите диапазон с данными, затем в меню Правка выберите команду Перейти (или воспользуйтесь клавишей F5 или CTRL+G), кликните кнопку Выделить, установите переключатель напротив Константы и кликните Ok и Вы увидите, что Excel считает константой, и какие ячейки Вы пытаетесь "мучить" используя SpecialCells(2) ;)
Разумеется приветствуется и прочтение справки, и внимательное ознакомление с "флажками", типа числа, текст, логические значения, ошибки
Код:
Код:
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
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
первую половину понял а вот- End(-4162).Item(2)
Xl.Worksheets("БД").Cells(65536, 2).End(-4162).Item(2) = strDate
Xl.Worksheets("БД").Cells(65536, "B").End(-4162).Cells(2) = strDate
Заранее благодарен!
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 'важное различие
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 'важное различие
Огромнейшее спасибо!!!