2015-04-24 5 views
0

Хорошо. У меня есть одна база данных, которая отслеживает данные по месяцам, так что для каждого месяца есть новая вкладка или рабочий лист. У меня есть вторая книга, которую я использую для обработки этих данных. У меня есть текущий код ниже, и он отлично работает, единственная проблема заключается в том, что мне придется maunaully войти и изменить лист, который он тянет каждый месяц. «Листы (» APRIL 15) .select»Мой вопрос;. Есть уравнение, которое я мог бы использовать, чтобы вытащить лист за текущий месяцВывод текущего месяца в новую книгу на основе текущего месяца

Текущий код

Range("A1").Select 

' 
    Workbooks.Open Filename:= _ 
     "X:\GLOBLOPS\TRADE_PROCESSING\Procedures\Corporate Action\Full Call\Full Calls Tracker.xls" 

    Sheets("APRIL 15").Select 
    ActiveWindow.SmallScroll Down:=-27 
    Columns("A:I").Select 
    Selection.Copy 
    Windows("Copy of CorpAct_freeDeliver 3.13.15.xls").Activate 
    ActiveWindow.SmallScroll Down:=-12 
    ActiveSheet.Paste 
    Windows("Full Calls Tracker.xls").Activate 
    ActiveWindow.Close 
    Windows("Copy of CorpAct_freeDeliver 3.13.15").Activate 
    Sheets("Call Tracker").Select 

ответ

1

Если вы? повторно всегда будет работать в текущем месяце, и все данные форматируются с полным названием месяца и две цифры года вы могли бы заменить эту строку:

Sheets("APRIL 15").Select 

с этим одним:

Sheets(ucase(format(now(), "mmmm YY"))).Select 

Если вам нужно больше гибкости в выборе времени, вы можете заменить now() на переменную даты из другого места в вашем коде. Если форматирование имени вкладки использует некоторые сокращения для более длинных имен месяцев, у вас могут также возникнуть проблемы с моим предложением.

что-то добавить, чтобы улучшить код в целом было бы прочитать: How to avoid using Select in Excel VBA macros

Редактировать

Да, вы можете использовать этот диапазон. Существует много способов получить эту информацию в вашей процедуре. Это может запутаться, так как вы все еще используете активацию и выбор, и сложнее отслеживать каждый лист. Я могу изменить его на что-то вроде:

Sub test() 

    Dim codeWorkbook As Workbook 
    Dim dataWorkbook As Workbook 
    Dim dateRange As Range 
    Dim sheetName As String 

    Set codeWorkbook = ThisWorkbook 
    Set dataWorkbook = Workbooks.Open(Filename:="X:\GLOBLOPS\TRADE_PROCESSING\Procedures\Corporate Action\Full Call\Full Calls Tracker.xls") 
    Set dateRange = codeWorkbook.sheets(1).Range("WHERE_EVER_DATE_IS") 
    sheetName = UCase(Format(dateRange.Value, "mmmm YY")) 

    dataWorkbook.Sheets(sheetName).Columns("A:I").Copy Destination:=codeWorkbook.Sheets(1).Range("A1") 
    'change the sheet and/or the range to what you need it to be 
    dataWorkbook.Close False 

End Sub 
+0

Спасибо, что это было полезно. Мой единственный вопрос: у меня есть ячейка в книге, которая имеет значение Today(), чтобы вытащить текущую дату для if funtion, которую я использую. Могу ли я использовать эту ячейку вместо = now(), и это поможет с возможными проблемами форматирования? – Kyle

+0

Отлично, это очень полезно и отвечает на мои вопросы. Спасибо. – Kyle

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