2013-12-03 2 views
0

Я хочу запустить простой скрипт, который я бы еще больше усовершенствовал. Вчера у меня было что-то похожее на автофильтры, но я упустил его, и мне трудно найти решение. Я хочу использовать активное текстовое поле x для фильтрации сводной таблицы. Я попытался изменить расположение модуля, а также использовать acitveworkbook и activesheet и меня, но все, похоже, возвращают ошибку 1004. Я могу подтвердить, что текстовое поле находится на странице, а также сводная таблица. Это офис 13.1004 error on excel 2013 textbox VBA

Private Sub TextBox1_Change() 


ActiveSheet.PivotTables("PivotTable2").PivotFields("Agency").ClearAllFilters 
ActiveSheet.PivotTables("PivotTable2").PivotFields("Agency").CurrentPage = ActiveSheet.TextBox1.Text 

End Sub 

Я считаю, что решение, которое я вчера имел, связано с активизацией текстового поля. Но не могу вспомнить.

Любая помощь будет высоко оценена.

ответ

0

Ваша подпрограмма должна быть помещена в модуль кода рабочего листа. Я считаю, ошибка происходит потому, что _Change срабатывает событие с каждый нажатие клавиши, так что это очень вероятно, что первое нажатие клавиши создает значение TextBox1.Text, которое делает не соответствует какой-либо из PivotItems в этом PivotField.

Вы могли бы сделать что-то вроде этого. Используйте событие _GotFocus, чтобы предоставить запрос ввода. Эта подпрограмма затем неявно поднимет событие TextBox1_Change, назначив входное значение TextBox1.Text.

Private Sub TextBox1_GotFocus() 
    Dim str$ 
    str = InputBox("Please enter a value", "Pivot Field filter") 
    TextBox1.Text = str 
End Sub 

я временно отключить обработку ошибок (On Error Resume Next) назначить фильтр. Затем я проверяю, произошла ли ошибка, и вы можете (необязательно) сообщить пользователю, что они предоставили недопустимые критерии.

Sub TextBox1_Change() 
    Dim pt As PivotTable 
    Dim fld As PivotField 

    Set pt = PivotTables("PivotTable2") 'Modify as needed 
    Set fld = pt.PivotFields("Agency") 

    With fld 
     .ClearAllFilters 
     On Error Resume Next 
     .CurrentPage = TextBox1.Text 
     .Orientation = xlPageField 
     .Position = 1 
     If Err.Number <> 0 Then 
      'you may want to include a prompt here, i.e.: 
      MsgBox "Invalid Filter!", vbInformation 
      Exit Sub 
     End If 
     On Error GoTo 0 
    End With 
End Sub 
+0

Работает отлично. Спасибо за вашу помощь. – TXL