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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.06.2011, 23:26   #1
staniiislav
Форумчанин
 
Аватар для staniiislav
 
Регистрация: 16.04.2010
Сообщений: 695
По умолчанию Подправить сохранение диапазона

Доброго времени суток, Ув. Форумчане.
Помогите пожалуйста до ровнять напильником вот этот код:
Код:
Sub SaveCells()
Dim base As String, 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([C4])): idate = [C4]
If MsgBox("Сохранить в БД?", vbYesNo, "Подтверждение") = vbYes Then

Workbooks.Open (ThisWorkbook.Path & "\Архив\БД.xlsm"): On Error GoTo Handler
With Workbooks("БД.xlsm").Sheets("base")
    .Unprotect "0000"
    x = .Range("B1:DO" & .cells(Rows.Count, 3).End(xlUp).Row).Value
    For i = 4 To UBound(x, 1) Step 49
        If x(i, 2) = idate And x(i, 1) = Wsh.[b4] Then
            If MsgBox("Совпадение даты. Заменить в БД?", vbYesNo) = vbYes Then
                Wsh.Range("A4:DH52").Copy .Range("A" & i)
            End If: Exit For
        End If
    Next i
    If UBound(x, 1) = 1 Then
        Wsh.Range("A4:DH52").Copy .Range("A4")
    ElseIf i > UBound(x, 1) Then
        Wsh.Range("A4:DH52").Copy .Range("A" & i)
    End If
     ActiveSheet.Protect "znwf33gnbntrf21", Contents:=True, Scenarios:=True, AllowFiltering:=True
    On Error GoTo 0
End With
With Workbooks("БД.xlsm"): .Close True: End With: End If

If MsgBox("Сохранить в Архив?", vbYesNo, "Подтверждение") = vbYes Then
    Fname = ThisWorkbook.Path & "\Архив"
    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
                ActiveSheet.Protect Password:="znwf33gnbntrf21", Contents:=True, Scenarios:=True, AllowFiltering:=True
                .SaveAs Fname & "\" & fg_ & "\" & fm_ _
                          & "\" & Wsh.Name & " (" & idate & ").xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
                .Close
            End With
        End If
        MsgBox "Лист " & Wsh.Name & " в виде файла сохранен в папку " & Fname & "\" & fg_ & "\" & fm_
    End If
End If
Application.ScreenUpdating = True
Exit Sub
Handler:
MsgBox "Лист с таким годом не найден" & vbCrLf & Err.Description
End Sub
там где выделено красным, нужно немного подкорректировать. Необходимо чтобы копировались значения и форматы ячеек, а не все полностью.
Заранее огромное спасибо
Единственный способ стать умнее, играть с более умным противником...
staniiislav вне форума Ответить с цитированием
Старый 24.06.2011, 00:41   #2
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Станислав, открою Вам одну страшную тайну (только это между нами...). если записать свои действия макрорекордером, а потом проанализировать записанное, то можно гораздо реже обращаться сюда с вопросами.
Код:
Wsh.Range("A4:DH52").Copy 
.Range("A" & i).PasteSpecial Paste:=xlPasteValues
.Range("A" & i).PasteSpecial Paste:=xlPasteFormats
примера для одной строчки достаточно?
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 24.06.2011, 01:28   #3
staniiislav
Форумчанин
 
Аватар для staniiislav
 
Регистрация: 16.04.2010
Сообщений: 695
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
Станислав, открою Вам одну страшную тайну (только это между нами...). если записать свои действия макрорекордером, а потом проанализировать записанное, то можно гораздо реже обращаться сюда с вопросами.
Код:
Wsh.Range("A4:DH52").Copy 
.Range("A" & i).PasteSpecial Paste:=xlPasteValues
.Range("A" & i).PasteSpecial Paste:=xlPasteFormats
примера для одной строчки достаточно?
конечно достаточно, спасибо большое!
Я знаю про макроредактор, и постоянно пользуюсь им, просто на форуме еще могут помочь написать код, который макроредактор не сделает (((
Спасибо IgorGO!
Единственный способ стать умнее, играть с более умным противником...
staniiislav вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
c++ подправить grom333 Помощь студентам 4 27.05.2011 21:02
сохранение диапазона данных в блокнот kate158 Общие вопросы Delphi 2 24.09.2009 10:18
Только подправить.... Татяна Помощь студентам 2 20.05.2009 14:00