2015-02-17 4 views
3

Я просмотрел бесчисленные примеры (и их много можно найти) о том, как использовать диапазоны для выполнения определенной пользователем функции/подмножества VBA для копирования значения одной указанной ячейки в другую , К сожалению, независимо от того, что я пытаюсь, я не могу избежать ошибки 1004 Определенной приложением или объектной ошибки. Вот очень простой тестовый код:Ошибка 1004 для копии ячейки на основе диапазона

Private Sub Foobar() 
On Error GoTo fooErrorHandler 
Dim c1 As Range 
Dim c2 As Range 
Set c1 = Sheets("Sheet1").Range("D2") 
Set c2 = Sheets("Sheet1").Range("B3") 
c2.Value = c1.Value 
Exit Sub 
fooErrorHandler: 
MsgBox "Error Number: " & Err.Number & vbNewLine _ 
           & "Description: " & Err.Description 
End Sub 

Спасибо за любую помощь/указатели!

+1

Защищен ли «Лист1»? Кроме того, пожалуйста, 'Dim c1 as Range, c2 As Range', хотя это не должно вызывать ошибки, лучше объявить ваши переменные правильно. –

+2

Сам макрокод действительно, проблема может находиться в данных. Пожалуйста, разместите несколько примеров на листе. –

+0

Лист1 не защищен, о котором я знаю. Ванильный основной лист. Я разделил c1, c2 Dim утверждения, как вы предложили. Однако никаких изменений в результате. btw Я использую Excel 2010. – VBANovice

ответ

1

Вообще говоря, вы не можете использовать Function для управления объектом листа. Похоже, вы пытаетесь обойти это, вызвав subroutine из вызова функции barfoo. Я подозреваю, что это ошибка ... Если вы запустите подпрограмму foobar вручную (нажмите F5 или запустите из меню макросов), она должна выполняться без ошибок.

Я подтверждаю, что эта реализация вызывает ошибку, а также проверит ручной вызов foobar без ошибок.

Если вы можете лучше описать конечную цель, возможно, мы сможем рекомендовать более надежный способ ее достижения.

+0

Фантастический! Я не знал о том, что функции не могут манипулировать объектами листа. Я подтвердил, что ручное управление foobar выполнено успешно. Большое спасибо за это объяснение! – VBANovice

+0

Теперь ... на ваш вопрос о том, что я пытаюсь сделать ... У меня есть довольно большая таблица, которая имеет небольшой процент введенных пользователем данных и довольно большой процент автоматически вводимых данных ... пока все основанные по функциям. Эти функции зависят от других ссылок на ячейки для поиска или вычисления различных значений. То, что я пытаюсь сделать здесь, это ... * если * определенное значение найдено, то буквально изменить конкретное значение ячейки, чтобы «соответствовать» требованиям. Я делал это с функцией, но теперь вижу, что я должен сделать это с помощью sub. Но теперь я не уверен, как запустить этот юзер. – VBANovice

+0

Существует несколько процедур «Event», которые вы, вероятно, могли бы использовать для запуска этой процедуры. http://www.cpearson.com/excel/Events.aspx –

0

Модификация ячеек внутри UDF (функция, которая используется внутри ячейки так же, как встроенные формулы) не допускается. Если вы удалите вызов barfoo от C1, то как Foobar, так и barfoo должны работать без проблем.

+0

Спасибо! Очень ценим! – VBANovice

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