2015-03-23 4 views
0
Sub ImportFixed() 
' 
Sheets("Front-Page").Select 
    Sheets("SPROC").Visible = True 
Sheets("SPROC").Select 
ThisWorkbook.RefreshALL 
DoEvents 
    'Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False 
    Sheets("SPROC").Select 
    Range("J2").Select 
    Range(Selection, Selection.End(xlToLeft)).Select 
    Range(Selection, Selection.End(xlDown)).Select 
    Selection.Copy 
    Sheets("Master-Data-Sheet").Select 
    Range("A1914").Select 
    ActiveSheet.Paste 
    Sheets("SPROC").Select 

    Range("N2").Select 
    Range(Selection, Selection.End(xlDown)).Select 
    Application.CutCopyMode = False 
    Selection.Copy 
    Sheets("Master-Data-Sheet").Columns("N:N").Range("N1914").Paste 

    Cells.Select 
    Application.CutCopyMode = False 
    With Selection.Font 
     .Size = 9 
     .Strikethrough = False 
     .Superscript = False 
     .Subscript = False 
     .OutlineFont = False 
     .Shadow = False 
     .Underline = xlUnderlineStyleNone 
     .TintAndShade = 0 
    End With 
    With Selection.Font 
     .Name = "Calibri" 
     .Size = 9 
     .Strikethrough = False 
     .Superscript = False 
     .Subscript = False 
     .OutlineFont = False 
     .Shadow = False 
     .Underline = xlUnderlineStyleNone 
     .TintAndShade = 0 
     .ThemeFont = xlThemeFontMinor 
    End With 
    Columns("A:H").Select 
    With Selection 
     .HorizontalAlignment = xlGeneral 
     .WrapText = False 
     .Orientation = 0 
     .AddIndent = False 
     .IndentLevel = 0 
     .ShrinkToFit = False 
     .ReadingOrder = xlContext 
     .MergeCells = False 
    End With 
    With Selection 
     .HorizontalAlignment = xlCenter 
     .WrapText = False 
     .Orientation = 0 
     .AddIndent = False 
     .IndentLevel = 0 
     .ShrinkToFit = False 
     .ReadingOrder = xlContext 
     .MergeCells = False 
    End With 

    Columns("M:N").Select 
    With Selection 
     .HorizontalAlignment = xlGeneral 
     .WrapText = False 
     .Orientation = 0 
     .AddIndent = False 
     .IndentLevel = 0 
     .ShrinkToFit = False 
     .ReadingOrder = xlContext 
     .MergeCells = False 
    End With 
    With Selection 
     .HorizontalAlignment = xlCenter 
     .WrapText = False 
     .Orientation = 0 
     .AddIndent = False 
     .IndentLevel = 0 
     .ShrinkToFit = False 
     .ReadingOrder = xlContext 
     .MergeCells = False 
    End With 
    Range("L16108").Select 
    Range("J2105").Select 
    Range(Selection, Selection.End(xlDown)).Select 
    Range("J2137").Select 
    Range("N2137").Select 
    Sheets("SPROC").Select 
    ActiveWindow.SelectedSheets.Visible = False 
    ActiveWindow.ScrollWorkbookTabs Sheets:=-2 
    Sheets("Master-Data-Sheet").Select 
End Sub 

У меня есть отчет с листом под названием SPROC. Этот лист обновляется каждый понедельник и извлекает данные за этот день из SQL-запроса (любые другие данные на этом листе перезаписываются). То, что я тогда хочу сделать, это выбрать ВСЕ данные (Столбцы A: N - Число строк меняется каждую неделю, поэтому диапазон не фиксирован) и вставить его в первую пустую ячейку в столбце A на листе с именем Master-Data -Лист. Этот второй лист содержит ВСЕ данные за предыдущие недели и используется для заполнения ВСЕХ сводных таблиц и графиков и т. Д. На других других листах. В настоящее время я записал макрос, но вместо того, чтобы найти последнюю пустую строку, он использует определенный диапазон, что означает, что при запуске макроса он перезаписывает данные в файле основных данных. Какие-либо предложения?Скопируйте данные с одного листа и вставьте в первую пустую ячейку в колонке А другого листа

Я включил копию кода VBA (он также выполняет множество других функций, поэтому извиняюсь, если он немного длинный). Я думаю, что это строки 20 и 359, где проблема возникает, но я понятия не имею, что делать, чтобы исправить ее (я пробовал всевозможные варианты).

ответ

0

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

попробовать это:

Sub Macro2() 
' 
Dim ShIn As Worksheet 
Dim ShOut As Worksheet 
Set ShIn = ThisWorkbook.Sheets("SPROC") 
Set ShOut = ThisWorkbook.Sheets("Master-Data-Sheet") 

'ShIn.Cells(2, 1).End(xlToRight).Column 
Dim RgTotalInput As String 
Dim RgTotalOutput As String 

RgTotalInput = "$A$2:$" & ColLet(ShIn.Cells(1, 1).End(xlToRight).Column) & "$" & ShIn.Cells(Rows.Count, 1).End(xlUp).Row 
RgTotalOutput = "$A$" & ShOut.Cells(Rows.Count, 1).End(xlUp).Row + 1 

ShIn.Range(RgTotalInput).Copy Destination:=ShOut.Range(RgTotalOutput) 


End Sub 



Public Function ColLet(ByVal ColNb As Integer) As String 
Dim ColLetTemp As String 

Select Case ColNb 
    Case Is < 27 
     ColLetTemp = Chr(64 + ColNb) 
    Case Is > 26 
     If Int(ColNb/26) <> ColNb/26 Then 
      ColLetTemp = Chr(64 + Int(ColNb/26)) & Chr(64 + ColNb - 26 * Int(ColNb/26)) 
     Else 
      ColLetTemp = Chr(64 + Int(ColNb/26) - 1) & Chr(64 + 26) 
     End If 
    Case Else 

End Select 

ColLet = ColLetTemp 
End Function 
+0

Это отлично работает (и работает мгновенно в отличие от моей первоначальной попытки !!!) !. И я буду принимать ваши комментарии на борту для будущих комментариев. – Jimmy

+0

Приятно, не забывайте, если ваша проблема решена, чтобы подтвердить ответ! ;) – R3uK

+0

Я заметил, что вместо того, чтобы вставлять данные в первую пустую строку, он фактически вставляет данные в последнюю строку с датой (это означает, что каждая строка данных каждый раз переписывается). – Jimmy

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