2016-11-13 2 views
0

Вот что делает и работает следующий VBA: - У меня есть пара таблиц и используется именованные диапазоны для каждого из них. - тогда на другой вкладке (где есть код) у меня есть два раскрывающихся списка, чтобы пользователи моего отчета Excel могли выбрать таблицу (только по одному за раз), для которой они хотят отображать данные.VBA для наложения таблицы меньшего размера. Выпадающий список

ПРОБЛЕМА для меня заключается в том, что если я выберу таблицу из раскрывающегося списка, имеющей 30 строк, все будет выглядеть как ячейка назначения A2. НО, если тогда я выберу таблицу, которая имеет только 10 строк, то новая таблица с 10 строками будет наложена на предыдущую таблицу из 30 строк. НО 20 строк (оставшиеся из таблицы 30 строк) под таблицей из 10 строк будут STILL там.

Мой вопрос: Как мне изменить код ниже, чтобы 20 строк из предыдущей таблицы НЕ появлялись, когда в раскрывающемся списке выбрана 10-таблица rwo?

дайте мне знать, если выше не имеет смысла. Спасибо v много.

Мой код в минуту выглядит следующим образом:

Private Sub Worksheet_Change(ByVal Target As Range) 
    Dim tableName As String 
    Dim tableRange As Range 
    Dim TypeOfCosts As String 
    Application.EnableEvents = False 

    If Range("B1").Text = "Fixed Staff Costs" Then 
     TypeOfCosts = "_Fixed_Staff" 
    ElseIf Range("B1") = "Variable Staff Costs" Then 
     TypeOfCosts = "_Variable_Staff" 
    ElseIf Range("B1") = "Production Costs" Then 
     TypeOfCosts = "_Production" 
    ElseIf Range("B1") = "Infrastructure Costs" Then 
     TypeOfCosts = "_Infrastructure" 
    ElseIf Range("B1") = "Other Costs" Then 
     TypeOfCosts = "_Other" 
    Else 
     TypeOfCosts = "" 
    End If 

    tableName = Range("A1").Text & TypeOfCosts & "_Costs" 

    On Error Resume Next 
    Set tableRange = Application.Range(tableName) 
    Debug.Print ThisWorkbook.Names.Count 
     If Not (tableRange Is Nothing) And Err = 0 Then 
     tableRange.Copy Destination:=Range("A3") 
    Else 
     Err.Clear 
    End If 
    On Error GoTo 0 
    Application.EnableEvents = True 
End Sub 
+0

'Range («A3») CurrentRegion.ClearContents' перед копированием другого диапазона, до тех пор, пока есть пустое пространство вокруг существующей таблицы (и до тех пор, пока существует существующая таблица). Это действительно зависит от того, как выглядит остальная часть листа, и все ли ваши таблицы представляют собой предсказуемый размер/макет и т. Д. –

+0

Спасибо, но где именно мне нужно добавить вашу строку кода, предложенную выше? – Elena

+0

mmm Ваш код, кажется, не работает .. любые идеи почему? – Elena

ответ

0

ClearContents (четкие данные): удалить все данные из A3 до последней ячейки в CurrentRegion сохраняя все заголовки столбцов:

Range("A3",Range("A3").CurrentRegion.SpecialCells(xlCellTypeLastCell)).ClearContents 

Очистить (данные и форматирование): Очистить данные и/или форматирование:

Range("A3",Range("A3").CurrentRegion.SpecialCells(xlCellTypeLastCell)).Clear 
+0

Спасибо, но где именно мне нужно добавить вашу строку кода? Не могли бы вы вставить его в свой код и вставить весь новый VBA, чтобы я мог видеть, где именно это должно быть? Cheers – Elena

+0

Где угодно, прежде чем копировать новые данные. –

+0

привет, к сожалению, ваш код выше удаляет только содержимое предыдущей таблицы, но формат не удаляется, например, в новой таблице 20 строк синих пустых ячеек. Будем очень благодарны за любые другие предложения? – Elena

0

Это довольно тупой подход, но, не зная больше о вашей установке:.

With Range("A3").Resize(1000,10) 
    .ClearContents 
    .ClearFormats 
End with 
+0

он работает! вы гений, не можете поблагодарить вас достаточно, но спасибо :) – Elena