2013-11-09 10 views
0

У меня есть один макрос кнопки для чтения данных из файлов excel после того, как вы оставили некоторые строки (несущественные начальные строки подробностей) (A1-A10) и объединили все эти файлы в один файл.Экран макроса Excel не отображает правильные данные

Он работает правильно, когда я использую файлы продуктов (файлы Excel, которые имеют сведения о конкретном продукте). Но когда я использую файлы excel, у которых есть данные компании, он читает одну строку из нерелевантной строки (A5), затем переходит к соответствующей части данных для чтения.

Я не могу понять, почему он читает одну строку, то есть название компании от компании excel. Я хочу, чтобы он напрямую переходил к (A11) -й строке для чтения. Что он делает с файлами produt.

Файлы продуктов - это файлы, которые содержат информацию о конкретном продукте. Принимая во внимание, что файлы компании - это файлы, в которых есть сведения обо всех продуктах конкретной компании.

С моим кодом ниже, я хочу знать, почему именно это название компании (строка A5), которую он не должен читать.

Sub Button2_Click() 
    Dim basebook As Workbook 
    Dim mybook As Workbook 
    Dim sourceRange As Range 
    Dim destrange As Range 
    Dim SourceRcount As Long 
    Dim N As Long 
    Dim rnum As Long 
    Dim MyPath As String 
    Dim SaveDriveDir As String 
    Dim FName As Variant 

    SaveDriveDir = CurDir 
    MyPath = "C:\" 
ChDrive MyPath 
ChDir MyPath 

FName = Application.GetOpenFilename(filefilter:="Excel Files (*.xls), *.xls", _ 
MultiSelect:=True) 
If IsArray(FName) Then 
Application.ScreenUpdating = False 
Set basebook = ThisWorkbook 

    For N = LBound(FName) To UBound(FName) 
    Set mybook = Workbooks.Open(FName(N)) 

    rnum = LastRow(basebook.Worksheets(1)) + 1 

    Set sourceRange = mybook.Worksheets(1).UsedRange 
    SourceRcount = sourceRange.Rows.Count 
    Set destrange = basebook.Worksheets(1).Cells(rnum, "A") 

    'basebook.Worksheets(1).Cells(rnum, "D").Value = mybook.Name 
    ' This will add the workbook name in column D if you want 

    sourceRange.Copy destrange 
    ' Instead of this line you can use the code below to copy only the values 

    ' With sourceRange 
    ' Set destrange = basebook.Worksheets(1).Cells(rnum, "A"). _ 
    ' Resize(.Rows.Count, .Columns.Count) 
    ' End With 
    ' destrange.Value = sourceRange.Value 

    mybook.Close False 

    'Clear Rows 
    rnum = LastRow(basebook.Worksheets(1)) + 1 
     While Not rnum = 2 
     If basebook.Worksheets(1).Cells(rnum, 1).Value = "" Or 
     Left(basebook.Worksheets(1).Cells 
       (rnum, 1).Value, 9) = "Copyright" Or Left              
      (basebook.Worksheets(1).Cells(rnum, 1).Value, 4) = "Free" Or Left 
      (basebook.Worksheets(1).Cells(rnum, 1).Value, 7) = "Product" Or 
     Left(basebook.Worksheets(1).Cells(rnum, 1).Value, 9) = "Intl Port" Or 
     Left(basebook.Worksheets(1).Cells(rnum, 1).Value, 5) = "House" Or 
     Left(basebook.Worksheets(1).Cells(rnum, 1).Value, 7) = "Arrival" Or 
     Left(basebook.Worksheets(1).Cells(rnum, 1).Value, 5) = "Bill " Then 
     basebook.Worksheets(1).Rows(rnum).Delete 
     End If 
     rnum = rnum - 1 
      Wend 

     Next 
     End If 
     ChDrive SaveDriveDir 
     ChDir SaveDriveDir 
    Application.ScreenUpdating = True 
     End Sub 

     Function LastRow(sh As Worksheet) 
     On Error Resume Next 
     LastRow = sh.Cells.Find(What:="*", _ 
    After:=sh.Range("A1"), _ 
     Lookat:=xlPart, _ 
     LookIn:=xlFormulas, _ 
     SearchOrder:=xlByRows, _ 
     SearchDirection:=xlPrevious, _ 
     MatchCase:=False).Row 
     On Error GoTo 0 
    End Function 
+0

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

+0

Конечно! моя проблема в том, что я предполагаю извлечь файлы excel из этого кода. – analyticalpicasso

+1

Я вижу ... Как сказано: вы должны сделать код достаточно понятным (например, с помощью табуляции). И вы должны объяснить, что вы имеете в виду с «fetch excel files», понимая, что у нас нет доступа к входным данным, мы не знаем, что теперь неправильно или что вы хотите сделать точно. Пример плохого вопроса: «это мой код, исправьте его для меня». Пример хорошего вопроса: «с помощью этого кода (правильно введенного в таблицу и прокомментированного), я анализирую 1,2,3,4, и он выводит a, b, c, d; я хочу, чтобы он выводил d, c, b, a, что мне делать?". Ну ... это мое предложение, если вы хотите получить помощь от меня или от любого другого человека, подобного мне – varocarbas

ответ

1

Вместо этого:

Set sourceRange = mybook.Worksheets(1).UsedRange 
SourceRcount = sourceRange.Rows.Count 

Попробуйте это:

With mybook.Worksheets(1) 
    SourceRcount = .UsedRange.Rows.Count 
    Set sourceRange = .UsedRange.Offset(10, 0).Resize(RowSize:=SourceRcount - 10) 
End With 

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

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