2015-05-22 3 views
0

Я пишу программу, которая в настоящее время, когда пользователь нажимает «ОК», сохраняет текущий файл, копирует определенные значения в файл; затем вставляет значения в другой файл. Затем оба файла закрываются. Моя проблема заключается в том, что он дает мне ошибку:Ошибка времени выполнения VBA Excel VBA 1004 «Определенная пользователем или объектная ошибка»

Run Time Error: 'Application-Defined or Object Defined Error'

Он подчеркивает эту строку:

ThisWorkbook.Worksheets("data").Range("C31", Range("C106").End (xlToRight)).Copy 

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

Range("C31", range("C31").End(xlToRight)) 

он еще не работал, и я наткнулся на то же сообщение об ошибке. Я хочу сказать, что я ссылался на что-то неправильно, но я этого не вижу. Любой ответ вообще был бы полезен, спасибо.

P.S. Прошу прощения за избыточность кода, я не использую «Dim» столько, сколько должен.

Sub Button425_Click() 
Dim FName As String 
Dim FPath As String 
Dim yourmsg As String 
Dim testmsg As String 
yourmsg = "Are you sure that you want to save and exit?" 
testmsg = MsgBox(yourmsg, vbOKCancel + vbExclamation) 
FPath = "I:\a\d\f\daily log recycle\" 
FName = Sheets("Sheet1").Range("C3").Text 
If testmsg = 1 Then 
    ThisWorkbook.SaveAs filename:=FPath & "\" & FName 
    Workbooks.Open ("I:\a\d\f\new daily log 1.xlsm") 
    ThisWorkbook.Worksheets("data").Range("C31", Range("C31").End(xlToRight)).Copy 
    Workbooks("new daily log 1.xlsm").Worksheets("data").Range("D31").PasteSpecial xlPasteValues 
    ThisWorkbook.Worksheets("sheet1").Range("E45").Copy 
    Workbooks("new daily log 1.xlsm").Worksheets("sheet1").Range("E44").PasteSpecial 
    Workbooks("new daily log 1.xlsm").Worksheets("sheet1").Range("E45").ClearContents 
    Workbooks("new daily log 1.xlsm").Save 
    Workbooks("new daily log 1.xlsm").Close 
    ThisWorkbook.Saved = True 
    Application.Quit 
Else 'do nothing 
End If 

End Sub

ответ

0

Вы смешивание полностью адресованное диапазон

ThisWorkbook.Worksheets("data").Range("C31" 

с относительно адресованного диапазона

Range("C106").End (xlToRight) 

Попробуйте

ThisWorkbook.Worksheets("data").Range("C31", ThisWorkbook.Worksheets("data").Range("C106").End (xlToRight)) 
0

Я вижу несколько проблем:

FPath = "I:\a\d\f\daily log recycle\" 
ThisWorkbook.SaveAs filename:=FPath & "\" & FName 

При попытке спасти вас будет ...\daily log recycle\\<filename>. Удалите одну из обратных косых черт \, я бы предложил удалить ее в линии .SaveAs.

Затем с этими двумя линиями:

Workbooks.Open ("I:\a\d\f\new daily log 1.xlsm") 
ThisWorkbook.Worksheets("data").Range("C31", Range("C31").End(xlToRight)).Copy 

ThisWorkbook, вероятно, не указывает на тот, который вы думаете. На всех следующих строках вы указываете Workbooks("new daily log 1.xlsm")., почему бы вам не заменить ThisWorkbook явным Workbooks("..."), чтобы вы могли быть на 100% уверены в том, какую из двух открытых книг вы ссылаетесь.

Я также хотел бы сделать, что для этих двух линий:

ThisWorkbook.Worksheets("sheet1").Range("E45").Copy 
ThisWorkbook.Saved = True 

Кроме того, просто чтобы быть ясно, ThisWorkbook.Saved = True говорит Excel для не подскажете вам сохранить книгу, когда вы закрываете его, но это Безразлично 't фактически сохранить книгу. Если вы хотите сохранить его, вам нужно будет использовать .Save, так же, как вы делаете пару строк выше, чем для Workbooks("new daily log 1.xlsm").Save.

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