Уважаемые форумчане. Есть у меня в база, в другой вкладке "ввод" --поисковик. Когда я работаю в вкладке "ввод" бывает что нет этого наименование в базе. Возможно ли встака строки в вкладке "ввод" нового наименования и чтоб потом она оказалось еще в ввкладке "база" .Спасибо
Уважаемые форумчане. Есть у меня в база, в другой вкладке "ввод" --поисковик. Когда я работаю в вкладке "ввод" бывает что нет этого наименование в базе. Возможно ли встака строки в вкладке "ввод" нового наименования и чтоб потом она оказалось еще в ввкладке "база" .Спасибоrow
Критерий новой строки? Наименование? ...+Страна? ...+...+Цена?
на какое событие должна быть реакция по внесению нового в базу? если строка заполняется последовательно, то можно прописать событие на заполнение последнего поля "Цена".
Критерий новой строки? Наименование? ...+Страна? ...+...+Цена?
на какое событие должна быть реакция по внесению нового в базу? если строка заполняется последовательно, то можно прописать событие на заполнение последнего поля "Цена".Саня
проверяет новое ли название (нет в базе), заполнены ли все поля (страна, цена, ...), при выполнении всех условий добавляет в базу новую строку: [vba]
Код
Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) If Target.Rows.Count > 1 Then Exit Sub
If Intersect(Target, Columns("B:G")) Is Nothing Then Exit Sub If Intersect(Target, Columns("B:G")).Address <> Target.Address Then Exit Sub
Dim r As Integer r = Target.Row
Dim sName As String sName = Range("C" & r) If IsNewName(sName) Then If IsFilledAllFields(r) Then AddToBase Range("B" & r).Resize(, 6) End If
Else ' если НЕ новая позиция End If End Sub
Function IsNewName(sName As String) As Boolean IsNewName = (Sheets("база").Columns("D:D").Find(sName) Is Nothing) End Function
Function IsFilledAllFields(r As Integer) As Boolean IsFilledAllFields = False Dim c As Range For Each c In Sheets("ввод").Range("B" & r).Resize(, 6) If Len(c.Value) = 0 Then Exit Function Next c IsFilledAllFields = True End Function
Sub AddToBase(rng As Range) With Sheets("база") Dim lr As Integer lr = .Range("B2").End(xlDown).Row
Dim nn As Integer nn = CInt(.Range("B" & lr))
.Range("B" & lr + 1) = nn + 1 .Range("C" & lr + 1).Resize(, 6).Value = rng.Value End With End Sub
[/vba]
проверяет новое ли название (нет в базе), заполнены ли все поля (страна, цена, ...), при выполнении всех условий добавляет в базу новую строку: [vba]
Код
Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) If Target.Rows.Count > 1 Then Exit Sub
If Intersect(Target, Columns("B:G")) Is Nothing Then Exit Sub If Intersect(Target, Columns("B:G")).Address <> Target.Address Then Exit Sub
Dim r As Integer r = Target.Row
Dim sName As String sName = Range("C" & r) If IsNewName(sName) Then If IsFilledAllFields(r) Then AddToBase Range("B" & r).Resize(, 6) End If
Else ' если НЕ новая позиция End If End Sub
Function IsNewName(sName As String) As Boolean IsNewName = (Sheets("база").Columns("D:D").Find(sName) Is Nothing) End Function
Function IsFilledAllFields(r As Integer) As Boolean IsFilledAllFields = False Dim c As Range For Each c In Sheets("ввод").Range("B" & r).Resize(, 6) If Len(c.Value) = 0 Then Exit Function Next c IsFilledAllFields = True End Function
Sub AddToBase(rng As Range) With Sheets("база") Dim lr As Integer lr = .Range("B2").End(xlDown).Row
Dim nn As Integer nn = CInt(.Range("B" & lr))
.Range("B" & lr + 1) = nn + 1 .Range("C" & lr + 1).Resize(, 6).Value = rng.Value End With End Sub
ты вообще с VBA никак? там два одинаковых обработчика событий было... правой кнопкой мыши по ярлыку листа "ввод" - исходный текст - Ctrl+A - Del - вставишь туды это: [vba]
Code
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = [m1].Address Then Application.EnableEvents = False Dim rng As Range Me.Columns("B:H").ClearContents With Sheets("база") Set rng = .Range(.[c2], .Cells(.[c2].End(xlDown).Row, .[c2].End(xlToRight).Column)) .AutoFilterMode = False rng.AutoFilter Field:=2, Criteria1:="=*" & Target.Value & "*" rng.SpecialCells(12).Copy Me.[b2] .AutoFilterMode = False End With Application.EnableEvents = True End If '--------------------------------------------------------------------------- '---------------------------------------------------------------------------
If Target.Rows.Count > 1 Then Exit Sub
If Intersect(Target, Columns("B:G")) Is Nothing Then Exit Sub If Intersect(Target, Columns("B:G")).Address <> Target.Address Then Exit Sub
Dim r As Integer r = Target.Row
Dim sName As String sName = Range("C" & r) If IsNewName(sName) Then If IsFilledAllFields(r) Then AddToBase Range("B" & r).Resize(, 6) End If
Else ' если НЕ новая позиция End If End Sub
Function IsNewName(sName As String) As Boolean IsNewName = (Sheets("база").Columns("D:D").Find(sName) Is Nothing) End Function
Function IsFilledAllFields(r As Integer) As Boolean IsFilledAllFields = False Dim c As Range For Each c In Sheets("ввод").Range("B" & r).Resize(, 6) If Len(c.Value) = 0 Then Exit Function Next c IsFilledAllFields = True End Function
Sub AddToBase(rng As Range) With Sheets("база") Dim lr As Integer lr = .Range("B2").End(xlDown).Row
Dim nn As Integer nn = CInt(.Range("B" & lr))
.Range("B" & lr + 1) = nn + 1 .Range("C" & lr + 1).Resize(, 6).Value = rng.Value End With End Sub
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Me.Range(Me.Cells(Target.Row, 2), Me.Cells(Target.Row, 7)).Copy _ Sheets("таблица").[b65536].End(xlUp).Offset(1) Cancel = True End Sub
[/vba]
ты вообще с VBA никак? там два одинаковых обработчика событий было... правой кнопкой мыши по ярлыку листа "ввод" - исходный текст - Ctrl+A - Del - вставишь туды это: [vba]
Code
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = [m1].Address Then Application.EnableEvents = False Dim rng As Range Me.Columns("B:H").ClearContents With Sheets("база") Set rng = .Range(.[c2], .Cells(.[c2].End(xlDown).Row, .[c2].End(xlToRight).Column)) .AutoFilterMode = False rng.AutoFilter Field:=2, Criteria1:="=*" & Target.Value & "*" rng.SpecialCells(12).Copy Me.[b2] .AutoFilterMode = False End With Application.EnableEvents = True End If '--------------------------------------------------------------------------- '---------------------------------------------------------------------------
If Target.Rows.Count > 1 Then Exit Sub
If Intersect(Target, Columns("B:G")) Is Nothing Then Exit Sub If Intersect(Target, Columns("B:G")).Address <> Target.Address Then Exit Sub
Dim r As Integer r = Target.Row
Dim sName As String sName = Range("C" & r) If IsNewName(sName) Then If IsFilledAllFields(r) Then AddToBase Range("B" & r).Resize(, 6) End If
Else ' если НЕ новая позиция End If End Sub
Function IsNewName(sName As String) As Boolean IsNewName = (Sheets("база").Columns("D:D").Find(sName) Is Nothing) End Function
Function IsFilledAllFields(r As Integer) As Boolean IsFilledAllFields = False Dim c As Range For Each c In Sheets("ввод").Range("B" & r).Resize(, 6) If Len(c.Value) = 0 Then Exit Function Next c IsFilledAllFields = True End Function
Sub AddToBase(rng As Range) With Sheets("база") Dim lr As Integer lr = .Range("B2").End(xlDown).Row
Dim nn As Integer nn = CInt(.Range("B" & lr))
.Range("B" & lr + 1) = nn + 1 .Range("C" & lr + 1).Resize(, 6).Value = rng.Value End With End Sub
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Me.Range(Me.Cells(Target.Row, 2), Me.Cells(Target.Row, 7)).Copy _ Sheets("таблица").[b65536].End(xlUp).Offset(1) Cancel = True End Sub
Уважаемые форумчане. Саня мне помог с кодом.Но теперь когда я полностью сделал базу она дает ошибку (база состоит из 40 000 наименований) Прошу Вашей помощи. Спасибо
Уважаемые форумчане. Саня мне помог с кодом.Но теперь когда я полностью сделал базу она дает ошибку (база состоит из 40 000 наименований) Прошу Вашей помощи. Спасибоrow
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = [m1].Address Then Application.EnableEvents = False Dim rng As Range Me.Columns("B:H").ClearContents With Sheets("база") Set rng = .Range(.[c2], .Cells(.[c2].End(xlDown).Row, .[c2].End(xlToRight).Column)) .AutoFilterMode = False rng.AutoFilter Field:=2, Criteria1:="=*" & Target.Value & "*" rng.SpecialCells(12).Copy Me.[b2] .AutoFilterMode = False End With Application.EnableEvents = True End If '--------------------------------------------------------------------------- '---------------------------------------------------------------------------
If Target.Rows.Count > 1 Then Exit Sub
If Intersect(Target, Columns("B:G")) Is Nothing Then Exit Sub If Intersect(Target, Columns("B:G")).Address <> Target.Address Then Exit Sub
Dim r As Long r = Target.Row
Dim sName As String sName = Range("C" & r) If IsNewName(sName) Then If IsFilledAllFields(r) Then AddToBase Range("B" & r).Resize(, 6) End If
Else ' если НЕ новая позиция End If End Sub
Function IsNewName(sName As String) As Boolean IsNewName = (Sheets("база").Columns("D:D").Find(sName) Is Nothing) End Function
Function IsFilledAllFields(r As Long) As Boolean IsFilledAllFields = False Dim c As Range For Each c In Sheets("ввод").Range("B" & r).Resize(, 6) If Len(c.Value) = 0 Then Exit Function Next c IsFilledAllFields = True End Function
Sub AddToBase(rng As Range) With Sheets("база") Dim lr As Long lr = .Range("B2").End(xlDown).Row
Dim nn As Long nn = CInt(.Range("B" & lr))
.Range("B" & lr + 1) = nn + 1 .Range("C" & lr + 1).Resize(, 6).Value = rng.Value End With End Sub
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Me.Range(Me.Cells(Target.Row, 2), Me.Cells(Target.Row, 7)).Copy _ Sheets("таблица").[b65536].End(xlUp).Offset(1) Cancel = True End Sub
[/vba]
Долго искал, не могу найти. Помоги Саня
[vba]
Code
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = [m1].Address Then Application.EnableEvents = False Dim rng As Range Me.Columns("B:H").ClearContents With Sheets("база") Set rng = .Range(.[c2], .Cells(.[c2].End(xlDown).Row, .[c2].End(xlToRight).Column)) .AutoFilterMode = False rng.AutoFilter Field:=2, Criteria1:="=*" & Target.Value & "*" rng.SpecialCells(12).Copy Me.[b2] .AutoFilterMode = False End With Application.EnableEvents = True End If '--------------------------------------------------------------------------- '---------------------------------------------------------------------------
If Target.Rows.Count > 1 Then Exit Sub
If Intersect(Target, Columns("B:G")) Is Nothing Then Exit Sub If Intersect(Target, Columns("B:G")).Address <> Target.Address Then Exit Sub
Dim r As Long r = Target.Row
Dim sName As String sName = Range("C" & r) If IsNewName(sName) Then If IsFilledAllFields(r) Then AddToBase Range("B" & r).Resize(, 6) End If
Else ' если НЕ новая позиция End If End Sub
Function IsNewName(sName As String) As Boolean IsNewName = (Sheets("база").Columns("D:D").Find(sName) Is Nothing) End Function
Function IsFilledAllFields(r As Long) As Boolean IsFilledAllFields = False Dim c As Range For Each c In Sheets("ввод").Range("B" & r).Resize(, 6) If Len(c.Value) = 0 Then Exit Function Next c IsFilledAllFields = True End Function
Sub AddToBase(rng As Range) With Sheets("база") Dim lr As Long lr = .Range("B2").End(xlDown).Row
Dim nn As Long nn = CInt(.Range("B" & lr))
.Range("B" & lr + 1) = nn + 1 .Range("C" & lr + 1).Resize(, 6).Value = rng.Value End With End Sub
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Me.Range(Me.Cells(Target.Row, 2), Me.Cells(Target.Row, 7)).Copy _ Sheets("таблица").[b65536].End(xlUp).Offset(1) Cancel = True End Sub