2013-09-30 6 views
0

У меня есть код vba в книге ASSETS CALC для выбора другой книги (ASSETS) через пользовательскую форму. Код вставляет определенную строку в ASSETS, фильтрует данные, складывает их вместе, а затем копирует окончательный номер в ASSETS CALC. К сожалению, по какой-то причине строка, вставленная в книгу ASSETS, также помещается в рабочую книгу ASSETS CALC и добавляются фильтры. Кто-нибудь знает, как остановить это? Я просто хочу, чтобы конечный номер был скопирован в ASSET CALC.VBA добавляет нежелательные фильтры и вставляет нежелательную строку?

Спасибо.

Dim str1 As String 
Dim i As Integer 

Application.ScreenUpdating = False 

For i = 0 To ListBox1.ListCount - 1 
    If ListBox1.Selected(i) = True Then 
     str1 = ListBox1.List(i) 
    End If 
Next i 

    Workbooks(str1).Activate 
    Sheets(1).Activate 
    Rows("4:4").Select 
    Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove 
    Selection.AutoFilter 
    ActiveSheet.Range("$A$4:$C$22").AutoFilter Field:=1, Criteria1:="=it*", _ 
     Operator:=xlAnd 
    ActiveSheet.Range("$A$4:$C$22").AutoFilter Field:=2, Criteria1:="cash" 
    Range("C28").Select 
    ActiveCell.FormulaR1C1 = "=SUBTOTAL(9,R[-11]C:R[-7]C)" 
    Range("C28").Select 
    Windows("Asset Calc..xlsm").Activate 
    Range("D11").Select 
    ActiveCell.FormulaR1C1 = "=[" & str1 & "]Sheet1!R28C3" 
    Range("D12").Select 
+2

[ИНТЕРЕСНО ЧИТАТЬ] (http://stackoverflow.com/questions/10714251/excel-macro-avoiding-using-select) –

ответ

0

@Siddharth Разгром обеспечивает хорошую ссылку на ссылки конкретные листы, а не полагаться на «ActiveCell» или «ActiveSheets». Убедитесь, что вы его прочитали.

Ваша проблема ... Я подозреваю, что вы имеете дело с человеком, который знает точно, что активно в данный момент. Вам не нужно активировать рабочую книгу, лист или диапазон, чтобы получать или записывать информацию на него.

Чтобы ответить на ваш первый вопрос, вы можете объединить строку использовать имя ссылки, как это:

ActiveCell.FormulaR1C1 = "=[" & str1 & "]Sheet1!R28C3" 

Чтобы сделать это, определив вашу книгу вместо использования «активных» методов (на формула сторона), попробуйте следующее:

Dim wb As Workbook 
Set wb = Application.Workbooks(str) 

ActiveCell.FormulaR1C1 = "=[" & wb.Name & "]Sheet1!R1C1" 

Я также заметил, что у вас есть дополнительный ". в этой строке:

Windows("Asset Calc..xlsm").Activate 

Если читать

Windows("Asset Calc.xlsm").Activate 
+0

Спасибо для информации. Я обновил код, и теперь он отлично работает, за исключением одной проблемы. Субтотал не выбирает правильные ячейки. Я хочу, чтобы он выбирал C5-C27. Я записал промежуточный итог вручную и ввел его в этот код, но по какой-то причине он не вычисляет эти ячейки. Любая идея почему? Спасибо – user2770097

+1

Пожалуйста, отметьте как ответ на ваш оригинальный вопрос, если вы довольны этим, поэтому вопрос может быть закрыт. Спасибо –

+0

ActiveCell.FormulaR1C1 = "= SUBTOTAL (9, R [-11] C: R [-7] C)" следует читать ActiveCell.FormulaR1C1 = "= SUM (R [-23] C: R [-1] C) " –

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