欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

VBA操作加密excel

程序员文章站 2022-03-16 18:45:40
...

      要加工加密过的excel文件,由于不是技术部的人用,又是小功能,不能去专门写个后台管理,也不好用poi单独写个main方法跑(没环境)。

       就花了一两天时间边研究边写VBA。涉及到操作的excel就不做详细讲解了(可能会有公司信息)。可以看看语法、逻辑处理之类的。还有下面步骤中涉及到的PERSONAL.XLSB、hello.bass文件,这里不提供,后面会有hello.bass的代码。可以直接保存。

       下面详细讲解下如何开发及用vba

1、设置开发工具

VBA操作加密excel

在左侧找到开发工具,添加到右侧。确定

VBA操作加密excel

在开发工具里点击宏安全性

VBA操作加密excel

选择启用所有宏

VBA操作加密excel

2、检查C:\Users\用户\AppData\Roaming\Microsoft\Excel\XLSTART是否存在PERSONAL.XLSB文件

2.1、如没有,则直接把PERSONAL.XLSB文件拷贝到此目录下

2.2、如有,则先随便打开一个excel,alt+F11

VBA操作加密excel

2.3、选择VBAProject(PERSONAL.XLSB),右键,选择导入文件

VBA操作加密excel

2.4、选择要导入的.bas文件

VBA操作加密excel

3、在菜单栏空白处右键,选择自定义功能区

VBA操作加密excel

4、选择你要保持按钮的区域,我这里以开始菜单栏为列。选择开始,点击新建组。

VBA操作加密excel

5、选择重命名

VBA操作加密excel

6、选择要显示的按钮,输入名称

VBA操作加密excel

7、选择宏

VBA操作加密excel

8、左侧选择PERSONAL.XLSB!hello,右侧选择hello。点击添加。

VBA操作加密excel

VBA操作加密excel

9、重命名,可自定义名字

VBA操作加密excel

VBA操作加密excel

VBA操作加密excel

10、点击确定,在开始栏即可看到按钮。

VBA操作加密excel

11、在同目录下建立data.xlsx(需要导入到的文件),并打开data.xlsx,再点击按钮。

 

hello.bass 文件 代码如下

Sub hello()


    Set Sh1 = ActiveSheet

    Set Sh2 = Workbooks("data.xlsx").Sheets(1)

    Dim dataMap As Object
    Set dataMap = CreateObject("Scripting.Dictionary")
    Set rowMap = CreateObject("Scripting.Dictionary")
    
    For i = 1 To 30
            For j = 1 To 31
        
             'Debug.Print "i=" & i & "j=" & j & Sh1.Cells(i, j)
        Next
    Next
    
    For i = 11 To 290

            For j = 14 To 31

              Dim r0 As Integer        '行号
              Dim c0 As Integer        '列号
              r0 = i
              c0 = j

              If j = 16 Then
                 If dataMap.Exists(Sh1.Cells(r0, c0 - 1).Value & Sh1.Cells(r0, c0).Value) Then
                    dataMap(Sh1.Cells(r0, c0 - 1).Value & Sh1.Cells(r0, c0).Value) = 2
                    Else
                    dataMap.Add (Sh1.Cells(r0, c0 - 1).Value & Sh1.Cells(r0, c0).Value), 1
                   End If

              End If
            Next
        Next
    
    
'    For Each F In dataMap
'        Debug.Print F
'        Debug.Print dataMap(F)
'    Next
    
    
    Dim ni As Integer
    Dim r As Integer        '行号
    Dim nr As Integer       '新行
    Dim kr As Integer       '多规格行
    ni = 0
    Dim itype As Integer
     
     For i = 11 To 290
     
     
      
     r = i
     nr = r - 8
     
     
       If dataMap(Sh1.Cells(i, 15).Value & Sh1.Cells(i, 16).Value) = 1 Then '单规格
        itype = 1
        'Debug.Print Sh1.Cells(i, 15).Value & Sh1.Cells(i, 16).Value & "单规格"
        Else '多规格
        itype = 2
        'Debug.Print Sh1.Cells(i, 15).Value & Sh1.Cells(i, 16).Value & "多规格"
       End If
     
      If itype = 2 Then
        If rowMap.Exists(Sh1.Cells(i, 15).Value & Sh1.Cells(i, 16).Value) Then
           
        Else
            If rowMap.Exists(Sh1.Cells(i - 1, 15).Value & Sh1.Cells(i - 1, 16).Value) Then
                rowMap.RemoveAll
             End If
            kr = r - 8 + ni
            'Debug.Print kr
            
            ni = ni + 1
            rowMap.Add Sh1.Cells(i, 15).Value & Sh1.Cells(i, 16).Value, 1
        End If
      End If
        nr = nr + ni
        'Sh2.Cells(i - 8, 1).Value = Cells(30, 7)   '商品名称
        'Sh2.Cells(i - 8, 3).Value = Cells(29, 2)    '公司code
        Sh2.Cells(nr, 4).Value = Cells(29, 3)    '公司名称
        Sh2.Cells(nr, 13).Value = Cells(27, 4)   '材料大类
        Sh2.Cells(nr, 14).Value = Cells(27, 6)   '材料类别
        Sh2.Cells(nr, 15).Value = Cells(30, 7)   '产品类别
             
                
            For j = 14 To 31

                     
              Dim c As Integer        '列号

              c = j
              
             
              If j = 15 Then
              Sh2.Cells(nr, 1).Value = Sh1.Cells(r, c).Value & " " & Sh1.Cells(30, 7).Value     '商品名称
              Sh2.Cells(nr, 2).Value = Sh1.Cells(r, c).Value  '品牌
              End If
              If j = 16 Then
                If InStr(Sh1.Cells(r, c + 1).Value, "Φ") > 0 Then
                    If (InStr(Sh1.Cells(r, c + 1).Value, "(") > 0 And InStr(Sh1.Cells(r, c + 1).Value, "Φ") > InStr(Sh1.Cells(r, c + 1).Value, "(")) Then
                        Sh2.Cells(nr, 5).Value = Sh1.Cells(r, c).Value & " " & Sh1.Cells(r, c + 1).Value '商品型号
                    Else
                         Sh2.Cells(nr, 5).Value = Sh1.Cells(r, c).Value & " " & Split(Sh1.Cells(r, c + 1).Value, "Φ")(0) '商品型号
                    End If
                Else
                    Sh2.Cells(nr, 5).Value = Sh1.Cells(r, c).Value '商品型号
                End If
              End If
              If j = 17 Then
               If InStr(Sh1.Cells(r, c).Value, "Φ") > 0 Then
                    If InStr(Sh1.Cells(r, c).Value, "Φ") > InStr(Sh1.Cells(r, c).Value, "(") Then
                        If itype = 1 Then
                            Sh2.Cells(nr, 6).Value = "单规格商品" ''商品规格
                        Else
                           Sh2.Cells(nr, 6).Value = Right(Sh1.Cells(r, c).Value, Len(Sh1.Cells(r, c).Value) - Len(Split(Sh1.Cells(r, c).Value, "Φ")(0)) - 1) '商品规格
                        End If
                        
                    Else
                         Sh2.Cells(nr, 6).Value = Right(Sh1.Cells(r, c).Value, Len(Sh1.Cells(r, c).Value) - Len(Split(Sh1.Cells(r, c).Value, "Φ")(0)) - 1)  '商品规格
                    End If
                Else
                     Sh2.Cells(nr, 6).Value = Sh1.Cells(r, c).Value  '商品规格
                End If
              End If
              If j = 19 Then
              Sh2.Cells(nr, 8).Value = Sh1.Cells(r, c).Value   '市场价
              End If
              If j = 18 Then
              Sh2.Cells(nr, 11).Value = Sh1.Cells(r, c).Value  '计量单位
              End If
              If nr = kr + 1 Then
            Debug.Print "kr=" & kr
            Sh2.Cells(kr, 4).Value = Sh2.Cells(nr, 4).Value    '公司名称
            Sh2.Cells(kr, 13).Value = Sh2.Cells(nr, 13).Value   '材料大类
            Sh2.Cells(kr, 14).Value = Sh2.Cells(nr, 14)   '材料类别
            Sh2.Cells(kr, 15).Value = Sh2.Cells(nr, 15)  '产品类别
            Sh2.Cells(kr, 1).Value = Sh2.Cells(nr, 1).Value
            Sh2.Cells(kr, 2).Value = Sh2.Cells(nr, 2).Value
            Sh2.Cells(kr, 5).Value = Sh2.Cells(nr, 5).Value
            Sh2.Cells(kr, 6).Value = "多规格商品"
            Sh2.Cells(kr, 8).Value = Sh2.Cells(nr, 8).Value
            Sh2.Cells(kr, 11).Value = Sh2.Cells(nr, 11).Value
        End If
               Sh2.Cells(nr, 6).VerticalAlignment = xlCenter
               Sh2.Cells(nr, 6).HorizontalAlignment = xlLeft
            Next
        Next
End Sub

 

相关标签: vba