2015-01-09 2 views
0

Я устал искать решения. Я использую Excel Macro для импорта данных в лист Excel. Сам код получает данные от другого листа excel и цикла через количество листов excel. Для других листов он работает нормально, но в некоторых случаях он импортирует данные больше, чем требуется и произвольно, в любые столбцы. Предположим, что он должен циклически прокручивать код 9 раз, тогда он импортирует 9 правильных строк (с правильным кодом ячейки excel) и некоторые дополнительные случайные строки со случайным размером ячейки excel. Мой макрокод приведен ниже:Excel Macro импортирует данные в лист Excel

«shtData» - это файлы Excel, из которых данные должны быть импортированы. «shtCurrent» - это лист, в котором записывается макрос, и данные должны быть импортированы.

Set ACell = shtData.Cells.Find("Fund", LookIn:=xlValues, LookAt:=xlWhole, after:=shtData.Range("A1")).Offset(2, 0) 
       Set BCell = ACell.End(xlDown) 

    For Each DataCell In shtData.Range(ACell, BCell) 


      Set rCell = shtCurrent.Range("A65000").End(xlUp).Offset(1, 0) 

      rCell.Value = DataCell.Offset(0, 7).Value 'date 
      rCell.Offset(0, 1).Value = DataCell.Offset(0, 8).Value 'date format 
      rCell.Offset(0, 2).Value = "TEXT" 
      rCell.Offset(0, 3).Value = "TEXT" 
      rCell.Offset(0, 4).Value = "TEXT" 
      ' null value required for rCell.Offset(0, 5) 
      rCell.Offset(0, 6).Value = "100.00" 
      rCell.Offset(0, 7).Value = "100.00" 
      rCell.Offset(0, 8).Value = "100" 
      rCell.Offset(0, 9).Value = "100" 
      ' null value required for rCell.Offset(0, 10) 
      rCell.Offset(0, 11).Value = RunDate 'date format 
      rCell.Offset(0, 12).Value = "TEXT" 
      rCell.Offset(0, 14).Value = shtData.Range("C5").Value 'Date format 

    Next DataCell 

Пожалуйста, я сыт по горло этим. Любая помощь будет оценена.

+0

Эта функция DomeCell.End (xlSomeDirection) может делать удивительные вещи. Чтобы узнать, что происходит, добавьте такие выражения, как «debug.print ACell.parant.name, ACell.address, BCell.address» и проверьте окно imediate –

ответ

0

Без дополнительной информации, код, кажется, работает нормально для меня, после того, как были определены объекты рабочего листа. Поскольку ваш код не был воспроизводимым примером - т. Е. Вы опустили некоторые подробности - я не могу сказать, как был определен shtData (если вообще).

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

В любом случае .. Я создал два рабочих листа под названием shtData и shtCurrent. Я ссылаться на них в коде с помощью

Dim shtData, shtCurrent As Worksheet 
Set shtData = Worksheets("shtData") 
Set shtCurrent = Worksheets("shtCurrent") 

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

Вот ваш код в качестве воспроизводимого примера (очевидно, нужны некоторые значения в shtData).

Option Explicit 

Sub testtest() 

Dim ACell, BCell, DataCell, rCell As Range 
Dim shtData, shtCurrent As Worksheet 

Dim RunDate As Date 
RunDate = Now() 

Set shtData = Worksheets("shtData") 
Set shtCurrent = Worksheets("shtCurrent") 

Set ACell = shtData.Cells.Find("Fund", LookIn:=xlValues, LookAt:=xlWhole, after:=shtData.Range("A1")).Offset(2, 0) 
Set BCell = ACell.End(xlDown) 


    For Each DataCell In shtData.Range(ACell, BCell) 


      Set rCell = shtCurrent.Range("A65000").End(xlUp).Offset(1, 0) 

      rCell.Value = DataCell.Offset(0, 7).Value 'date 
      rCell.Offset(0, 1).Value = DataCell.Offset(0, 8).Value 'date format 
      rCell.Offset(0, 2).Value = "TEXT" 
      rCell.Offset(0, 3).Value = "TEXT" 
      rCell.Offset(0, 4).Value = "TEXT" 
      ' null value required for rCell.Offset(0, 5) 
      rCell.Offset(0, 6).Value = "100.00" 
      rCell.Offset(0, 7).Value = "100.00" 
      rCell.Offset(0, 8).Value = "100" 
      rCell.Offset(0, 9).Value = "100" 
      ' null value required for rCell.Offset(0, 10) 
      rCell.Offset(0, 11).Value = RunDate 'date format 
      rCell.Offset(0, 12).Value = "TEXT" 
      rCell.Offset(0, 14).Value = shtData.Range("C5").Value 'Date format 

    Next DataCell 
End Sub 
+0

спасибо .. Я пропустил некоторые строки кода. Объект «shtCurrent» оставил свое последнее заданное значение, поэтому код импортировал дополнительные строки. Но теперь у меня есть исправления. Спасибо за ваше время. – vivek