Страница 1 из 1
Значение строковой переменной как часть имени Книги
Добавлено: 17 июл 2014, 17:45
marinika
Дано: Книги Т2, Т3, Т4, Архив. В каждом Листе Архива в ячейке О2 записано одно из значений - Т2, Т3 или Т4.
Требуется: перенести активный Лист из Архива в соответствующую Книгу.
Помогите, пожалуйста, найти ошибку в коде:
Sub rearchiv()
' Восстановление карты из архива
Dim s As String
s = Range("O2").Value
ActiveSheet.Move Before:=Workbooks("s.xls").Sheets(Count - 5)
End Sub
Re: Значение строковой переменной как часть имени Книги
Добавлено: 18 июл 2014, 10:09
Дмит
Dim s As String
Dim Count As Long
Dim Sht As Worksheet
For Each Sht In Workbooks("Архив.xls").Sheets 'перебираем все листы в архиве
s = Sht.Range("O2").Value 'считываем в листе ячейку О2
If s = "T1" Or s = "T2" Or s = "T3" Then 'если соответствует усливию переносим лист
Count = Workbooks(s & ".xls").Sheets.Count 'количество листов в книге получателе
Sht.Move Before:=Workbooks(s & ".xls").Sheets(Count - 5) 'вставляем лист перед пятым с конца?
End If
Next Sht
'все книги (Архив.xls, T1.xls, T2.xls, T3.xls) должны быть открыты
Re: Значение строковой переменной как часть имени Книги
Добавлено: 18 июл 2014, 20:52
marinika
Спасибо! Код работает, но как сделать так, чтобы из Архива восстанавливался только активный Лист, а не все сразу? К сожалению, я не спец в VBA, знакома только с Pascal...
Мой кривой код дальше выделенной строки не идет. Вероятно, требует, чтобы я позиционировала активный Лист?
Sub Remove()
Dim s As String
Dim Count As Long
Dim Sht As Worksheet
s = Sht.Range("O2").Value
If s = "T2" Or s = "T3" Or s = "T4" Then
s = s & ".xls"
Count = Workbooks(s).Sheets.Count
If s <> "T4.xls" Then
Sht.Move Before:=Workbooks(s).Sheets(Count - 3)
Else
Sht.Move Before:=Workbooks(s).Sheets(Count - 4)
End If
End If
End Sub
Буду очень благодарна за помощь
Re: Значение строковой переменной как часть имени Книги
Добавлено: 19 июл 2014, 13:28
marinika
Догадалась сама. И вот что получилось:
' Перемещение/ восстановление из АРХИВА
Sub Move_Remove_archiv()
Dim s As String
Dim Count As Long
Dim Sht As Worksheet
s = ActiveSheet.Range("O2").Value
If ActiveWorkbook.Name <> "АРХИВ_2014.xls" Then
ActiveSheet.Move Before:=Workbooks("АРХИВ_2014.xls").Sheets(1)
Else
If s = "T2" Or s = "T3" Or s = "T4" Then
s = s & ".xls"
Count = Workbooks(s).Sheets.Count
If s <> "T4.xls" Then
ActiveSheet.Move Before:=Workbooks(s).Sheets(Count - 3)
Else
ActiveSheet.Move Before:=Workbooks(s).Sheets(Count - 4)
End If
End If
End If
End Sub
И спасибо большущее автору единственного ответа, давшему нужное направление! ;-))