2015-11-10 8 views
1

Ive никогда ничего не писал в VBA. У меня есть шкала, которая взвешивает предметы и вводит их в excel. Тем не менее, это требует чтения, когда я что-то взвешиваю, а затем записывает показания, когда шкала пуста между взвешиваниями. Я пытаюсь избавиться от пустого чтения в столбце D. Это действительно должно произойти при каждой записи в электронную таблицу.Excel VBA работает при записи

Этот код работает, если я запускаю его вручную. Как его обернуть так, чтобы он выполнялся автоматически? Кроме того, преднамеренно объясните, как активировать код. По какой-то причине это не ясно из моего интернет-поиска.

Sub clean_input_data() 
Dim i As Long 

With Application 
    .ScreenUpdating = False 
    .DisplayAlerts = False 
End With 

With ActiveSheet 
    If .AutoFilterMode Then .AutoFilterMode = False 
    i = .Range("D" & Rows.Count).End(xlUp).row 
    If i < 2 Then 
     MsgBox "No data found, macro exiting" 
     Exit Sub 
    Else 
     With .Range("D1:D" & i) 
      .AutoFilter 
      .AutoFilter field:=1, Criteria1:="<=0.005", Operator:=xlAnd 
     End With 
    End If 
    .UsedRange.Offset(1, 0).SpecialCells(xlCellTypeVisible).Rows.Delete 
    .AutoFilterMode = False 
End With 


With Application 
    .ScreenUpdating = True 
    .DisplayAlerts = True 
End With 

End Sub 

Большое спасибо

+2

«У меня есть весы, которые взвешивают предметы и вводят их в excel» - что именно это выглядит на практике? Что вызывает новую запись, и где размещается каждая новая запись? –

+1

Возможно, с помощью события «Worksheet_Change» и добавления некоторой логики для игнорирования, когда запись == 0 (или что бы «пустой» масштаб регистрировался на листе) –

+0

Tim. Я запускаю ключевое программное обеспечение rs232. Его «клавиатурный клин». Он считывает входящие данные из последовательного порта и помещает его в буфер клавиатуры. Масштаб отправляет данные, когда он воспринимает новый вес, а затем стабилизируется (следовательно, он записывает загруженные и выгруженные данные). После этого значение вводится в excel из буфера клавиатуры с «Enter». Поэтому в Excel данные вводятся программным обеспечением rs232, после чего он попадает в меня для ввода. Я хочу удалить «разгруженные» строки. – user2795569

ответ

2

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

Private Sub Worksheet_Change(ByVal Target As Range) 
    If Not Intersect(Target.Parent.Range("D:D"), Target) Is Nothing Then 
     Application.EnableEvents = False 
     Run "clean_input_data" 
     Application.EnableEvents = True 
    End If 
End Sub 

Я только что видел ответ Дэвида сейчас, я думаю, что у него есть идея получше.

+0

как это * избавиться от пустого чтения в столбце D *? –

+0

Если вы говорите о моем ответе, пользователь просто использует подпрограмму, которую он уже нашел для работы. Что касается комментария Дэвида, у вас может быть что-то вроде: «TempRange = Intersect (Target.Parent.Range (« D: D »), Target)' then 'Для каждой ячейки в TempRange'' Если ABS (Cell.Value) <= 0.005 then Cell.EntireRow.Delete' и т. Д. – Demetri

+0

Кажется, создается какой-то бесконечный цикл с отладкой, указывающей на поле «.AutoFilter: = 1, Criteria1: =« <= 0.005 », Operator: = xlAnd». Код «clean_input_data» выполняется отлично без вызова workheet_change. Тем не менее, это то, что мне нужно, чтобы автоматизировать это. – user2795569

Смежные вопросы