VBA: копирование/вставка на новом листе, включая блокировку ячеек

Ситуация такова:

У меня есть лист Excel с рабочей тетрадью ввода для заполнения личных вещей и рабочей тетрадью на каждый месяц. Теперь есть кнопка, когда пользователь хочет иметь новый лист Excel по причине смены рабочего места.

Так, например: г-н Дин заполнил свой ежедневный рабочий день до 15 апреля. Теперь он переходит в другое место и нажимает кнопку, чтобы изменить рабочее место. Он получает новый лист Excel, который выглядит точно так же, как и раньше, заполненный данными, которые он записал с первого листа (копировать/вставить из vba-скрипта). Существующие записи (ячейки) до 15 апреля также заблокированы, чтобы он не мог их редактировать. Он продолжает записывать свои часы на 16 апреля и так далее.

Я думаю, что будет лучше, если второй лист Excel будет создан с помощью макроса (копирование/вставка).

Имя первого листа: лист1 Имя второго листа: лист2

Итак, мой код пока не работает:

Sub Test()
Dim ws1 As Worksheet
Set ws1 = sheet1.Worksheets("Master")
ws1.Copy sheet2.Sheets(Sheets.Count)
End Sub

Это скопирует весь лист?

Этот код предназначен для защиты паролем рабочих книг. Как я могу заблокировать только отдельные ячейки до 15 апреля? Итак, как я должен прочитать дату?

Sub sbProtectAllSheets()

    Dim pwd1 As String, pwd2 As String
    pwd1 = InputBox("Please Enter the password")
    If pwd1 = "" Then Exit Sub
    pwd2 = InputBox("Please re-enter the password")

    If pwd2 = "" Then Exit Sub

     'Check if both the passwords are identical
    If InStr(1, pwd2, pwd1, 0) = 0 Or _
    InStr(1, pwd1, pwd2, 0) = 0 Then
        MsgBox "You entered different passwords. No action taken"
        Exit Sub
    End If

    For Each ws In Worksheets
        ws.Protect Password:=pwd1
    Next

    MsgBox "All sheets Protected."

    Exit Sub

End Sub

Или у вас есть другие предложения?

Приветствует Дык


person donduc_jr    schedule 10.07.2015    source источник
comment
Первый Sub скопирует весь лист1 после листа2 (порядок табуляции). Чтобы заблокировать одну ячейку, вы можете использовать Sheet1.Cells(1,1).Locked = True, тогда вам нужно будет защитить лист, но гораздо проще заблокировать или разблокировать весь диапазон ячеек, например (A1: F20)   -  person paul bica    schedule 10.07.2015
comment
Итак, я не буду использовать парольную блокировку?   -  person donduc_jr    schedule 10.07.2015
comment
Вы можете оставить пароль пустым, и любой сможет снять с него защиту в любой момент, но если вы используете пароль, вам нужно будет найти способ сохранить его, чтобы VBA мог его использовать (например, свойство Tag объекта на один из постоянных листов)   -  person paul bica    schedule 10.07.2015
comment
Вы пытались запустить свой код? Что касается вашего Sub Test(), вы спрашиваете, будет ли это работать, а не утверждаете, что это не работает. Я рискну предположить, что это не сработает, потому что выглядит очень, очень неправильно, но я не знаю, какие глобальные переменные вы могли установить за пределами Sub, которые вы нам показали (или если у вас есть Option Explicit поставил - надо). Пожалуйста, отредактируйте свое сообщение, чтобы включить точное сообщение об ошибке, которое вы получаете, если вы хотите увеличить шансы на получение хорошего ответа.   -  person FreeMan    schedule 10.07.2015
comment
Пожалуйста, не используйте тег macros для MS Office/VBA.   -  person Byron Wall    schedule 12.07.2015


Ответы (1)


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

LastRowR = ActiveSheet.UsedRange.Rows.Count
    For row = 2 To LastRowR
        If ActiveSheet.Cells(row, +column+) = "" Then
            LastRowR = row - 1
            Exit For
        End If
    Next row

Затем вы можете заблокировать диапазон ячеек, которые находятся в прошлом. Таким образом, вы можете создать диапазон из ("A1":Cells(LastRowR,+LastColumn+)) В котором +LastColumn+ — это номер последнего столбца, который используется на вашем листе.

person Luuklag    schedule 10.07.2015