2012-12-28 2 views
1

Я пытаюсь взять неравномерный диапазон данных на одном листе и связать его (ячейки будут иметь «= Sheet1! A1», а не жестко закодированные значения), чтобы другой рабочий лист в той же книге.Связывание данных между двумя листами на основе неравномерных диапазонов данных

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

Вот мой код до сих пор, но я получаю сообщение об ошибке сказав вам не может использовать .copy с таким выбором. Может кто-нибудь попросит об этом. Спасибо.

Sub test() 
Application.ScreenUpdating = False 


ActiveSheet.UsedRange.SpecialCells(xlCellTypeConstants).Copy 
With Sheets("Sheet2") 
    .Activate 
    .Range("A1").Select 
    ActiveSheet.Paste Link:=True 
End With 


Application.CutCopyMode = False 
Application.ScreenUpdating = True 
End Sub 
+0

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

+0

Какова информация, размещенная в книге происхождения? Все в столбце A? несколько столбцов? одна строка, несколько строк? Не могли бы вы привести небольшой пример того, как данные находятся на исходном листе, и как вы хотите, чтобы он смотрел готовый продукт? –

+0

Я не знаю, как прикрепить файлы excel здесь. Невозможно найти способ прикрепить его, поэтому вот следующая лучшая вещь .... Данные находятся в 5-6 столбцах, опускающихся примерно на 100 строк. Существует несколько таблиц с заголовками таблицы, разделенных пустыми строками. Я хочу, чтобы пустые строки/ячейки не были связаны с новым листом. – eMTy

ответ

0

Вы можете перебрать ячейки SpecialCells диапазонов по клетке, и писать ссылки на основе адреса источника клеток, как этот

Sub test() 
    Dim cl As Range 
    Dim sh As Worksheet 
    Dim ShName As String 
    Dim OldCalc As XlCalculation 

    Application.ScreenUpdating = False 
    OldCalc = Application.Calculation 
    Application.Calculation = xlCalculationManual 

    Set sh = Worksheets("Sheet2") 
    sh.Cells.Clear '<-- Optional 
    ShName = "='" & ActiveSheet.Name & "'!" 
    For Each cl In ActiveSheet.UsedRange.SpecialCells(xlCellTypeConstants) 
     sh.Range(cl.Address).Formula = ShName & cl.Address 
    Next 

    Application.ScreenUpdating = True 
    Application.Calculation = OldCalc 
End Sub 

В то время как цикл в диапазоне не является идеальным (из-за скорости), в этом случае он может быть адекватным.

Это Sub будет ошибка, если активный лист пуст: вы можете добавить обработчик ошибок для этого случая

+0

Спасибо, что это работает как шарм !!! – eMTy

+0

Обработка ошибок всегда должна использоваться с 'SpecialCells'. – brettdj

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