Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.11.2010, 09:53   #21
nilem
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 616
По умолчанию

Цитата:
Сообщение от staniiislav Посмотреть сообщение
... а должны сохраняться со разных листов...
Со разных, так со разных
Смотрите в файле.
Вместо 30 кнопок на листах, может лучше одну кнопку на ленту или в панель быстр. доступа? Одна кнопка будет работать с текущим активным листом.

На всякий случай: предполагается, что у Вас 30 кнопок на листах, и на каждую кнопку назначен один и тот же макрос Sub cells2(). Проверьте.
Вложения
Тип файла: zip userformats.zip (15.1 Кб, 7 просмотров)

Последний раз редактировалось nilem; 12.11.2010 в 12:41.
nilem вне форума Ответить с цитированием
Старый 12.11.2010, 11:09   #22
staniiislav
Форумчанин
 
Аватар для staniiislav
 
Регистрация: 16.04.2010
Сообщений: 695
По умолчанию

Вроде нашел решение! Посмотрите пожалуйста (что заменил выделил жирным). И там где я подчеркнул, объясните пожалуйста как это работает... я просто пытаюсь понять алгоритм, что за чем следует и как правильно это что написать. Спасибо

Option Explicit

Sub cells1()
Dim iyear As String, idate As Date, adr As String, Fname As String
Dim Wbmain As Object, wb As Object, x, i As Long, fg_ As String, fm_ As String
Application.ScreenUpdating = False

Set Wbmain = ThisWorkbook: iyear = CStr(Year([a1])): idate = [a1]
Workbooks.Open (ThisWorkbook.Path & "\Archive\БД.xls"): On Error GoTo Handler
With Workbooks("БД.xls").Sheets(iyear)
.Unprotect "123"
x = .Range("A1:BM" & .cells(Rows.Count, 3).End(xlUp).Row).Value
For i = 1 To UBound(x, 1) Step 16
If x(i, 1) = idate And x(i, 2) = ThisWorkbook.ActiveSheet().[b1] Then

If MsgBox("Совпадение даты. Заменить диапазон?", vbYesNo) = vbYes Then
Wbmain.Sheets(1).Range("A1:BM59").Copy .Range("A" & i)
End If: Exit For
End If
Next i
If UBound(x, 1) = 1 Then
Wbmain.ActiveSheet().Range("A1:BM59").Copy .Range("A1")
ElseIf i > UBound(x, 1) Then
Wbmain.ActiveSheet().Range("A1:BM59").Copy .Range("A" & i)

End If
.Range("A" & i).Value = .Range("A" & i).Value: .Protect "123"
On Error GoTo 0
End With
With Workbooks("БД.xls"): .Close True: End With

If MsgBox("Сохранить лист?", vbYesNo, "Подтверждение") = vbYes Then
Fname = Wbmain.Path & "\Archive"
On Error Resume Next
MkDir Fname
fg_ = Format(idate, "yyyy"): fm_ = Format(idate, "mmmm")
If idate <> Empty Then
If ActiveSheet.Visible = -1 Then
ActiveSheet.Copy
Set wb = ActiveWorkbook
wb.Sheets(1).Shapes(1).Delete
wb.SaveAs Fname & "\" & fg_ & "\" & fm_ _
& "\" & wb.Sheets(1).Name & " (" & idate & ").xls", xlNormal
wb.Close
End If
MsgBox "Лист " & ActiveSheet.Name & " в виде файла сохранен в папку " & Fname
End If
End If
Application.ScreenUpdating = True
Exit Sub
Handler:
MsgBox "Лист с таким годом не найден" & vbCrLf & _
Err.Description
End Sub
Единственный способ стать умнее, играть с более умным противником...
staniiislav вне форума Ответить с цитированием
Старый 12.11.2010, 11:10   #23
staniiislav
Форумчанин
 
Аватар для staniiislav
 
Регистрация: 16.04.2010
Сообщений: 695
Радость

Ооо ))) сейчас и посмотрю правильно ли я сделал или нет ))) Спасибо огромное )))
Единственный способ стать умнее, играть с более умным противником...
staniiislav вне форума Ответить с цитированием
Старый 12.11.2010, 11:23   #24
staniiislav
Форумчанин
 
Аватар для staniiislav
 
Регистрация: 16.04.2010
Сообщений: 695
По умолчанию

а если создать такую кнопку, она будет появляться и работать на другом компьютере?
Единственный способ стать умнее, играть с более умным противником...
staniiislav вне форума Ответить с цитированием
Старый 12.11.2010, 14:17   #25
staniiislav
Форумчанин
 
Аватар для staniiislav
 
Регистрация: 16.04.2010
Сообщений: 695
По умолчанию

Спасибо огромное nilem, EugeneS. Без вашей помощи, я бы не справился! Вот так думаю, этот макрос будет итоговым вариантом (добавил еще автофильтр при защищенном листе):

Option Explicit

Sub cells1()
Dim iyear As String, idate As Date, adr As String, Fname As String
Dim Wsh As Worksheet, wb As Object, x, i As Long, fg_ As String, fm_ As String
Application.ScreenUpdating = False

Set Wsh = ThisWorkbook.ActiveSheet: iyear = CStr(Year([a1])): idate = [a1]

Workbooks.Open (ThisWorkbook.Path & "\Archive\БД.xls"): On Error GoTo Handler
With Workbooks("БД.xls").Sheets(iyear)
.Unprotect "123"
x = .Range("A1:BM" & .cells(Rows.Count, 3).End(xlUp).Row).Value
For i = 2 To UBound(x, 1) Step 59
If x(i, 1) = idate And x(i, 2) = Wsh.[b1] Then
If MsgBox("Совпадение даты. Заменить диапазон в БД?", vbYesNo) = vbYes Then
Wsh.Range("A1:BM59").Copy .Range("A" & i)
End If: Exit For
End If
Next i
If UBound(x, 1) = 1 Then
Wsh.Range("A1:BM59").Copy .Range("A2")
ElseIf i > UBound(x, 1) Then
Wsh.Range("A1:BM59").Copy .Range("A" & i)
End If
.Protect "123", Contents:=True, Scenarios:=True, AllowFiltering:=True
On Error GoTo 0
End With
With Workbooks("БД.xls"): .Close True: End With

If MsgBox("Сохранить лист?", vbYesNo, "Подтверждение") = vbYes Then
Fname = ThisWorkbook.Path & "\Archive"
On Error Resume Next
MkDir Fname
fg_ = Format(idate, "yyyy"): fm_ = Format(idate, "mmmm")
If idate <> Empty Then
If Wsh.Visible = -1 Then
Wsh.Copy
Set wb = ActiveWorkbook
With wb
.Sheets(1).Shapes(1).Delete
.SaveAs Fname & "\" & fg_ & "\" & fm_ _
& "\" & Wsh.Name & " (" & idate & ").xls", xlNormal
.Close
End With
End If
MsgBox "Лист " & Wsh.Name & " в виде файла сохранен в папку " & Fname
End If
End If
Application.ScreenUpdating = True
Exit Sub
Handler:
MsgBox "Лист с таким годом не найден" & vbCrLf & Err.Description
End Sub

С Ув. Staniiislav
Единственный способ стать умнее, играть с более умным противником...
staniiislav вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с данными PycckuuPC Microsoft Office Excel 2 19.10.2010 22:33
Схема с данными Fezdipekla Microsoft Office Excel 0 11.06.2010 10:29
ComboBox с данными Domanoff БД в Delphi 9 21.04.2010 12:07
Управление данными Doublefaced Помощь студентам 3 06.03.2010 15:13
Файл с данными werser БД в Delphi 1 24.05.2008 23:40