2014-02-04 4 views
0

У меня проблема с VBA для Excel. Я использую этот макрос, чтобы перейти в другие сохраненные книги excel, отсканировать все листы для дат, когда определенный класс запускает определенную область. Затем он скомпилирует всю информацию в один рабочий лист и сортирует по дате начала. После того, как я расширил элементы, которые он искал, я ударил по размеру и должен был разбить его на два субмарина. Теперь проблема заключается в том, что первый юг работает отлично, но когда второй запускает его, он перезаписывает данные в первом суб. Я попытался вставить следующее с ошибками.Данные, заменяемые Excel VBA

iRow = Ws.Cells(Ws.Rows.Count, 1).End(xlUp).Row + 1 

Я могу получить код для запуска Теперь, добавив следующий

Dim iRow As Long 
Dim ws As Worksheet 
Set ws = Worksheets("Board") 

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

Спасибо

EDIT

код с комментариями:

Set appExcel = Nothing 
intcounter = intcounter + 1 
strClassList = Right(strClassList, Len(strClassList) - 2) 
strClassDateList = Right(strClassDateList, Len(strClassDateList) - 2) 
strClassHourList = Right(strClassHourList, Len(strClassHourList) - 2) 
strClassStopList = Right(strClassStopList, Len(strClassStopList) - 2) 
intMainCounterTop = (intMainCounter + (Len(strClassList) - Len(Replace(strClassList, Chr(13), "", 1, , vbBinaryCompare)))) '- 1 

For i = 2 To intMainCounterTop 
    Worksheets("Board").Cells(i, 1) = "15U3 " & Left(strClassList, InStr(1, strClassList, Chr(13), vbBinaryCompare) - 1) 
    Worksheets("Board").Cells(i, 2) = "AF" 
    Worksheets("Board").Cells(i, 3) = Left(strClassDateList, InStr(1, strClassDateList, Chr(13), vbBinaryCompare) - 1) 
    Worksheets("Board").Cells(i, 4) = Left(strClassHourList, InStr(1, strClassHourList, Chr(13), vbBinaryCompare) - 1) 
    Worksheets("Board").Cells(i, 5) = Left(strClassStopList, InStr(1, strClassStopList, Chr(13), vbBinaryCompare) - 1) 

    strClassList = Right(strClassList, Len(strClassList) - InStr(1, strClassList, Chr(13), vbBinaryCompare) - 1) 
    strClassDateList = Right(strClassDateList, Len(strClassDateList) - InStr(1, strClassDateList, Chr(13), vbBinaryCompare) - 1) 
    strClassHourList = Right(strClassHourList, Len(strClassHourList) - InStr(1, strClassHourList, Chr(13), vbBinaryCompare) - 1) 
    strClassStopList = Right(strClassStopList, Len(strClassStopList) - InStr(1, strClassStopList, Chr(13), vbBinaryCompare) - 1) 
Next i 

Worksheets("Board").Cells(i, 1) = "15U3 " & strClassList 
Worksheets("Board").Cells(i, 2) = "AF" 
Worksheets("Board").Cells(i, 3) = strClassDateList 
Worksheets("Board").Cells(i, 4) = strClassHourList 
Worksheets("Board").Cells(i, 5) = strClassStopList 
+0

Что вы делаете с 'iRow', мы должны видеть больше кода для того, чтобы быть в состоянии помочь? – user2140261

+0

Я просто пытаюсь получить второй суб, чтобы добавить его результаты на тот же рабочий лист, что и первый суб, заполненный. Прямо сейчас они переписывают друг друга. У меня есть что-то вроде 3200 строк кода. Какую часть вам нужно увидеть? Я могу опубликовать некоторые фрагменты. –

+0

можете ли вы показать код, который вы используете для вставки значений? – L42

ответ

0

Это не ответ, а указатель на то, как вы можете улучшить ваш код немного.

Из кода, который вы опубликовали, видно, что у вас есть ряд строк, которые представляют собой списки элементов, разделенных Chr(13), с которыми вы работаете, чтобы извлечь отдельные фрагменты.

Если это на самом деле то, что вы делаете, то это было бы гораздо меньше кода (и проще в управлении), если сначала использовать

arrStrings = Split(bigStringHere, Chr(13)) 

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

Пример:

Sub StringsToArray() 

    Dim strClasses, arrClasses, n 

    strClasses = "Class1" & Chr(13) & "Class2" & Chr(13) & "Class3" 

    arrClasses = Split(strClasses, Chr(13)) 
    'arrClasses is now an array containing all the 
    ' items from "strClasses" which were separated by Chr(13) 
    ' You can use a counter to loop through the array 
    For n = LBound(arrClasses) To UBound(arrClasses) 
     Debug.Print n, arrClasses(n) 
    Next n 

End Sub 
+0

Благодарим вас за советы. Я работаю с чужим проектом, и я пытаюсь обновить его и очистить. Это действительно мой первый проект VBA, и я нахожусь на крутой кривой обучения. Любая помощь всегда приветствуется. –

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