2016-08-25 2 views
0
Range("C4").Select 
    Application.CutCopyMode = False 
    With Selection.Validation 
     .Delete 
     .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ 
     xlBetween, Formula1:="=Materials" 
     .IgnoreBlank = True 
     .InCellDropdown = True 
     .InputTitle = "" 
     .ErrorTitle = "" 
     .InputMessage = "" 
     .ErrorMessage = "" 
     .ShowInput = True 
     .ShowError = True 
    End With 

Я пытаюсь скомпилировать проверку данных в одну ячейку с помощью макроса. Так что, когда вы выберете материал, график автоматически изменится. Материалы в коде - это диапазон проверки данных, я назвал диапазон, надеющийся на устранение ошибки.Macro дает ошибку без причины при создании падающей проверки данных?

Таким образом, основная проблема заключается в том, что во время работы макроса он дает «Ошибка времени выполнения 1004». Если я отлаживаю и помещаю свой желтый курсор на несколько шагов назад и иду с f8, он отлично работает. Я беру этот код из макроса записи. Код кажется правильным, но я не знаю, почему макрос дает ошибку.

+1

Удалить строку 'Диапазон (« C4 »). Выберите' и замените' With Selection.Validation' на 'With ThisWorkbook.Sheets (« Sheet1 »). Диапазон (« C4 ») .Validation' Также измените «Sheet1» на соответствующее имя листа и повторите попытку –

+0

И, наконец, см. [Как избежать использования Select в Excel VBA macros] (http://stackoverflow.com/questions/10714251/how-to-avoid- using-select-in-excel-vba-macros) :) –

+0

К сожалению, не сработало :(Я знаю, что есть много способов избежать выбора, но избегать его не решает проблемы все время. Если вы знаете, как правильно его использовать , он будет работать без проблем. У меня есть 1 месяц работы с макросом, используя много выбора и активации, никаких проблем. В вашем решении он не распознает эту рабочую книгу, так как она работает на модуле. Несмотря на то, что я удалил ее, программа всегда дает ошибку на .Add Тип: = xlValidateList, AlertStyle: = xlValidAlertStop, Operator: = _ xlBetween, Formula1: = "= Материалы" код. Спасибо за помощь в любом случае! – hakandeep

ответ

0

ok Я нашел его.

.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ 
     xlBetween, Formula1:=Materials 

поскольку материалы представляет собой таблицу, в настоящее время, я должен был удален дополнительный = и "

примечание:. С этим он не дает никакой ошибки, но не может прочитать данные из таблицы материалов также

+0

Вы никогда где-нибудь в вашем вопросе, что «Материалы» - это таблица? Вы сказали, что это «Именованный диапазон» –

+0

, это был именованный диапазон, я просто пробую разные вещи. В любом случае это не работает – hakandeep

+0

Интересная вещь, когда я отлаживаю и просто переделываю вещи после того, как я максимизирую окно рабочей книги (хотя это единственная рабочая книга, которая активна), она работает. Помимо этого он дает ошибку. Просто не имеет смысла – hakandeep

0

Это прекрасно работает для меня

Мои Предположения:.

  1. Materials - это именованный диапазон.
  2. Workbooks("ROL.xlsx") открыт в том же экземпляре Excel.

Код

Sub Sample() 
    Dim wbDV As Workbook 
    Dim wsDV As Worksheet 

    Set wbDV = Workbooks("ROL.xlsx") 
    Set wsDV = wbDV.Sheets("Sheet1") 

    With wsDV.Range("C4").Validation 
     .Delete 
     .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ 
     xlBetween, Formula1:="=Materials" 
     .IgnoreBlank = True 
     .InCellDropdown = True 
     .InputTitle = "" 
     .ErrorTitle = "" 
     .InputMessage = "" 
     .ErrorMessage = "" 
     .ShowInput = True 
     .ShowError = True 
    End With 
End Sub 
+0

Я постараюсь, но, как я уже сказал, excel не смог увидеть код, который я думаю. Листы и книги уже устроены. Но подождите, как 2 минуты, я попробую. Спасибо за все усилия btw, это много значит. – hakandeep

+0

дает такую ​​же ошибку. Как я уже сказал, мне нужно заставить Excel понять, что книга открыта. Нет никаких проблем с определениями диапазонов или книг. – hakandeep

+0

Как я уже сказал, это работает для меня. Открыты ли рабочие книги («ROL.xlsx»)? –

0
Workbooks(strii).Activate 
    Application.WindowState = xlMaximized 
Sheets("Sheet1").Activate 
    With Sheets("Sheet1").Range("C4").Validation 
     .Delete 
     .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ 
     xlEqual, Formula1:="=Materials" 
     .IgnoreBlank = True 
     .InCellDropdown = True 
     .InputTitle = "" 
     .ErrorTitle = "" 
     .InputMessage = "" 
     .ErrorMessage = "" 
     .ShowInput = True 
     .ShowError = True 
    End With 

максимизируя первенствовать работает просто отлично. Не знаю, почему, но он работает

+0

Я только что проверил. Я пропустил ту часть, где вы сказали, что рабочая книга сведена к минимуму. Мой код работает очень хорошо, когда рабочая книга максимизирована. Итак, все, что вам нужно было сделать, это добавить код максимизации в мой код;) –