G
glass44
При заполнении таблицы на 3-4 строке выскакивает вот это;
Вот полный код !
'читаем признак
Private Sub inic()
Dim k, z, priznak
Application.ScreenUpdating = False
Workbooks.Open Filename:=ThisWorkbook.path + "" + "конф.xls"
With Workbooks("конф.xls")
For k = 2 To .Worksheets("пользовательские").Range("A100").End(xlUp).Row
priznak = .Worksheets("пользовательские ").Cells(k, 1).Value
ComboBox4.AddItem priznak
Next k
End With
Workbooks("конф.xls").Close (False)
End Sub
Private Sub Frame2_Click()
End Sub
Private Sub UserForm_Initialize()
inic
End Sub
ФОРМИРОВАНИЕ КАТЕГОРИИ
Private Sub ComboBox4_Change() 'при выборе признака
ComboBox1.Clear
ComboBox2.Clear
Dim sh As Worksheet
Dim path, list, cat, k
Application.ScreenUpdating = False
Workbooks.Open Filename:=ThisWorkbook.path + "" + "конф.xls"
With Workbooks("конф.xls")
For k = 2 To .Worksheets("прайс-листы").Range("A1000").End(xlUp).Row
If .Worksheets("прайс-листы ").Cells(k, 12) = ComboBox4.Text Then
path = .Worksheets("прайс-листы ").Cells(k, 1).Value
list = .Worksheets("прайс-листы ").Cells(k, 2).Value
Set sh = GetObject(path).Sheets(list)
cat = .Worksheets("прайс-листы ").Cells(k, 3).Value
ComboBox1.AddItem sh.Range(cat).Value втягиваем категорию
sh.Parent.Close (False)
Else
End If
Next k
End With
Workbooks("конф.xls").Close (False)
'sh.Parent.Close (False)
End Sub
'ФОРМИРОВАНИЕ НАИМЕНОВАНИЯ
Private Sub ComboBox1_Change() 'при выборе категории
Dim sh As Worksheet
Dim path, list, cena, k, cat, mat, vid, ed, e, tol, procent
Application.ScreenUpdating = False
ListBox1.Clear
Workbooks.Open Filename:=ThisWorkbook.path + "" + "конф.xls"
With Workbooks("конф.xls")
For k = 2 To 100
If .Worksheets("прайс-листы ").Range("L" & k).Text = ComboBox4.Text Then
path = .Worksheets("прайс-листы ").Cells(k, 1).Value
list = .Worksheets("прайс-листы ").Cells(k, 2).Value
Set sh = GetObject(path).Sheets(list)
'формируем список наименование и цена
Dim n, g, c, cc, ccc
cat = .Worksheets("прайс-листы ").Cells(k, 3).Value
If ComboBox1.Value = sh.Range(cat).Value Then 'втягиваем категорию
g = Mid(.Worksheets("прайс-листы ").Cells(k, 4).Text, 2) 'берем из ячейки с началом списка диапазона только цифру
c = Mid(.Worksheets("прайс-листы ").Cells(k, 5).Text, 2) ' берем из ячейки с концом списка диапазона только цифру
cc = Left(.Worksheets("прайс-листы ").Cells(k, 4).Text, 1) ' берем из ячейки с началом списка диапазона только букву
ccc = Left(.Worksheets("прайс-листы ").Cells(k, 6).Text, 1) ' берем из ячейки с началом цены только букву
ed = .Worksheets("прайс-листы ").Cells(k, 8).Text
mat = .Worksheets("прайс-листы ").Cells(k, 9).Text
tol = .Worksheets("прайс-листы ").Cells(k, 10).Text
vid = .Worksheets("прайс-листы ").Cells(k, 11).Text
procent = .Worksheets("прайс-листы ").Cells(k, 13).Text
valu = .Worksheets("прайс-листы ").Cells(k, 14).Text
'ставим значение в листбокс
For n = g To c
a = sh.Cells(n, cc).Text
ListBox1.AddItem a 'наименования
ComboBox2.list = ListBox1.list 'наименования
'цены и остальные пункты
Me.ListBox1.list(Me.ListBox1.ListCount - 1, 1) = sh.Cells(n, ccc).Text 'цена
Me.ListBox1.list(Me.ListBox1.ListCount - 1, 2) = ed
Me.ListBox1.list(Me.ListBox1.ListCount - 1, 3) = mat
Me.ListBox1.list(Me.ListBox1.ListCount - 1, 4) = tol
Me.ListBox1.list(Me.ListBox1.ListCount - 1, 5) = vid
Me.ListBox1.list(Me.ListBox1.ListCount - 1, 6) = procent
Me.ListBox1.list(Me.ListBox1.ListCount - 1, 7) = valu
Me.ListBox1.list(Me.ListBox1.ListCount - 1, 8) = ComboBox4.Text
Next n
End If
sh.Parent.Close (False)
End If
Next k
End With
Workbooks("конф.xls").Close (False)
'sh.Parent.Close (False)
End Sub
'ВСТАВКА ЗНАЧЕНИЙ
Private Sub ComboBox2_Change() ' при выборе наименование
If ComboBox2.Value = "" Then 'если комбо очистили то идем на иник
Else
'*********ИНАЧЕ ВСТАВЛЯЕМ ЗНАЧЕНИЕ***************
inic2:
Dim koli As Variant
koli = Application.InputBox("ВВЕДИТЕ КОЛИЧЕСТВО!", "НОВЫЙ РАСЧЕТ")
If koli = False Then Exit Sub 'если нажать Cancel
If koli <> "" Then 'если ни чего не ввели
If IsNumeric(koli) Then 'если ввели цифру
Новый расчет.ListView1.ListItems.Add , , "" 'вынесли вверх чтобы не было пустой строки
For i = 1 To Новый расчет.ListView1.ListItems.Count
If Новый расчет.ListView1.ListItems.Item(i) <> "" Then
Else
Новый расчет.ListView1.ListItems.Item(i) = ComboBox1.Value 'категория
Новый расчет.ListView1.ListItems.Item(i).SubItems(1) = ComboBox2.Value 'наименование
Новый расчет.ListView1.ListItems.Item(i).SubItems(2) = ListBox1.list(ListIndex, 3) 'материал
Новый расчет.ListView1.ListItems.Item(i).SubItems(3) = ListBox1.list(ListIndex, 4) 'толщина
Новый расчет.ListView1.ListItems.Item(i).SubItems(4) = ListBox1.list(ListIndex, 5) 'вид
Новый расчет.ListView1.ListItems.Item(i).SubItems(6) = ListBox1.list(ListIndex, 2) 'ед
Новый расчет.ListView1.ListItems.Item(i).SubItems(7) = CDbl(ListBox1.list(ComboBox2.ListIndex, 1)) 'закупка
Новый расчет.ListView1.ListItems.Item(i).SubItems(9) = ListBox1.list(ListIndex, 6) 'процент
Новый расчет.ListView1.ListItems.Item(i).SubItems(5) = koli 'кол-во
Новый расчет.ListView1.ListItems.Item(i).SubItems(8) = koli * Новый расчет.ListView1.ListItems.Item(i).SubItems(7) 'цена
p = Íîâûé_ðàñ÷åò.ListView1.ListItems.Item(i).SubItems(9) / 100 + 1
Новый расчет.ListView1.ListItems.Item(i).SubItems(10) = p * Новый расчет.ListView1.ListItems.Item(i).SubItems(8)
Новый расчет.ListView1.ListItems.Item(i).SubItems(11) = Новый расчет.ListView1.ListItems.Item(i).SubItems(10) - Новый расчет.ListView1.ListItems.Item(i).SubItems(8)
Новый расчет.ListView1.ListItems.Item(i).SubItems(12) = ComboBox4.Text
'общая стоимость
Dim a As Currency
a = Новый расчет.ListView1.ListItems.Item(i).SubItems(10)
OldStr = Новый расчет.TextBox1.Value
NewStr = Replace(OldStr, ".", ",") 'меняем точку из текстбокса на запятую для вычисления
s = NewStr
s = s + a
Новый расчет.TextBox1.Value = s
Новый расчет.TextBox28.Value = s
Новый расчет.TextBox34.Value = s
'краткий отчет
Новый расчет.TextBox4.Value = s 'общая сумма
Новый расчет.TextBox2.Value = i 'всего строк
Dim aa As Currency
aa = Новый расчет.ListView1.ListItems.Item(i).SubItems(8) 'закупка
ss = Новый расчет.TextBox3.Value 'закупка
ss = ss + aa (ОШИБКА)
Новый расчет.TextBox3.Value = ss
Новый расчет.TextBox5.Value = s - ss
End If
Next i
Else 'это для ошибки ввода koli
MsgBox "Вы ни чего не ввели, или ввели букву!", vbExclamation, ""
GoTo inic2
End If
Else
MsgBox " Вы ни чего не ввели, или ввели букву!", vbExclamation, ""
GoTo inic2
End If
'**********************ЧИСТИМ ЗА СОБОЙ И ИДЕМ НА ИНИК
ListBox1.Clear
ComboBox2.Clear
ComboBox1.Clear
ComboBox4.Clear
inic
End If
End Sub
Private Sub CommandButton1_Click()
Unload компоненты
End Sub
Не могу разобраться, ПОМОГИТЕ ПЛЗ!!! Очень надо!
Вот полный код !
'читаем признак
Private Sub inic()
Dim k, z, priznak
Application.ScreenUpdating = False
Workbooks.Open Filename:=ThisWorkbook.path + "" + "конф.xls"
With Workbooks("конф.xls")
For k = 2 To .Worksheets("пользовательские").Range("A100").End(xlUp).Row
priznak = .Worksheets("пользовательские ").Cells(k, 1).Value
ComboBox4.AddItem priznak
Next k
End With
Workbooks("конф.xls").Close (False)
End Sub
Private Sub Frame2_Click()
End Sub
Private Sub UserForm_Initialize()
inic
End Sub
ФОРМИРОВАНИЕ КАТЕГОРИИ
Private Sub ComboBox4_Change() 'при выборе признака
ComboBox1.Clear
ComboBox2.Clear
Dim sh As Worksheet
Dim path, list, cat, k
Application.ScreenUpdating = False
Workbooks.Open Filename:=ThisWorkbook.path + "" + "конф.xls"
With Workbooks("конф.xls")
For k = 2 To .Worksheets("прайс-листы").Range("A1000").End(xlUp).Row
If .Worksheets("прайс-листы ").Cells(k, 12) = ComboBox4.Text Then
path = .Worksheets("прайс-листы ").Cells(k, 1).Value
list = .Worksheets("прайс-листы ").Cells(k, 2).Value
Set sh = GetObject(path).Sheets(list)
cat = .Worksheets("прайс-листы ").Cells(k, 3).Value
ComboBox1.AddItem sh.Range(cat).Value втягиваем категорию
sh.Parent.Close (False)
Else
End If
Next k
End With
Workbooks("конф.xls").Close (False)
'sh.Parent.Close (False)
End Sub
'ФОРМИРОВАНИЕ НАИМЕНОВАНИЯ
Private Sub ComboBox1_Change() 'при выборе категории
Dim sh As Worksheet
Dim path, list, cena, k, cat, mat, vid, ed, e, tol, procent
Application.ScreenUpdating = False
ListBox1.Clear
Workbooks.Open Filename:=ThisWorkbook.path + "" + "конф.xls"
With Workbooks("конф.xls")
For k = 2 To 100
If .Worksheets("прайс-листы ").Range("L" & k).Text = ComboBox4.Text Then
path = .Worksheets("прайс-листы ").Cells(k, 1).Value
list = .Worksheets("прайс-листы ").Cells(k, 2).Value
Set sh = GetObject(path).Sheets(list)
'формируем список наименование и цена
Dim n, g, c, cc, ccc
cat = .Worksheets("прайс-листы ").Cells(k, 3).Value
If ComboBox1.Value = sh.Range(cat).Value Then 'втягиваем категорию
g = Mid(.Worksheets("прайс-листы ").Cells(k, 4).Text, 2) 'берем из ячейки с началом списка диапазона только цифру
c = Mid(.Worksheets("прайс-листы ").Cells(k, 5).Text, 2) ' берем из ячейки с концом списка диапазона только цифру
cc = Left(.Worksheets("прайс-листы ").Cells(k, 4).Text, 1) ' берем из ячейки с началом списка диапазона только букву
ccc = Left(.Worksheets("прайс-листы ").Cells(k, 6).Text, 1) ' берем из ячейки с началом цены только букву
ed = .Worksheets("прайс-листы ").Cells(k, 8).Text
mat = .Worksheets("прайс-листы ").Cells(k, 9).Text
tol = .Worksheets("прайс-листы ").Cells(k, 10).Text
vid = .Worksheets("прайс-листы ").Cells(k, 11).Text
procent = .Worksheets("прайс-листы ").Cells(k, 13).Text
valu = .Worksheets("прайс-листы ").Cells(k, 14).Text
'ставим значение в листбокс
For n = g To c
a = sh.Cells(n, cc).Text
ListBox1.AddItem a 'наименования
ComboBox2.list = ListBox1.list 'наименования
'цены и остальные пункты
Me.ListBox1.list(Me.ListBox1.ListCount - 1, 1) = sh.Cells(n, ccc).Text 'цена
Me.ListBox1.list(Me.ListBox1.ListCount - 1, 2) = ed
Me.ListBox1.list(Me.ListBox1.ListCount - 1, 3) = mat
Me.ListBox1.list(Me.ListBox1.ListCount - 1, 4) = tol
Me.ListBox1.list(Me.ListBox1.ListCount - 1, 5) = vid
Me.ListBox1.list(Me.ListBox1.ListCount - 1, 6) = procent
Me.ListBox1.list(Me.ListBox1.ListCount - 1, 7) = valu
Me.ListBox1.list(Me.ListBox1.ListCount - 1, 8) = ComboBox4.Text
Next n
End If
sh.Parent.Close (False)
End If
Next k
End With
Workbooks("конф.xls").Close (False)
'sh.Parent.Close (False)
End Sub
'ВСТАВКА ЗНАЧЕНИЙ
Private Sub ComboBox2_Change() ' при выборе наименование
If ComboBox2.Value = "" Then 'если комбо очистили то идем на иник
Else
'*********ИНАЧЕ ВСТАВЛЯЕМ ЗНАЧЕНИЕ***************
inic2:
Dim koli As Variant
koli = Application.InputBox("ВВЕДИТЕ КОЛИЧЕСТВО!", "НОВЫЙ РАСЧЕТ")
If koli = False Then Exit Sub 'если нажать Cancel
If koli <> "" Then 'если ни чего не ввели
If IsNumeric(koli) Then 'если ввели цифру
Новый расчет.ListView1.ListItems.Add , , "" 'вынесли вверх чтобы не было пустой строки
For i = 1 To Новый расчет.ListView1.ListItems.Count
If Новый расчет.ListView1.ListItems.Item(i) <> "" Then
Else
Новый расчет.ListView1.ListItems.Item(i) = ComboBox1.Value 'категория
Новый расчет.ListView1.ListItems.Item(i).SubItems(1) = ComboBox2.Value 'наименование
Новый расчет.ListView1.ListItems.Item(i).SubItems(2) = ListBox1.list(ListIndex, 3) 'материал
Новый расчет.ListView1.ListItems.Item(i).SubItems(3) = ListBox1.list(ListIndex, 4) 'толщина
Новый расчет.ListView1.ListItems.Item(i).SubItems(4) = ListBox1.list(ListIndex, 5) 'вид
Новый расчет.ListView1.ListItems.Item(i).SubItems(6) = ListBox1.list(ListIndex, 2) 'ед
Новый расчет.ListView1.ListItems.Item(i).SubItems(7) = CDbl(ListBox1.list(ComboBox2.ListIndex, 1)) 'закупка
Новый расчет.ListView1.ListItems.Item(i).SubItems(9) = ListBox1.list(ListIndex, 6) 'процент
Новый расчет.ListView1.ListItems.Item(i).SubItems(5) = koli 'кол-во
Новый расчет.ListView1.ListItems.Item(i).SubItems(8) = koli * Новый расчет.ListView1.ListItems.Item(i).SubItems(7) 'цена
p = Íîâûé_ðàñ÷åò.ListView1.ListItems.Item(i).SubItems(9) / 100 + 1
Новый расчет.ListView1.ListItems.Item(i).SubItems(10) = p * Новый расчет.ListView1.ListItems.Item(i).SubItems(8)
Новый расчет.ListView1.ListItems.Item(i).SubItems(11) = Новый расчет.ListView1.ListItems.Item(i).SubItems(10) - Новый расчет.ListView1.ListItems.Item(i).SubItems(8)
Новый расчет.ListView1.ListItems.Item(i).SubItems(12) = ComboBox4.Text
'общая стоимость
Dim a As Currency
a = Новый расчет.ListView1.ListItems.Item(i).SubItems(10)
OldStr = Новый расчет.TextBox1.Value
NewStr = Replace(OldStr, ".", ",") 'меняем точку из текстбокса на запятую для вычисления
s = NewStr
s = s + a
Новый расчет.TextBox1.Value = s
Новый расчет.TextBox28.Value = s
Новый расчет.TextBox34.Value = s
'краткий отчет
Новый расчет.TextBox4.Value = s 'общая сумма
Новый расчет.TextBox2.Value = i 'всего строк
Dim aa As Currency
aa = Новый расчет.ListView1.ListItems.Item(i).SubItems(8) 'закупка
ss = Новый расчет.TextBox3.Value 'закупка
ss = ss + aa (ОШИБКА)
Новый расчет.TextBox3.Value = ss
Новый расчет.TextBox5.Value = s - ss
End If
Next i
Else 'это для ошибки ввода koli
MsgBox "Вы ни чего не ввели, или ввели букву!", vbExclamation, ""
GoTo inic2
End If
Else
MsgBox " Вы ни чего не ввели, или ввели букву!", vbExclamation, ""
GoTo inic2
End If
'**********************ЧИСТИМ ЗА СОБОЙ И ИДЕМ НА ИНИК
ListBox1.Clear
ComboBox2.Clear
ComboBox1.Clear
ComboBox4.Clear
inic
End If
End Sub
Private Sub CommandButton1_Click()
Unload компоненты
End Sub
Не могу разобраться, ПОМОГИТЕ ПЛЗ!!! Очень надо!