2016-05-10 2 views
0

Я задал несколько вопросов в отношении меню макросов для проверки валидности данных. Я подошел очень близко, чтобы решить свои проблемы. Однако, когда я применяю свой код на листе, всегда печатайте содержимое моего последнего макроса. Мой код для листа, как показано ниже:Сбой проверки данных Вызов макросов

Option Explicit 

Private Sub Worksheet_Change(ByVal Target As Range) 
If Target.Address = "$B$3" Then 
    On Error GoTo bm_Safe_Exit 
    Application.EnableEvents = False 
    Select Case Target.Value2 
     Case "ABCP" 
      Call Macro1 
     Case "Accounting Policy" 
      Call Macro2 
     Case "Audit Committee" 
      Call Macro3 
     Case "Auto" 
      Call Macro4 
     Case "Auto Issuer Floorplan" 
      Call Macro5 
     Case "Auto Issuers" 
      Call Macro6 
     Case "Board of Director" 
      Call Macro7 
     Case "Bondholder Communication WG" 
      Call Macro8 
     Case "Canada" 
      Call Macro9 
     Case "Canadian Market" 
      Call Macro10 
      Case Else 
       'Do Nothing 
    End Select 
End If 

bm_Safe_Exit: Application.EnableEvents = True End Sub

У меня есть десять макрокоманд, а содержание в значительной степени то же самое, только клеточные изменения. А вот код:

Sub Macro1() 
Range("F2").Select 
Selection.FormulaArray = _ 
    "=IF(COUNTIF(Database!R2C35:R10000C35,Committees!R2C1)>=ROW(Committees!R2C:RC),INDEX(Database!R2C[-5]:R10000C[-5],SMALL(IF(Database!R2C35:R10000C35=Committees!R2C1,ROW(Database!R2C35:R10000C35)-ROW(Database!R2C35)+1),ROWS(Committees!R2C:RC))),"""")" 
Selection.AutoFill Destination:=Range("F2:T2"), Type:=xlFillDefault 
Range("F2:T2").Select 
Selection.AutoFill Destination:=Range("F2:T5000") 
Range("F2:T5000").Select 
Sheets("Reports").Select 
Range("F2").Select 
Selection.FormulaArray = "=IF(ISERROR(Committees!RC),"""",Committees!RC)" 
Selection.AutoFill Destination:=Range("F2:T2"), Type:=xlFillDefault 
Range("F2:T2").Select 
Selection.AutoFill Destination:=Range("F2:T5000") 
Range("F2:T5000").Select 
Range("E2").Select 
End Sub 

При запуске макроса в VBA, он также уведомляет меня о том, что автозаполнение Range не удалось.

Пожалуйста, помогите исправить код, спасибо!

+1

Во-первых, я *** очень рекомендую изучить [Как избежать использования '.Activate \ .Select'] (http://stackoverflow.com/questions/10714251/how-to-avoid-using-select -in-excel-vba-macro), так как это может привести к головной боли, особенно при использовании нескольких рабочих листов. Кроме того, какой макрос бросает ошибку, событие Worksheet_Change или 'Macro 1'? Какая строка и какая ошибка происходит? – BruceWayne

+0

Привет, Брюс, спасибо за рекомендацию. Это макрос, который бросает ошибку, четвертую строку с выбором. –

+0

Хм, я попробовал это, и он заполнился для меня. У меня такое чувство, потому что вы используете '.Select'. Я добавлю ответ, который покажет вам ваш «Макро 1» без '.Select' и посмотрит, поможет ли это кому-либо. – BruceWayne

ответ

1

Я думаю, что проблема, вероятно, в использовании .Select. Попробуйте заменить Macro 1 с этим:

Sub Macro_1() 

Range("F2").FormulaArray = _ 
    "=IF(COUNTIF(Database!R2C35:R10000C35,Committees!R2C1)>=ROW(Committees!R2C:RC),INDEX(Database!R2C[-5]:R10000C[-5],SMALL(IF(Database!R2C35:R10000C35=Committees!R2C1,ROW(Database!R2C35:R10000C35)-ROW(Database!R2C35)+1),ROWS(Committees!R2C:RC))),"""")" 
Range("F2").AutoFill Destination:=Range("F2:T2"), Type:=xlFillDefault 
Range("F2:T2").AutoFill Destination:=Range("F2:T5000") 

Sheets("Reports").Activate ' not needed, but there just in case you want to step through with F8 
Sheets("Reports").Range("F2").FormulaArray = "=IF(ISERROR(Committees!RC),"""",Committees!RC)" 
Sheets("Reports").Range("F2").AutoFill Destination:=Sheets("Reports").Range("F2:T2"), Type:=xlFillDefault 
Sheets("Reports").Range("F2:T2").AutoFill Destination:=Sheets("Reports").Range("F2:T5000") 

End Sub 

Примечание все Sheets("Reports") во второй части. Вы также должны сделать это для первой части, я просто не знал, на каком листе эта информация была включена.

+0

Он отлично работал, спасибо! –

+0

На самом деле, еще один вопрос. Я применил этот формат к другим макросам, я только изменил первый массив формул, почему он выдает те же результаты, что и Macro1? –

+0

@JosephLin - Я не уверен. Можете ли вы опубликовать (в своем OP), скажем, «Макро 2» изначально, а затем измененный «Макро 2»? Я взгляну. В основном, я бы сказал, чтобы обратить внимание на рабочие листы. Заметим еще раз, что первая часть моего ответа до этого разрыва строки будет работать независимо от того, что такое '' ActiveSheet''. Если вам нужно, чтобы он запускался на определенном листе, добавьте это имя до 'Range()', как это было во второй части. – BruceWayne

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