ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 389|回复: 5

[求助] vba拆分表格和设置保护工作表

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-11-2 11:23 | 显示全部楼层 |阅读模式
本帖最后由 hibari18018 于 2023-11-2 12:16 编辑

请教大神,当前表内的vba用于拆分表格,但第一次拆分后如果把拆分出来的子表删除,再次拆分表头就只有一行,需求是再次拆分后,子表仍保留三行表头

另外新增一个需求:表内已经设置了单元格锁定和未锁定,希望拆分完表格后,可以设置密码保护工作表,设置不能编辑锁定的单元格,但可以编辑未锁定的单元格

111.zip

27.71 KB, 下载次数: 8

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-11-2 12:18 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
目前用的拆分代码是这个
Sub 拆分数据至表内()
    Dim sht As Worksheet
    Dim k, i, j As Integer
    Dim irow As Integer
    Dim l As Integer
    Dim str As String
   
    str = ActiveSheet.Name
    l = InputBox("请输入你要按哪列分(阿拉伯数字)")
    irow = Sheets(str).Range("A65536").End(xlUp).Row
   
    ' 拆分表
    For i = 4 To irow
        k = 0
        For Each sht In Sheets
            If sht.Name = Sheets(str).Cells(i, l) Then
                k = 1
            End If
        Next
        
        If k = 0 Then
            Sheets.Add after:=Sheets(Sheets.Count)
            Sheets(Sheets.Count).Name = Sheets(str).Cells(i, l)
        End If
        
        ' 复制数据、格式和公式
        Sheets(str).Range("A" & i & ":IV" & i).Copy
        Sheets(Sheets(str).Cells(i, l).Value).Range("A1").PasteSpecial xlPasteAll
    Next
   
    ' 清除剪贴板内容
    Application.CutCopyMode = False
   
    ' 清除筛选条件以确保所有数据都可见
    For j = 3 To Sheets.Count
        Sheets(str).Range("A1:IV" & irow).AutoFilter Field:=l, Criteria1:=Sheets(j).Name
        Sheets(str).Range("A1:IV" & irow).Copy
        Sheets(j).Range("A1").PasteSpecial xlPasteAll
        ' 清除剪贴板内容
        Application.CutCopyMode = False
    Next
   
    Sheets(str).Range("A1:IV" & irow).AutoFilter
    Sheets(str).Select
    MsgBox "已处理完毕"
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-11-2 12:23 | 显示全部楼层
目前excel中用的代码如下:

Sub 拆分数据至表内()
    Dim sht As Worksheet
    Dim k, i, j As Integer
    Dim irow As Integer
    Dim l As Integer
    Dim str As String
   
    str = ActiveSheet.Name
    l = InputBox("请输入你要按哪列分(阿拉伯数字)")
    irow = Sheets(str).Range("A65536").End(xlUp).Row
   
    ' 拆分表
    For i = 4 To irow
        k = 0
        For Each sht In Sheets
            If sht.Name = Sheets(str).Cells(i, l) Then
                k = 1
            End If
        Next
        
        If k = 0 Then
            Sheets.Add after:=Sheets(Sheets.Count)
            Sheets(Sheets.Count).Name = Sheets(str).Cells(i, l)
        End If
        
        ' 复制数据、格式和公式
        Sheets(str).Range("A" & i & ":IV" & i).Copy
        Sheets(Sheets(str).Cells(i, l).Value).Range("A1").PasteSpecial xlPasteAll
    Next
   
    ' 清除剪贴板内容
    Application.CutCopyMode = False
   
    ' 清除筛选条件以确保所有数据都可见
    For j = 3 To Sheets.Count
        Sheets(str).Range("A1:IV" & irow).AutoFilter Field:=l, Criteria1:=Sheets(j).Name
        Sheets(str).Range("A1:IV" & irow).Copy
        Sheets(j).Range("A1").PasteSpecial xlPasteAll
        ' 清除剪贴板内容
        Application.CutCopyMode = False
    Next
   
    Sheets(str).Range("A1:IV" & irow).AutoFilter
    Sheets(str).Select
    MsgBox "已处理完毕"
End Sub

TA的精华主题

TA的得分主题

发表于 2023-11-2 17:45 来自手机 | 显示全部楼层
hibari18018 发表于 2023-11-2 12:23
目前excel中用的代码如下:

Sub 拆分数据至表内()

望拆分完表格后,可以设置密码保护工作表,设置不能编辑锁定的单元格,但可以编辑未锁定的单元格

这个会增加很多代码,一个是读取原来的锁定,要遍历,速度也会影响

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-11-3 11:24 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
zpy2 发表于 2023-11-2 17:45
望拆分完表格后,可以设置密码保护工作表,设置不能编辑锁定的单元格,但可以编辑未锁定的单元格

这个 ...

那能否设定某几列未锁定,比如每个sheet的D列和F列设为未锁定,其他单元格锁定,保护工作表保护锁定的单元格?
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-28 23:30 , Processed in 0.054084 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表