Определить рабочий лист как переменную в соответствии с условием имени рабочей книги - PullRequest
0 голосов
/ 23 октября 2018

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

Issue : Iне может найти хорошую стратегию для изменения имени листа в функции имени зацикленной книги.кажется, что определение листа как переменной не очень хорошо вписывается в VBA ..

Set Output_tot_n = Workbooks("Final_Output").Sheet_name.Range("B7")

Код останавливается после этого я получил ошибку 438 «Объект не поддерживает это свойство илиmethod "

Весь код ниже:

Sub Proceed_Data()

Dim FileSystemObj As Object
Dim FolderObj As Object
Dim fileobj As Object
Dim Sheet_name As Worksheet
Dim i, j, k  As Integer
Dim wb As Workbook

Set FileSystemObj = CreateObject("Scripting.FileSystemObject")
Set FolderObj = FileSystemObj.GetFolder("C:\...\")

For Each fileobj In FolderObj.Files
Set wb = Workbooks.Open(fileobj.Path)

Set Output_tot_n = Workbooks("Final_Output").Sheet_name.Range("B7")

If wb.Name = "AAA_SEPT_2018" Then
Sheet_name = Worksheets("AAA")
End If
If wb.Name = "BBB_SEPT_2018" Then
Sheet_name = Worksheets("BBB")
End If
If wb.Name = "CCC_SEPT_2018" Then
Sheet_name = Worksheets("CCC")
End If

' conditional sum

With wb.Sheets("REPORT")
For i = 2 To .Cells(Rows.Count, 14).End(xlUp).Row
If .Cells(i, "O").Value = "sept" Then
k = .Cells(i, "M").Value
End If
j = j + k
k = 0
Next i
End With
Output_tot_n = j
j = 0

wb.Save
wb.Close

Next fileobj
End Sub

У вас есть идеи, что может пойти не так, и если я должен использовать другую стратегию?

Большое спасибо за это!

Ответы [ 3 ]

0 голосов
/ 23 октября 2018

Большое спасибо за это.

Вы действительно хотите это сделать?

Set Output_tot_n = Workbooks("Final_Output.xlsm").Worksheets(Sheet_name).Range("B7")

If wb.Name = "AAA_SEPT_2018" Then
Sheet_name = "AAA"
End If
If wb.Name = "BBB_SEPT_2018" Then
Sheet_name = "BBB"
End If
If wb.Name = "CCC_SEPT_2018" Then
Sheet_name = "CCC"
End If
0 голосов
/ 23 октября 2018

Нет, это на самом деле работает.Еще раз спасибо за ваши ответы.

проблема была просто важна, чтобы поставить "AAA_SEPT_2018.xlsx"

0 голосов
/ 23 октября 2018

Workbooks - это collection (часть фактического Application -объекта).Доступ к коллекции в VBA можно получить либо по порядковому номеру (индекс начинается с 1), либо по name . имя открытой Рабочей книги - это имя, включающее расширение, в вашем случае, вероятно, Final_Output.xlsx или Final_Output.xlsm.

Sheets и Worksheets являются коллекциями в Workbook, доступ к которым снова осуществляется через индекс или имя (разница состоит в том, что Worksheets содержит «настоящие» электронные таблицы, тогда как Sheets также может содержать листы других типов.(например, диаграммы).

Итак, в вашем случае вы хотите получить доступ к Range определенного листа определенной рабочей книги.Книга имеет фиксированное имя, а имя листа хранится в переменной.Например, вы можете написать

dim sheetName as string, sheet as Worksheet, Output_tot_n as Range
sheetName = "AAA"  ' (put your logic here)
set sheet = Workbooks("Final_Output.xlsm").Worksheets(Sheet_name)
set Output_tot_n = sheet.Range("B7")

или собрать все вместе (в зависимости от ваших потребностей)

set Output_tot_n = Workbooks("Final_Output.xlsm").Worksheets(Sheet_name).Range("B7")
...