2013-11-06 5 views
1

Я хотел бы скопировать данные из файла csv в рабочий лист excel. Есть 11 файлов csv. До сих пор у меня есть это (это модифицированная версия от предыдущей должности):Подзаголовок ошибки вне диапазона в этом скрипте excel vba

Sub importData() 
    Dim filenum(0 To 10) As Long 
    filenum(0) = 052 
    filenum(1) = 060 
    filenum(2) = 064 
    filenum(3) = 068 
    filenum(4) = 070 
    filenum(5) = 072 
    filenum(6) = 074 
    filenum(7) = 076 
    filenum(8) = 178 
    filenum(9) = 180 
    filenum(10) = 182 

    Dim sh1 As Worksheet 
    On Error GoTo my_handler 

    For lngPosition = LBound(filenum) To UBound(filenum) 
    'Windows(filenum(lngPosition) & ".csv").Activate 
    Workbooks.Add(filenum(lngPosition) & ".csv").Activate 
Range("A1").Select 
    Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select 
    Selection.Copy 
    Windows("30_graphs_w_Macro.xlsm").Activate 
    Set sh1 = Worksheets(filenum(lngPosition)).Activate 
    Range("A69").Paste 
    Range("A69").Select 

    Next lngPositionlngPositionlngPosition 

my_handler: 
    MsgBox "All done." 
    Exit Sub 
End Sub 

Этот код дает мне подстрочный из ошибки диапазона на линии

Set sh1 = Worksheets(filenum(lngPosition)).Activate 

Пожалуйста, помогите мне исправить это , А также, если есть какие-либо другие советы о том, как улучшить этот код, пожалуйста, дайте мне знать

+1

Сначала удалите строку '.Activate'. Если это не поможет, поместите 'MsgBox filenum (lngPosition)' перед строкой 'Set sh1..' и посмотрите, что говорит MsgBox. Убедитесь, что у вас есть лист с таким же именем. –

+0

ОК .. Я только что видел это. файл 052.csv открывается .. и затем я получаю сообщение, что оно выходит за пределы диапазона. Одна вещь, которую я заметил, это то, что файл открывается как файл [только для чтения]. Когда я открываю его вручную, он открывается noramlly – user2883071

+0

@mehow: К сожалению, не было вашего комментария. Дайте мне знать, если вы хотите опубликовать его в качестве ответа, и я удалю свой ответ. –

ответ

2

Set SH1 = Worksheets (FileNum (lngPosition)). Активация

Вы получаете Subscript out of range error ошибку becuase он не может найти этот Рабочий лист.

Также пожалуйста ... пожалуйста ... пожалуйста, не используйте .Select/.Activate/Selection/ActiveCell Возможно, вы захотите увидеть How to Avoid using Select in Excel VBA Macros.

+0

. Я открываю новый вопрос с измененным кодом. – user2883071

0

Это выглядит немного лучше, чем ваша предыдущая версия, но избавиться от этого. Активируйте эту строку и посмотрите, не по-прежнему ли вы получаете эту ошибку.

Dim sh1 As Worksheet 
set sh1 = Workbooks.Add(filenum(lngPosition) & ".csv") 

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

sh1.Range("A69").Paste 
sh1.Range("A69").Select 

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

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