Страницы: 1
RSS
Копирование данных из внешней книги с сортировкой: invalid or unqualified reference, выдает на при обьявлении цикла irow на первое rows
 
собираю макрос который должен скопировать данные из внешней книги и провести их сортровкуна соответствие признаку после чего удалить отброшенные ячейки для формирования пары столбцов без пустых ячеек. Огромное спасибо всем кто мне помогал до этого. Но сейчас я снова в тупике. При запуске отладки выдает invalid or unqualified reference на строке iRow = .Range("A" & .Rows.Count).End(xlUp).Row Если не трудно обьясните чем  он недоволен чем ему переменная то не угодила?

Код
 Sub макрос1()
 Const iPath = "пример.xlsx"
Const iPath2 = "менеджер.xlsm"
Dim job As Workbook
Dim f As Integer
Set job = Workbooks.Open(iPath)
Set job2 = Workbooks.Open(iPath2)
Dim iRow, i, p As Integer

job.Worksheets("Август").Activate
Range("a:b,j").Copy
job2.Worksheets("Лист 3").Activate
Active.past
iRow = .Range("A" & .Rows.Count).End(xlUp).Row
For f = 1 To iRow
   If Range(f, j).Value = "офсет" Then
      .Cells(f, d) = Range(f, a).Value
      .Cells(f, e) = Range(f, b).Value
   Else
      .Cells(f, d) = ""
      .Cells(f, e) = ""
   End If
Next
job.Close
 On Error Resume Next
     With Intersect(UsedRange, [d:e])
          .Value = .Value: .SpecialCells(4).Delete xlUp
     End With
End Sub
 
А зачем точка перед Range? У вас же нет With.
 
Михаил С. Спасибо. Убрал точки везде где он останавливался с ошибкой. Сакрос отработал. Правда на выходе лист остался пустой. :( Где то еще накосячено.
 
Range(f, j), Range(f, a), Range(f, b) - неправильно; для Range - Range("A1")
.Cells(f, d), .Cells(f, e)
a; b; d; e; j - это что за переменные, откуда берутся, чему равны?
 
Цитата
a; b; d; e; j - это что за переменные, откуда берутся, чему равны?
это столбцы данных на листе. Если я правильно понимаю то вместо них я должен был описать номер столбца? (1,2,3,4,6)
 
Если Cells, то можно Cells(1, 1)б Cells(1, 2), Cells(1, 5) или Cells(1, "a"), Cells(1, "b"), Cells(1, "e"); 1=№ строки, второе число или буквенное обозначение - столбец; если буква - обязательно в кавычках.
Если Range, то только типа Range("AB34") - буквы - столбец, число - строка: все обязательно в кавычках.
 
Спасибо. Сейчас попробую.
А не подскажете как сделать По нормальному коприрование ячеек из книги в книгу. Конечно мои эксперименты это обьем опыта по набиванию шишек. Но хотелось бы все таки продвигаться не только по граблям.
 
Еще вопрос если я в масив range хочу получить значение определенной ячейки определенного столбца в цикле (т.е. у меня столбец я вляется по факту константа, а строка переменная типа integer как мне это обозначить в программе ведь значения которые в кавычках воспринимаются только как константы. Если я правильно понимаю логику вижуал бейсика.
 
На последний вопрос про range можно не отвечать. Увидел пример понял что обходим этот момент присоединением переменной. Т.е. фактически Range значение в скобках воспринимает как string соответственно мы можем делать много интересного нового чудестного используя &  и кавычки.
 
Цитата
alex_j написал:
а строка переменная типа integer
integer для строк лучше не использовать; здесь переменная может изменяться в пределах -32 768…32 767, а даже в 2003 более 65 000 строк.
Для цикла по строкам лучше использовать Long.
 
Еще раз спасибо. Нашел оригинальный способ копировать данные. Переделал под несколько книг получилось:
<code> Sub макрос1()
Const iPath = "пример.xlsm"
Const iPath2 = "менеджер.xlsm"
Dim job As Workbook
Dim f As Integer
Set job = Workbooks.Open(iPath)
Set job2 = Workbooks.Open(iPath2)
Dim iRow, i, p As Integer
Set stf = job2.Worksheets("Август")
Set sti = job.Worksheets("Лист3")

stf.Activate
iRow = Range("A" & Rows.Count).End(xlUp).Row
For f = 1 To iRow
  If Range("j" & f).Value = "офсет" Then
     sti.Cells(f, "d") = stf.Cells(f, "a")
     sti.Cells(f, "e") = stf.Cells(f, "b")
  Else
     sti.Cells(f, "d") = ""
     sti.Cells(f, "e") = ""
  End If
  sti.Save
Next
job.Close
On Error Resume Next
    With Intersect(UsedRange, [d:e])
         .Value = .Value: .SpecialCells(4).Delete xlUp
    End With
End Sub <\code>
но теперь получил ошибку 9 на строке Set sti = job.Worksheets("Лист3")
Сам файл существует природу ошибки понять не могу.
 
1. Код в сообщениях нужно заключать в тэги (кнопка для оформления кода - <...>)
2. Вы в одной теме собираетесь задавать все свои вопросы? А как же правила форума?
 
Цитата
alex_j написал: Сам файл существует
Значит в нем 'Лист3' не существует
Согласие есть продукт при полном непротивлении сторон
 
vikttur У меня какие то глюки с сайтом. Я не могу нормально вызвать BBCode для правильного оформления сообщения. Если правила сайта предписывают закрывать тему и открывать новую в случае промежуточного решения то я естественно им подчинюсь. Произошла смена одной ошибки на другую при написании одного и того же макроса. Я понимаю, что это может идти как офтопик. Но подумал что если создам новую тему то это будет уже флуд т.к. одним и тем же макросом понаделаю много тем. Возможно я неправ. Пойду создавать новую тему.
 
Одна тема должна содержать решения по одной проблеме. Не причина, если разные проблемы объединены одной задачей
 
Цитата
alex_j написал: Я не могу нормально вызвать BBCode
На панели над полем ввода сообщения ищите кнопку <...>
Страницы: 1
Читают тему
Наверх