Страницы: 1
RSS
[ Закрыто ] Type mismatch (Error 13) Не понятна ошибка, Не могу разобраться с ошибкой в макросе
 
Здравствуйте! Прошу помощи: Запускаем макрос из целевого файла. Исходный открываем через диалоговое окно.
Задача: из исходного(столбец указываем в процессе) в целевой (столбик 2) скопировать работы в соответствии с датами(столбцы 1 в обоих файлах).
Вроде всё просто, но выдаёт ошибку: Run-time error '13'
Пробовал изменять типы переменных, не помогает. Да и компилятор не указывает на что ругается...
Спасибо!
Во вложении целевой файл(который планируется заполнять), и исходный(их будет несколько)
 
Код
Dim исходнаяФайл As Variant
 
К сожалению появляется следующая ошибка: Run-time error '91'
Помогите, пожалуйста?
 
Цитата
Андрей Смирнов написал:
появляется следующая ошибка
- так далее нужно открыть книгу, задать значение этой переменной на которой ошибка...
 
Код
    Set целеваяКнига = ThisWorkbook 'Это у вас есть.
    Set исходнаяКнига = Workbooks.Open(исходнаяФайл) 'Это надо добавить.
 
И, по всей видимости, надо переписать и эти строки.
Код
    исходныйСтолбец = Application.InputBox("Введите номер столбца для копирования в исходной книге:", Type:=8).Column
...
    Set ИсходнаяДатаColumnДляКопирования = исходнаяКнига.Worksheets(1).Columns(исходныйСтолбец)
 
Не совсем корректно работает... В таком случае не позволяет ввести цифру/букву столбца, а мышкой почему-то выделяет ВЕСЬ рабочий диапазон. Но если ручками откорректировать(="G:G") в таком случае переносит...
Интересно, почему не срабатывает такая структура:
Код
    Dim ИсходныйСтолбецДляДиапазона As String
   ИсходныйСтолбецДляДиапазона = Chr(34) & ИсходныйСтолбец & ":" & ИсходныйСтолбец & Chr(34)
   Set ИсходнаяДатаColumnДляКопирования = исходнаяКнига.Worksheets(1).Range(ИсходныйСтолбецДляДиапазона)
 
Цитата
написал:
Не совсем корректно работает... В таком случае не позволяет ввести цифру/букву столбца
Так цифру или букву?
Если цифру, то конструкция "1:1" означает первую строку. Код работать не будет.
Если букву, то у вас исходныйСтолбец определён как целочисленная переменная. Код работать не будет.
Код
Dim исходныйСтолбец As Long
 
Блин, запутался уже совсем... После нескольких итераций изменений снова выскакивает эта же ошибка... '13' ... сразу после ввода буквы столбца... Уже кажется что вручную скопировать было бы быстрее, но... это же не "НАШ МЕТОД"...
Подскажите,  куда копать? Компилятор не указывает на что именно ругается...
 
Цитата
Андрей Смирнов написал:
Подскажите,  куда копать?
Подскажите где брать Исходную книгу?
Согласие есть продукт при полном непротивлении сторон
 
Код
    If ИсходныйСтолбец = False Then Exit Sub ' Пользователь нажал Cancel 'Не работает

    If ИсходныйСтолбец = "" Then Exit Sub ' Пользователь нажал Cancel    'Работает
 
Сделал так:
Код
If ИсходныйСтолбец = Null Then Exit Sub ' Пользователь отменил ввод/ничего не ввёл

Теперь Ругается что '1004' - типа нет такого
 
Если перенести макрос из модуля листа в обычный модуль (где ему и место), редактор укажет на строку с ошибкой
Код
   ' ИсходныйСтолбец = Application.InputBox("Введите букву столбца для копирования в исходной книге:", Type:=2)
    If ИсходныйСтолбец = False Then Exit Sub ' Пользователь нажал Cancel

А в чем она, Вам указал МатросНаЗебре, в сообщении выше
Согласие есть продукт при полном непротивлении сторон
 
Сначала обрадовался, вроде бы перенесло данные, но при попытке загрузить данные из другого файла - снова выскакивает эта же ошибка '13'
Ругается на это:
Код
найденнаяСтрока = Application.Match(целеваяДата, ИсходнаяДатаColumn, 0)

и из второго файла не хочет читать... подозреваю что не весь столбец А:А заполнен датами. Но как исправить код, чтобы остальные данные игнорировал?

 
Код
        найденнаяСтрока = 0
        On Error Resume Next
        найденнаяСтрока = Application.Match(целеваяДата, ИсходнаяДатаColumn, 0)
        On Error GoTo 0
        'If Not IsError(найденнаяСтрока) Then ' Значение найдено
        If Not найденнаяСтрока = 0 Then ' Значение найдено
 
Уберите объявление переменных из цикла.
Код
Dim i As Long                       'ПРАВИЛЬНО
For i = 2 To ЦелеваяДатаColumn.Rows.Count
        Dim целеваяДата As Double   'НЕПРАВИЛЬНО
 
Цитата
написал:
найденнаяСтрока = 0
       On Error Resume Next
       найденнаяСтрока = Application.Match(целеваяДата, ИсходнаяДатаColumn, 0)
       On Error GoTo 0
          If Not найденнаяСтрока = 0 Then ' Значение найден
Исправил, однако не работает... ищет 11.01.24 в исходном файле, но там то его нет.
Уже руки опускаются... Задумывалась как вспомогательная операция...
 
Огонь! Практически один-в-один с кодом с форума. Разницы ноль, но почему-то не работает.
Код
    For i = 2 To ЦелеваяДатаColumn.Rows.Count
      
        целеваяДата = ЦелеваяДатаColumn.Cells(i, 1).Value

        ' Поиск соответствующей строки в исходной книге
        
        найденнаяСтрока = 0
        On Error Resume Next
        найденнаяСтрока = Application.Match(целеваяДата, ИсходнаяДатаColumn, 0)
        On Error GoTo 0
        'If Not IsError(найденнаяСтрока) Then ' Значение найдено
        If Not найденнаяСтрока = 0 Then ' Значение найдено
 
Мне кажется пора заканчивать в этой теме, а то то сейчас все в кучу свалите.
С первоначальной ошибкой разобрались.
Макросы нужно размещать в соответствующих модулях.
Если бы было так, то сразу бы увидели какая строка вызывает ошибку

Тема закрыта.
Согласие есть продукт при полном непротивлении сторон
Страницы: 1
Наверх