保护VBA代码

合集下载

VBA中的数据加密和解密技巧

VBA中的数据加密和解密技巧

VBA中的数据加密和解密技巧简介:VBA(Visual Basic for Applications)是一种编程语言,广泛应用于Microsoft Office软件中,包括Excel、Word、PowerPoint等。

在VBA中,我们可以使用加密和解密技巧来保护敏感数据或者在数据通信过程中确保安全性。

本文将介绍一些常用的VBA数据加密和解密技巧,以帮助你更好地理解和运用VBA编程。

一、数据加密技巧1. 替换算法VBA中最简单的数据加密方式之一是使用替换算法。

这种算法将数据中的每个字符替换为另一个字符,从而改变数据的编码方式。

例如,将字母'A'替换为字母'Z',将字母'B'替换为字母'Y',以此类推。

使用替换算法加密的数据可以通过再次应用同样的算法进行解密。

2. 字符串反转另一种简单的字符串加密方式是字符串反转。

这种方式通过将字符串中的字符顺序颠倒来改变数据的编码方式。

例如,将字符串"Hello, World!"反转为"!dlroW ,olleH"。

使用字符串反转加密的数据可以通过再次应用同样的操作进行解密。

3. 移位算法移位算法是一种基于字符位置的加密方式,通过改变字符的位置来改变数据的编码方式。

例如,将字母'A'移位2位后得到字母'C',将字母'B'移位3位后得到字母'E',以此类推。

使用移位算法加密的数据可以通过再次应用相反的移位操作进行解密。

二、数据解密技巧1. 逆向操作对于使用替换算法、字符串反转或移位算法加密的数据,最简单的解密方式是应用相反的操作。

例如,如果数据是使用替换算法加密的,那么进行解密时只需再次应用同样的替换操作,将加密后的字符替换为原始字符即可。

2. 密钥解密另一种常用的数据解密技巧是使用密钥进行解密。

密钥是一个特殊的值,只有掌握密钥的人才能解密数据。

如何利用VBA实现Excel数据加密与解密

如何利用VBA实现Excel数据加密与解密

如何利用VBA实现Excel数据加密与解密在Excel中,数据加密与解密是非常重要的功能,可以保护敏感数据的安全性。

VBA(Visual Basic for Applications)是一种编程语言,可以在Excel中编写宏来实现各种功能。

利用VBA编写代码可以实现Excel数据的加密与解密操作,本文将介绍如何利用VBA实现Excel数据的加密与解密。

首先,我们需要创建一个新的Excel工作簿,并通过VBA 编辑器添加一个新的模块。

在模块中编写以下代码:```VBAPrivate Sub EncryptData(ByVal rng As Range, ByVal password As String)rng.Formula = "=ENCRYPT.DECRYPT(" & rng.Address & "," & """" & password & """" & ",TRUE)"End SubPrivate Sub DecryptData(ByVal rng As Range, ByVal password As String)rng.Formula = "=ENCRYPT.DECRYPT(" & rng.Address & "," & """" & password & """" & ",FALSE)"End Sub```上述代码中,`EncryptData`是加密数据的函数,接受两个参数:`rng`是要加密的数据范围,`password`是加密密码。

VBA实现数据加密解密的高级方法与示例

VBA实现数据加密解密的高级方法与示例

VBA实现数据加密解密的高级方法与示例在信息时代的今天,保护数据安全是非常关键的。

数据加密解密是一种常见的安全措施,可以保护敏感数据在传输和存储过程中不被未经授权的人访问。

在 Microsoft Office 中,可以利用 VBA(Visual Basic for Applications)来实现数据的加密和解密。

本文将介绍一些高级的方法和示例,帮助您更好地理解和应用。

1. 对称加密算法对称加密算法是最常用的加密算法之一。

它使用相同的密钥用于加密和解密数据。

VBA可以使用现成的算法函数,如 AES(Advanced Encryption Standard)和 DES(Data Encryption Standard),来实现对称加密。

示例代码:```vbaPrivate Function EncryptData(ByVal strData As String, ByVal strKey As String) As StringDim objAES As ObjectSet objAES =CreateObject("System.Security.Cryptography.AesManaged") objAES.Key = strKeyobjAES.Mode = 1 ' ECB modeDim objEncryptor As ObjectSet objEncryptor = objAES.CreateEncryptor()Dim bytData() As BytebytData =objEncryptor.TransformFinalBlock(UTF8.GetBytes(strData), 0, strData.Length)EncryptData = Convert.ToBase64String(bytData)Set objAES = NothingSet objEncryptor = NothingEnd Function```上述代码实现了一个名为`EncryptData`的函数,将输入的数据`strData`使用输入的密钥`strKey`进行对称加密,并返回加密后的数据。

Excel-vba宏代码-大全

Excel-vba宏代码-大全

宏文件集▲打开全部隐藏工作表返回Sub 打开全部隐藏工作表()Dim i As IntegerFor i = 1 To Sheets.CountSheets(i).Visible = TrueNext iEnd Sub▲循环宏返回Sub 循环()AAA = Range("C2")Dim i As LongDim times As Longtimes = AAA'times代表循环次数,执行前把times赋值即可(不可小于1,不可大于2147483647)For i = 1 To timesCall 过滤一行If Range("完成标志") = "完成" Then Exit For '如果名为'完成标志'的命名单元的值等于'完成',则退出循环,如果一开始就等于'完成',则只执行一次循环就退出'If Sheets("传送参数").Range("A" & i).Text = "完成" Then Exit For '如果某列出现"完成"内容则退出循环Next iEnd Sub▲录制宏时调用“停止录制”工具栏返回Sub 录制宏时调用停止录制工具栏()mandBars("Stop Recording").Visible = TrueEnd Sub▲高级筛选5列不重复数据至指定表返回Sub 高级筛选5列不重复数据至Sheet2()Sheets("Sheet2").Range("A1:E65536") = "" '清除Sheet2的A:D列Range("A1:E65536").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Sheet2.Range( _"A1"), Unique:=TrueSheet2.Columns("A:E").Sort Key1:=Sheet2.Range("A2"), Order1:=xlAscending,Header:=xlGuess, _OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _:=xlPinYinEnd Sub▲双击单元执行宏(工作表代码)返回Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)If Range("$A$1") = "关闭" Then Exit SubSelect Case Target.AddressCase "$A$4"Call 宏1Cancel = TrueCase "$B$4"Call 宏2Cancel = TrueCase "$C$4"Call 宏3Cancel = TrueCase "$E$4"Call 宏4Cancel = TrueEnd SelectEnd Sub▲双击指定区域单元执行宏(工作表代码)返回Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)If Range("$A$1") = "关闭" Then Exit SubIf Not Application.Intersect(Target, Range("A4:A9", "C4:C9")) Is Nothing Then Call 打开隐藏表End Sub▲进入单元执行宏(工作表代码)返回Private Sub Worksheet_SelectionChange(ByVal Target As Range)'以单元格进入代替按钮对象调用宏If Range("$A$1") = "关闭" Then Exit SubSelect Case Target.AddressCase "$A$5" '单元地址(Target.Address),或命名单元名字()Call 宏1Case "$B$5"Call 宏2Case "$C$5"Call 宏3End SelectEnd Sub▲进入指定区域单元执行宏(工作表代码)返回Private Sub Worksheet_SelectionChange(ByVal Target As Range)If Range("$A$1") = "关闭" Then Exit SubIf Not Application.Intersect(Target, Range("A4:A9","C4:C9")) Is Nothing Then Call打开隐藏表End Sub▲在多个宏中依次循环执行一个(控件按钮代码)返回Private Sub CommandButton1_Click()Static RunMacro As IntegerSelect Case RunMacroCase 0宏1RunMacro = 1Case 1宏2RunMacro = 2Case 2宏3RunMacro = 0End SelectEnd Sub▲在两个宏中依次循环执行一个并相应修改按钮名称(控件按钮代码)返回Private Sub CommandButton1_Click()With CommandButton1If .Caption = "保护工作表" ThenCall 保护工作表.Caption = "取消工作表保护"Exit SubEnd IfIf .Caption = "取消工作表保护" ThenCall 取消工作表保护.Caption = "保护工作表"Exit SubEnd IfEnd WithEnd Sub▲在三个宏中依次循环执行一个并相应修改按钮名称(控件按钮代码)返回Option ExplicitPrivate Sub CommandButton1_Click()With CommandButton1If .Caption = "宏1" ThenCall 宏1.Caption = "宏2"Exit SubEnd IfIf .Caption = "宏2" ThenCall 宏2.Caption = "宏3"Exit SubEnd IfIf .Caption = "宏3" ThenCall 宏3.Caption = "宏1"Exit SubEnd IfEnd WithEnd Sub▲根据A1单元文本隐藏/显示按钮(控件按钮代码)返回Private Sub Worksheet_SelectionChange(ByVal Target As Range)If Range("A1") > 2 ThenCommandButton1.Visible = 1ElseCommandButton1.Visible = 0End IfEnd SubPrivate Sub CommandButton1_Click()重排窗口End Sub▲当前单元返回按钮名称(控件按钮代码)返回Private Sub CommandButton1_Click()ActiveCell = CommandButton1.CaptionEnd Sub▲当前单元内容返回到按钮名称(控件按钮代码)返回Private Sub CommandButton1_Click()CommandButton1.Caption = ActiveCellEnd Sub▲奇偶页分别打印返回Sub 奇偶页分别打印()Dim i%, Ps%Ps = ExecuteExcel4Macro("GET.DOCUMENT(50)") '总页数MsgBox "现在打印奇数页,按确定开始."For i = 1 To Ps Step 2ActiveSheet.PrintOut from:=i, To:=iNext iMsgBox "现在打印偶数页,按确定开始."For i = 2 To Ps Step 2ActiveSheet.PrintOut from:=i, To:=iNext iEnd Sub▲自动打印多工作表第一页返回Sub 自动打印多工作表第一页()Dim sh As IntegerDim xDim yDim syDim syzx = InputBox("请输入起始工作表名字:")sy = InputBox("请输入结束工作表名字:")y = Sheets(x).Indexsyz = Sheets(sy).IndexFor sh = y To syzSheets(sh).SelectSheets(sh).PrintOut from:=1, To:=1Next shEnd Sub▲查找A列文本循环插入分页符返回Sub 循环插入分页符()' Selection = Workbooks("临时表").Sheets("表2").Range("A1") 调用指定地址内容Dim i As LongDim times As Longtimes = Application.WorksheetFunction.CountIf(Sheet1.Range("a:a"), "分页")'times代表循环次数,执行前把times赋值即可(不可小于1,不可大于2147483647)For i = 1 To timesCall 插入分页符Next iEnd SubSub 插入分页符()Cells.Find(What:="分页", After:=ActiveCell, LookIn:=xlValues, LookAt:= _xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False) _.ActivateActiveWindow.SelectedSheets.HPageBreaks.Add Before:=ActiveCellEnd SubSub 取消原分页()Cells.SelectActiveSheet.ResetAllPageBreaksEnd Sub▲将A列最后数据行以上的所有B列图片大小调整为所在单元大小返回Sub 将A列最后数据行以上的所有B列图片大小调整为所在单元大小()Dim Pic As Picture, i&i = [A65536].End(xlUp).RowFor Each Pic In Sheet1.PicturesIf Not Application.Intersect(Pic.TopLeftCell, Range("B1:B" & i)) Is Nothing ThenPic.Top = Pic.TopLeftCell.TopPic.Left = Pic.TopLeftCell.LeftPic.Height = Pic.TopLeftCell.HeightPic.Width = Pic.TopLeftCell.WidthEnd IfNextEnd Sub▲返回光标所在行数返回Sub 返回光标所在行数()x = ActiveCell.RowRange("A1") = xEnd Sub▲在A1返回当前选中单元格数量返回Sub 在A1返回当前选中单元格数量()[A1] = Selection.CountEnd Sub▲返回当前工作簿中工作表数量返回Sub 返回当前工作簿中工作表数量()t = Application.Sheets.CountMsgBox tEnd Sub▲返回光标选择区域的行数和列数返回Sub 返回光标选择区域的行数和列数()x = Selection.Rows.County = Selection.Columns.CountRange("A1") = xRange("A2") = yEnd Sub▲工作表中包含数据的最大行数返回Sub 包含数据的最大行数()n = Cells.Find("*", , , , 1, 2).RowMsgBox nEnd Sub▲返回A列数据的最大行数返回Sub 返回A列数据的最大行数()n = Range("a65536").End(xlUp).RowRange("B1") = nEnd Sub▲将所选区域文本插入新建文本框返回Sub 将所选区域文本插入新建文本框()For Each rag In Selectionn = n & rag.Value & Chr(10)NextActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, ActiveCell.Left +ActiveCell.Width, ActiveCell.Top + ActiveCell.Height, 250#, 100).SelectSelection.Characters.Text = "问题:" & nWith Selection.Characters(Start:=1, Length:=3).Font.Name = "黑体".FontStyle = "常规".Size = 12End WithEnd Sub▲批量插入地址批注返回Sub 批量插入地址批注()On Error Resume NextDim r As RangeIf Selection.Cells.Count > 0 ThenFor Each r In Selectionment.Deleter.AddCommentment.Visible = Falsement.Text Text:="本单元格:" & r.Address & " of " & Selection.AddressNextEnd IfEnd Sub▲批量插入统一批注返回Sub 批量插入统一批注()Dim r As Range, msg As Stringmsg = InputBox("请输入欲批量插入的批注", "提示", "随便输点什么吧")If Selection.Cells.Count > 0 ThenFor Each r In Selectionr.AddCommentment.Visible = Falsement.Text Text:=msgNextEnd IfEnd Sub▲以A1单元内容批量插入批注返回Sub 以A1单元内容批量插入批注()Dim r As RangeIf Selection.Cells.Count > 0 ThenFor Each r In Selectionr.AddCommentment.Visible = Falsement.Text Text:=[a1].TextNextEnd IfEnd Sub▲不连续区域插入当前文件名和表名及地址返回Sub 批量插入当前文件名和表名及地址()For Each mycell In Selectionmycell.FormulaR1C1 = "[" + + "]" + +"!" + mycell.AddressNextEnd Sub▲不连续区域录入当前单元地址返回Sub 区域录入当前单元地址()For Each mycell In Selectionmycell.FormulaR1C1 = mycell.AddressNextEnd Sub▲连续区域录入当前单元地址返回Sub 连续区域录入当前单元地址()Selection = "=ADDRESS(ROW(),COLUMN(),4,1)"Selection.CopySelection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _:=False, Transpose:=FalseEnd Sub▲返回当前单元地址返回Sub 返回当前单元地址()d = ActiveCell.Address[A1] = dEnd Sub▲不连续区域录入当前日期返回Sub 区域录入当前日期()Selection.FormulaR1C1 = Format(Now(), "yyyy-m-d")End Sub▲不连续区域录入当前数字日期返回Sub 区域录入当前数字日期()Selection.FormulaR1C1 = Format(Now(), "yyyymmdd")End Sub▲不连续区域录入当前日期和时间返回Sub 区域录入当前日期和时间()Selection.FormulaR1C1 = Format(Now(), "yyyy-m-d h:mm:ss")End Sub▲不连续区域录入对勾返回Sub 批量录入对勾()Selection.FormulaR1C1 = "√"End Sub▲不连续区域录入当前文件名返回Sub 批量录入当前文件名()Selection.FormulaR1C1 = End Sub▲不连续区域添加文本返回Sub 批量添加文本()Dim s As RangeFor Each s In Selections = s & "文本内容"NextEnd Sub▲不连续区域插入文本返回Sub 批量插入文本()Dim s As RangeFor Each s In Selections = "文本内容" & sNextEnd Sub▲从指定位置向下同时录入多单元指定内容返回Sub 从指定位置向下同时录入多单元指定内容()Dim arrarr = Array("1", "2", "13", "25", "46", "12", "0", "20")[B2].Resize(8, 1) = Application.WorksheetFunction.Transpose(arr)End Sub▲按aa工作表A列的内容排列工作表标签顺序返回Sub 按aa工作表A列的内容排列工作表标签顺序()Dim I%, str1$I = 1Sheets("aa").SelectDo While Cells(I, 1).Value <> ""str1 = Trim(Cells(I, 1).Value)Sheets(str1).SelectSheets(str1).Move after:=Sheets(I)I = I + 1Sheets("aa").SelectLoopEnd Sub▲以A1单元文本作表名插入工作表返回Sub 以A1单元文本作表名插入工作表()Dim nm As Stringnm = [a1]Sheets.Add = nmEnd Sub▲删除全部未选定工作表返回Sub 删除全部未选定工作表()Dim sht As Worksheet, n As Integer, iFlag As BooleanDim ShtName() As Stringn = ActiveWindow.SelectedSheets.CountReDim ShtName(1 To n)n = 1For Each sht In ActiveWindow.SelectedSheetsShtName(n) = n = n + 1NextApplication.DisplayAlerts = FalseFor Each sht In SheetsiFlag = FalseFor i = 1 To n - 1If ShtName(i) = TheniFlag = TrueExit ForEnd IfNextIf Not iFlag Then sht.DeleteNextApplication.DisplayAlerts = TrueEnd Sub▲工作表标签排序返回Sub 工作表标签排序()Dim i As Long, j As Long, nums As Long, msg As Longmsg = MsgBox("工作表按升序排列请选 '是[Y]'. " & vbCrLf & vbCrLf & "工作表按降序排列请选 '否[N]'", vbYesNoCancel, "工作表排序")If msg = vbCancel Then Exit Subnums = Sheets.CountIf msg = vbYes Then 'Sort ascendingFor i = 1 To numsFor j = i To numsIf UCase(Sheets(j).Name) < UCase(Sheets(i).Name) ThenSheets(j).Move Before:=Sheets(i)End IfNext jNext iElse 'Sort descendingFor i = 1 To numsFor j = i To numsIf UCase(Sheets(j).Name) > UCase(Sheets(i).Name) ThenSheets(j).Move Before:=Sheets(i)End IfNext jNext iEnd IfEnd Sub▲定义指定工作表标签颜色返回Sub 定义指定工作表标签颜色()Sheets("Sheet1").Tab.ColorIndex = 46End Sub▲在目录表建立本工作簿中各表链接目录返回Sub 在目录表建立本工作簿中各表链接目录()Dim s%, Rng As RangeOn Error Resume NextSheets("目录").ActivateIf Err = 0 ThenSheets("目录").UsedRange.DeleteElseSheets.Add = "目录"End IfFor i = 1 To Sheets.CountIf Sheets(i).Name <> "目录" Thens = s + 1Set Rng = Sheets("目录").Cells(((s - 1) Mod 20) + 1, (s - 1) \ 20 + 1 + 1)Rng = Format(s, " 0") & ". " & Sheets(i).NameActiveSheet.Hyperlinks.Add Rng, "#" & Sheets(i).Name & "!A1",ScreenTip:=Sheets(i).NameEnd IfNextSheets("目录").Range("b:iv").EntireColumn.ColumnWidth = 20End Sub▲建立工作表文本目录返回Sub 建立工作表文本目录()Sheets.Add before:=Sheets(1)Sheets(1).Name = "目录"For i = 2 To Sheets.CountCells(i - 1, 1) = Sheets(i).Name'Sheets(1).Hyperlinks.Add Cells(i - 1, 1), "#" & Sheets(i).Name & "!A1" '添加超链接NextEnd Sub▲查另一文件的全部表名返回Sub 查另一文件的全部表名()On Error Resume NextDim i%Dim sh As WorksheetApplication.ScreenUpdating = FalseWorkbooks.Open Filename:=ThisWorkbook.Path & "\2.xls"Windows("1.xls").Activate '当前文件名称Sheets("Sheet1").Select '当前表名称i = 1 '将表名称返回到第1行For Each sh In Workbooks("2.xls").WorksheetsCells(i, 1) = '将表名称返回到第1列i = i + 1 '返回每个表名称向下移动1行Next shWindows("2.xls").Close '关闭对象文件Application.ScreenUpdating = TrueEnd Sub▲当前单元录入计算机名返回Sub 当前单元录入计算机名()Selection = Environ("COMPUTERNAME")'Selection = Workbooks("临时表").Sheets("表2").Range("A1") 调用指定地址内容End Sub▲当前单元录入计算机用户名返回 Sub 当前单元录入计算机用户名()Selection = Environ("Username")'Selection = Workbooks("临时表").Sheets("表2").Range("A1") 调用指定地址内容End Sub▲解除全部工作表保护返回Sub 解除全部工作表保护()Dim n As IntegerFor n = 1 To Sheets.CountSheets(n).UnprotectNext nEnd Sub▲为指定工作表加指定密码保护表返回Sub 为指定工作表加指定密码保护表()Sheet10.Protect Password:="123"End Sub▲在有密码的工作表执行代码返回Sub 在有密码的工作表执行代码()Sheets("1").Unprotect Password:=123 '假定表名为“1”,密码为“123” 打开工作表Range("C:C").SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True '隐藏C列空值行Sheets("1").Protect Password:=123 '重新用密码保护工作表End Sub▲执行前需要验证密码的宏(控件按钮代码)返回Private Sub CommandButton1_Click()If InputBox("请输入密码:") <> "123" Then '密码是123MsgBox "密码错误,按确定退出!", 64, "提示"Exit SubEnd IfCells(1, 1) = 10End SubSub 执行前需要验证密码的宏()If InputBox("请输入您的使用权限:", "系统提示") = 123 Then重排窗口 '要执行的宏代码或宏名称ElseMsgBox "对不起,您没有使用该宏的权限,按确定键后退出!"End IfEnd Sub▲拷贝A1公式和格式到A2返回Sub 拷贝A1公式到A2()Workbooks("临时表").Sheets("表1").Range("A1").CopyWorkbooks("临时表").Sheets("表2").Range("A2").PasteSpecialEnd Sub▲复制单元数值返回Sub 复制数值()s = Workbooks("book1").Sheets("Sheet1").Range("A1:A2")Workbooks("book2").Sheets("Sheet1").Range("A1:A2") = sEnd Sub▲插入数值条件格式返回Sub 插入数值条件格式()Selection.FormatConditions.DeleteSelection.FormatConditions.Add Type:=xlCellValue, Operator:=xlGreater, _Formula1:="70"Selection.FormatConditions(1).Interior.ColorIndex = 45Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlLess, _Formula1:="55"Selection.FormatConditions(2).Interior.ColorIndex = 39Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlGreater, _Formula1:="60"Selection.FormatConditions(3).Interior.ColorIndex = 34End Sub▲插入透明批注返回Sub 插入透明批注()Selection.AddCommentment.Visible = FalseDim XS As WorksheetFor i = 1 To ments.Countments(i).Text "透明批注"ments(i).Shape.Fill.Visible = msoFalseNextEnd Sub▲添加文本返回Sub 添加文本()Selection = Selection + "×" '不可在数字后添加文本'Selection = Workbooks("临时表").Sheets("表2").Range("A1") 调用指定地址内容End Sub▲光标定位到指定工作表A列最后数据行下一单元返回Sub 光标定位到指定工作表A列最后数据行下一单元()a = Sheets("数据库").[a65536].End(xlUp).RowSheets("数据库").SelectRange("A" & a + 1).SelectEnd Sub▲定位选定单元格式相同的全部单元格返回Sub 定位选定单元格式相同的全部单元格()Dim FirstCell As Range, FoundCell As RangeDim AllCells As RangeWith Application.FindFormat.Clear.NumberFormatLocal = Selection.NumberFormatLocal.HorizontalAlignment = Selection.HorizontalAlignment.VerticalAlignment = Selection.VerticalAlignment.WrapText = Selection.WrapText.Orientation = Selection.Orientation.AddIndent = Selection.AddIndent.IndentLevel = Selection.IndentLevel.ShrinkToFit = Selection.ShrinkToFit.MergeCells = Selection.MergeCells = .Font.FontStyle = Selection.Font.FontStyle.Font.Size = Selection.Font.Size.Font.Strikethrough = Selection.Font.Strikethrough.Font.Subscript = Selection.Font.Subscript.Font.Underline = Selection.Font.Underline.Font.ColorIndex = Selection.Font.ColorIndex.Interior.ColorIndex = Selection.Interior.ColorIndex.Interior.Pattern = Selection.Interior.Pattern.Locked = Selection.Locked.FormulaHidden = Selection.FormulaHiddenEnd WithSet FirstCell = edRange.Find(what:="", searchformat:=True)If FirstCell Is Nothing ThenExit SubEnd IfSet AllCells = FirstCellSet FoundCell = FirstCellDoSet FoundCell = edRange.Find(After:=FoundCell, what:="",searchformat:=True)If FoundCell Is Nothing Then Exit DoSet AllCells = Union(FoundCell, AllCells)If FoundCell.Address = FirstCell.Address Then Exit DoLoopAllCells.SelectEnd Sub▲按当前单元文本定位返回Sub 按当前单元文本定位()ABC = SelectionDim aa As RangeFor Each a In edRangeIf a Like ABC ThenIf aa Is Nothing ThenSet aa = a.CellsElseSet aa = Union(aa, a.Cells)End IfEnd IfNextaa.SelectEnd Sub▲按固定文本定位返回Sub 文本定位()Dim aa As RangeFor Each a In edRangeIf a Like "*合计*" ThenIf aa Is Nothing ThenSet aa = a.CellsElseSet aa = Union(aa, a.Cells)End IfEnd IfNextaa.SelectEnd Sub▲删除包含固定文本单元的行或列返回Sub 删除包含固定文本单元的行或列()DoCells.Find(what:="哈哈").ActivateSelection.EntireRow.Delete '删除行' Selection.EntireColumn.Delete '删除列Loop Until Cells.Find(what:="哈哈") Is NothingEnd Sub▲定位数据及区域以上的空值返回Sub 定位数据及区域以上的空值()Dim aa As RangeFor Each a In edRangeIf a Like 〈0 ThenIf aa Is Nothing ThenSet aa = a.CellsElseSet aa = Union(aa, a.Cells)End IfEnd IfNextaa.SelectEnd Sub▲右侧单元自动加5(工作表代码)返回Private Sub Worksheet_Change(ByVal Target As Range)Application.EnableEvents = FalseTarget.Offset(0, 1) = Target + 5Application.EnableEvents = TrueEnd Sub▲当前单元加2返回Sub 当前单元加2()Selection = Selection + 2'Selection = Workbooks("临时表").Sheets("表2").Range("A1") 调用指定地址内容End Sub▲A列等于A列减B列返回Sub A列等于A列减B列()For i = 1 To 23Cells(i, 1) = Cells(i, 1) - Cells(i, 2)NextEnd Sub▲用于光标选定多区域跳转指定单元(工作表代码)返回Private Sub Worksheet_SelectionChange(ByVal T As Range)a = Array([b6:b7], [e6], [h6])For i = 0 To 2If Not Application.Intersect(T, a(i)) Is Nothing Then[a1].Select: Exit ForEnd IfNextEnd Sub▲将A1单元录入的数据累加到B1单元(工作表代码)返回Private Sub Worksheet_Change(ByVal Target As Range)Dim t As LongIf Target.Address = "$A$1" Thent = Sheet1.Range("$B$1").ValueSheet1.Range("$B$1").Value = t + Target.ValueEnd IfEnd Sub▲在指定颜色区域选择单元时添加/取消"√"(工作表代码)返回Private Sub Worksheet_SelectionChange(ByVal Target As Range)Dim myrg As RangeFor Each myrg In TargetIf myrg.Interior.ColorIndex = 37 Then myrg = IIf(myrg <> "√", "√", "")NextEnd Sub▲在指定区域选择单元时添加/取消"√"(工作表代码)返回Private Sub Worksheet_SelectionChange(ByVal Target As Range)Dim Rng As RangeIf Target.Count <= 15 ThenIf Not Application.Intersect(Target, Range("D6:D20")) Is Nothing ThenFor Each Rng In SelectionWith RngIf .Value = "" Then.Value = "√"Else.Value = ""End IfEnd WithNextEnd IfEnd IfEnd Sub▲双击指定单元,循环录入文本(工作表代码)返回Private Sub Worksheet_BeforeDoubleClick(ByVal T As Range, Cancel As Boolean)If T.Address <> "$A$1" Then Exit SubCancel = TrueT = IIf(T = "好", "中", IIf(T = "中", "差", "好"))End Sub双击指定单元,循环录入文本(工作表代码)Dim nums As BytePrivate Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Target.Address = "$A$1" Thennums = nums Mod 3 + 1Target = Mid("上中下", nums, 1)Target.Offset(1, 0).SelectEnd IfEnd Sub▲单元区域引用(工作表代码)返回Private Sub Worksheet_Activate()Sheet1.Range("A1:B3").Value = Sheet2.Range("A1:B3").ValueEnd Sub▲在指定区域选择单元时数值加1(工作表代码)返回Private Sub Worksheet_SelectionChange(ByVal Target As Range)If Not Application.Intersect([a1:e10], Target) Is Nothing ThenTarget = Val(Target) + 1End IfEnd Sub▲混合文本的编号返回Sub 混合文本的编号()Worksheets(1).Range("B2").Value = "北京" & (--(Mid(Worksheets(1).Range("B2"), 3,100)) + 1)End Sub▲指定区域单元双击数据累加(工作表代码)返回Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)If Not Application.Intersect([A1:Y100], Target) Is Nothing Thenoldvalue = Val(Target.Value)inputvalue = InputBox("请输入数量,按ENTER键确认!", "数值累加器")Target.Value = oldvalue + inputvalueEnd IfEnd Sub▲选择单元区域触发事件(工作表代码)返回Private Sub Worksheet_SelectionChange(ByVal Target As Range)If Target.Address = "$A$1:$B$2" ThenMsgBox "你选择了$A$1:$B$2单元"End IfEnd Sub▲当修改指定单元内容时自动执行宏(工作表代码)返回Private Sub Worksheet_Change(ByVal Target As Range)If Not Application.Intersect(Target, [B3:B4]) Is Nothing Then重排窗口End IfEnd Sub▲被指定单元内容限制执行宏返回Sub 被指定单元限制执行宏()If Range("$A$1") = "关闭" Then Exit Sub窗口End Sub▲双击单元隐藏该行(工作表代码)返回Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)Rows(Target.Row).Hidden = TrueEnd Sub▲高亮显示行(工作表代码)返回Private Sub Worksheet_SelectionChange(ByVal Target As Range)Cells.Interior.ColorIndex = 2Rows("1:2").Interior.ColorIndex = 40 '保持1至2行的颜色推荐39,22,40,Rows(Target.Row).Interior.ColorIndex = 35 '高亮推荐颜色35,20,24,34,37,40,15End Sub▲高亮显示行和列(工作表代码)返回Private Sub Worksheet_SelectionChange(ByVal Target As Range)Cells.Interior.ColorIndex = xlNoneRows(Target.Row).Interior.ColorIndex = 34Columns(Target.Column).Interior.ColorIndex = 34End Sub▲为指定工作表设置滚动范围(工作簿代码)返回Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target AsRange)Sheet1.ScrollArea = "A1:M30"End Sub▲在指定单元记录打印和预览次数(工作簿代码)返回Private Sub Workbook_BeforePrint(Cancel As Boolean)Range("A1") = 1 + Range("A1")End Sub▲自动数字金额转大写(工作表代码)返回Private Sub Worksheet_Change(ByVal M As Range)On Error Resume Nexty = Int(Round(100 * Abs(M)) / 100)j = Round(100 * Abs(M) + 0.00001) - y * 100f = (j / 10 - Int(j / 10)) * 10A = IIf(y < 1, "", Application.Text(y, "[DBNum2]") & "元")b = IIf(j > 9.5, Application.Text(Int(j / 10), "[DBNum2]") & "角", IIf(y < 1,"", IIf(f > 1, "零", "")))c = IIf(f < 1, "整", Application.Text(Round(f, 0), "[DBNum2]") & "分")M = IIf(Abs(M) < 0.005, "", IIf(M < 0, "负" & A & b & c, A & b & c))End Sub▲将全部工作表的A1单元作为单击按钮(工作簿代码)返回Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target AsRange)If Target.Address = "$A$1" ThenCall 宏名End IfEnd Sub▲闹钟——到指定时间执行宏(工作簿代码)返回Private Sub Workbook_Open()Application.OnTime ("11:45:00"), "提示1" '宏名字Application.OnTime ("12:00:00"), "提示2" '宏名字End Sub▲改变Excel界面标题的宏(工作簿代码)返回Private Sub Workbook_Open()Application.Caption = "春节快乐"End Sub▲在指定工作表的指定单元返回光标当前多选区地址(工作簿代码)返回Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target AsRange)Worksheets("表2").Range("A1") = Target.Address(0, 0)End Sub▲B列录入数据时在A列返回记录时间(工作表代码)返回Public Sub Worksheet_Change(ByVal Target As Range)If Target.Column = 2 ThenTarget.Offset(, -1) = NowEnd IfEnd Sub▲当指定区域修改时在其右侧的2个单元返回当前日期和时间(工作表代码)返回Public Sub Worksheet_Change(ByVal Target As Range)If Not Application.Intersect(Target, [A1:A1000]) Is Nothing ThenIf Target.Column = 1 ThenTarget.Offset(, 1) = DateTarget.Offset(, 2) = TimeEnd IfEnd IfEnd SubPublic Sub Worksheet_Change(ByVal Target As Range)If Not Application.Intersect(Target, [A1:A1000]) Is Nothing ThenIf Target.Column = 1 ThenTarget.Offset(, 1) = Format(Now(), "yyyy-mm-dd")Target.Offset(, 2) = Format(Now(), "h:mm:ss")End IfEnd IfEnd Sub▲指定单元显示光标位置内容(工作表代码)返回Private Sub Worksheet_SelectionChange(ByVal T As Range)Sheets(1).Range("A1") = SelectionEnd Sub▲每编辑一个单元保存文件返回Private Sub Worksheet_Change(ByVal Target As Range)ThisWorkbook.SaveEnd Sub▲指定允许编辑区域返回Sub 指定允许编辑区域()ActiveSheet.ScrollArea = "B8:G15"End Sub▲解除允许编辑区域限制返回Sub 解除允许编辑区域限制()ActiveSheet.ScrollArea = ""End Sub▲删除指定行返回Sub 删除指定行()Workbooks("临时表").Sheets("表2").Range("5:5").DeleteEnd Sub▲删除A列为指定内容的行返回Sub 删除A列为指定内容的行()Dim a, b As Integera = Sheet1.[a65536].End(xlUp).RowFor b = a To 2 Step -1If Cells(b, 1).Value = "删除" ThenRows(b).DeleteEnd IfNextEnd Sub▲删除A列非数字单元行返回Sub 删除A列非数字单元行()i = [a65536].End(xlUp).RowRange("A1:A" & i).SpecialCells(xlCellTypeConstants, 2).EntireRow.DeleteEnd Sub▲有条件删除当前行返回Sub 有条件删除当前行()If [A1] = 2 Or [B1] = "删除" ThenSelection.Delete Shift:=xlUpEnd IfEnd Sub▲选择下一行返回Sub 选择下一行()ActiveCell.Offset(1, 0).Rows("1:1").EntireRow.SelectEnd Sub▲选择第5行开始所有数据行返回Sub 选择第5行开始所有数据行A()Dim i%i = Cells.Find("*", SearchOrder:=xlByRows, LookIn:=xlValues,SearchDirection:=xlPrevious).EntireRow.RowRows("5:" & i).SelectEnd SubSub 选择第5行开始所有数据行B()Rows("5:" & Cells.Find("*", , , , 1, 2).Row).SelectEnd Sub▲选择光标或选区所在行返回Sub 选择光标或选区所在行()Selection.EntireRow.Select▲选择光标或选区所在列返回Sub 选择光标或选区所在列()Selection.EntireColumn.SelectEnd Sub▲光标定位到名称指定位置返回Sub 定位()Application.Goto Range(Evaluate("名称"))End Sub▲选择名称定义的数据区返回Sub 选择名称定义的数据区()[数据区].Select '插入名称要使用INDIRECT函数'Range("数据区").Select 或者'Sheet1.Range("数据区").Select 或者End Sub▲选择到指定列的最后行返回Sub 选择到指定列的最后行()Range("C4:G" & [G65536].End(xlUp).Row).SelectEnd Sub▲将Sheet1的A列的非空值写到Sheet2的A列返回Sub 将Sheet1的A列的非空值写到Sheet2的A列()Sheet1.Columns("A:A").SpecialCells(2, 23).SpecialCells(12).Copy Sheet2.[A1]End Sub▲将名称1的数据写到名称2返回Sub Macro2()Range("位置2") = Range("位置1").Value▲单元反选返回Sub 单元反选()Application.DisplayAlerts = FalseApplication.ScreenUpdating = FalseDim raddress As String, taddress As Stringraddress = Selection.Addresstaddress = edRange.AddressWith Sheets.Add.Range(taddress) = 0.Range(raddress) = "=0"raddress = .Range(taddress).SpecialCells(xlCellTypeConstants, 1).Address.DeleteEnd WithActiveSheet.Range(raddress).SelectApplication.ScreenUpdating = TrueEnd Sub▲调整选中对象中的文字返回Sub 调整选中对象中的文字()'文字居中、自动调整大小With Selection.HorizontalAlignment = xlCenter.VerticalAlignment = xlCenter.ReadingOrder = xlContext.Orientation = xlHorizontal.AutoSize = True.AddIndent = FalseEnd WithEnd Sub▲去除指定范围内的对象返回Sub 去除指定范围内的对象()。

[网摘]移除VBA编码保护的VBA代码

[网摘]移除VBA编码保护的VBA代码

[⽹摘]移除VBA编码保护的VBA代码--来⾃⽹上,经测试成功。

有问题可联系:--本⼈长期从事Excel智能⽂档、加载和VBA的开发,内容涉及⽣产计划、业务计划和SPC等等'移除VBA编码保护Private Function MoveProtect()Dim FileName As StringFileName = Application.GetOpenFilename("Excel⽂件(*.xls), *.xls,Excel⽂件(*.xla), *.xla", , "VBA破解") If FileName = False ThenExit FunctionElseVBAPassword FileName, FalseEnd IfEnd Function'设置VBA编码保护Private Function SetProtect()Dim FileName As StringFileName = Application.GetOpenFilename("Excel⽂件(*.xls), *.xls,Excel⽂件(*.xla), *.xla", , "VBA破解") If FileName = False ThenExit FunctionElseVBAPassword FileName, TrueEnd IfEnd FunctionPrivate Function VBAPassword(FileName As String, Optional Protect As Boolean = False)If Dir(FileName) = "" ThenExit FunctionElseFileCopy FileName, FileName & ".bak"End IfDim GetData As String * 5Open FileName For Binary As #1Dim CMGs As LongDim DPBo As LongFor i = 1 To LOF(1)Get #1, i, GetDataIf GetData = "CMG=""" Then CMGs = iIf GetData = "[Host" Then DPBo = i - 2: Exit ForNextIf CMGs = 0 ThenMsgBox "请先对VBA编码设置⼀个保护密码...", 32, "提⽰"GoTo cloEnd IfIf Protect = False ThenDim St As String * 2Dim s20 As String * 1'取得⼀个0D0A⼗六进制字串Get #1, CMGs - 2, St'取得⼀个20⼗六制字串Get #1, DPBo + 16, s20'替换加密部份机码For i = CMGs To DPBo Step 2Put #1, i, StNext'加⼊不配对符号If (DPBo - CMGs) Mod 2 <> 0 ThenPut #1, DPBo + 1, s20End IfMsgBox "⽂件解密成功......", 32, "提⽰"ElseDim MMs As String * 5MMs = "DPB="""Put #1, CMGs, MMsMsgBox "对⽂件特殊加密成功......", 32, "提⽰"End Ifclo:CloseEnd Function解除⼯作表保护密码宏Option ExplicitPublic Sub AllInternalPasswords()' Breaks worksheet and workbook structure passwords. Bob McCormick ' probably originator of base code algorithm modified for coverage' of workbook structure / windows passwords and for multiple passwords '' Norman Harker and JE McGimpsey 27-Dec-2002 (Version 1.1)' Modified 2003-Apr-04 by JEM: All msgs to constants, and' eliminate one Exit Sub (Version 1.1.1)' Reveals hashed passwords NOT original passwordsConst DBLSPACE As String = vbNewLine & vbNewLineConst AUTHORS As String = DBLSPACE & vbNewLine & _ "Adapted from Bob McCormick base code by" & _"Norman Harker and JE McGimpsey"Const HEADER As String = "AllInternalPasswords User Message" Const VERSION As String = DBLSPACE & "Version 1.1.1 2003-Apr-04" Const REPBACK As String = DBLSPACE & "Please report failure " & _ "to the microsoft.public.excel.programming newsgroup."Const ALLCLEAR As String = DBLSPACE & "The workbook should " & _ "now be free of all password protection, so make sure you:" & _ DBLSPACE & "SAVE IT NOW!" & DBLSPACE & "and also" & _ DBLSPACE & "BACKUP!, BACKUP!!, BACKUP" & _DBLSPACE & "Also, remember that the password was " & _"put there for a reason. Don't stuff up crucial formulas " & _"or data." & DBLSPACE & "Access and use of some data " & _"may be an offense. If in doubt, don't."Const MSGNOPWORDS1 As String = "There were no passwords on " & _ "sheets, or workbook structure or windows." & AUTHORS & VERSION Const MSGNOPWORDS2 As String = "There was no protection to " & _ "workbook structure or windows." & DBLSPACE & _"Proceeding to unprotect sheets." & AUTHORS & VERSIONConst MSGTAKETIME As String = "After pressing OK button this " & _ "will take some time." & DBLSPACE & "Amount of time " & _ "depends on how many different passwords, the " & _"passwords, and your computer's specification." & DBLSPACE & _ "Just be patient! Make me a coffee!" & AUTHORS & VERSIONConst MSGPWORDFOUND1 As String = "You had a Worksheet " & _ "Structure or Windows Password set." & DBLSPACE & _"The password found was: " & DBLSPACE & "$$" & DBLSPACE & _ "Note it down for potential future use in other workbooks by " & _"the same person who set this password." & DBLSPACE & _"Now to check and clear other passwords." & AUTHORS & VERSION Const MSGPWORDFOUND2 As String = "You had a Worksheet " & _ "password set." & DBLSPACE & "The password found was: " & _ DBLSPACE & "$$" & DBLSPACE & "Note it down for potential " & _ "future use in other workbooks by same person who " & _"set this password." & DBLSPACE & "Now to check and clear " & _ "other passwords." & AUTHORS & VERSIONConst MSGONLYONE As String = "Only structure / windows " & _ "protected with the password that was just found." & _ALLCLEAR & AUTHORS & VERSION & REPBACKDim w1 As Worksheet, w2 As WorksheetDim i As Integer, j As Integer, k As Integer, l As Integer Dim m As Integer, n As Integer, i1 As Integer, i2 As Integer Dim i3 As Integer, i4 As Integer, i5 As Integer, i6 As Integer Dim PWord1 As StringDim ShTag As Boolean, WinTag As Boolean Application.ScreenUpdating = FalseWith ActiveWorkbookWinTag = .ProtectStructure Or .ProtectWindowsEnd WithShTag = FalseFor Each w1 In WorksheetsShTag = ShTag Or w1.ProtectContentsNext w1If Not ShTag And Not WinTag ThenMsgBox MSGNOPWORDS1, vbInformation, HEADER Exit SubEnd IfMsgBox MSGTAKETIME, vbInformation, HEADERIf Not WinTag ThenMsgBox MSGNOPWORDS2, vbInformation, HEADER ElseOn Error Resume NextDo 'dummy do loopFor i = 65 To 66: For j = 65 To 66: For k = 65 To 66For l = 65 To 66: For m = 65 To 66: For i1 = 65 To 66For i2 = 65 To 66: For i3 = 65 To 66: For i4 = 65 To 66 For i5 = 65 To 66: For i6 = 65 To 66: For n = 32 To 126 With ActiveWorkbook.Unprotect Chr(i) & Chr(j) & Chr(k) & _Chr(l) & Chr(m) & Chr(i1) & Chr(i2) & _Chr(i3) & Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)If .ProtectStructure = False And _.ProtectWindows = False ThenPWord1 = Chr(i) & Chr(j) & Chr(k) & Chr(l) & _Chr(m) & Chr(i1) & Chr(i2) & Chr(i3) & _Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)MsgBox Application.Substitute(MSGPWORDFOUND1, _ "$$", PWord1), vbInformation, HEADERExit Do 'Bypass all for...nextsEnd IfEnd WithNext: Next: Next: Next: Next: NextNext: Next: Next: Next: Next: NextLoop Until TrueOn Error GoTo 0End IfIf WinTag And Not ShTag ThenMsgBox MSGONLYONE, vbInformation, HEADERExit SubEnd IfOn Error Resume NextFor Each w1 In Worksheets'Attempt clearance with PWord1w1.Unprotect PWord1Next w1On Error GoTo 0ShTag = FalseFor Each w1 In Worksheets'Checks for all clear ShTag triggered to 1 if not.ShTag = ShTag Or w1.ProtectContentsNext w1If ShTag ThenFor Each w1 In WorksheetsWith w1If .ProtectContents ThenOn Error Resume NextDo 'Dummy do loopFor i = 65 To 66: For j = 65 To 66: For k = 65 To 66For l = 65 To 66: For m = 65 To 66: For i1 = 65 To 66For i2 = 65 To 66: For i3 = 65 To 66: For i4 = 65 To 66For i5 = 65 To 66: For i6 = 65 To 66: For n = 32 To 126.Unprotect Chr(i) & Chr(j) & Chr(k) & _Chr(l) & Chr(m) & Chr(i1) & Chr(i2) & Chr(i3) & _Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)If Not .ProtectContents ThenPWord1 = Chr(i) & Chr(j) & Chr(k) & Chr(l) & _Chr(m) & Chr(i1) & Chr(i2) & Chr(i3) & _Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)MsgBox Application.Substitute(MSGPWORDFOUND2, _"$$", PWord1), vbInformation, HEADER'leverage finding Pword by trying on other sheetsFor Each w2 In Worksheetsw2.Unprotect PWord1Next w2Exit Do 'Bypass all for...nextsEnd IfNext: Next: Next: Next: Next: NextNext: Next: Next: Next: Next: NextLoop Until TrueOn Error GoTo 0End IfEnd WithNext w1End IfMsgBox ALLCLEAR & AUTHORS & VERSION & REPBACK, vbInformation, HEADER End Sub-----------------------------------你可以把它保存为⼀个宏,运⾏,点两次确定,等到它运⾏结束,⼯作表密密码就解除了。

VBA 中的工作表保护与隐藏应用技巧

VBA 中的工作表保护与隐藏应用技巧

VBA 中的工作表保护与隐藏应用技巧工作表保护与隐藏的应用技巧在VBA(Visual Basic for Applications)中可以大大提高Excel的数据管理效率。

在进行数据编辑和处理时,有时需要保护某些工作表,以防止他人进行误操作或者更改某些重要的数据。

另外,有时又需要隐藏某些工作表,以保护敏感信息或者简化用户界面。

本文将介绍几种常见的VBA中的工作表保护与隐藏的应用技巧。

首先是工作表保护的应用技巧。

通过在VBA中使用工作表保护功能,我们可以限制对工作表的更改权限,并提高数据的安全性。

以下是一些实用的工作表保护应用技巧:1. 设置工作表保护密码:在VBA中可以使用`Protect`方法来设置工作表保护密码。

例如,使用下面的代码将某个工作表设置为只允许选择和格式化,密码为"123456":```vbaWorksheets("Sheet1").Protect Password:="123456", UserInterfaceOnly:=True, AllowFormattingCells:=True```这样,其他人将无法对该工作表进行编辑和更改,只能选择和格式化单元格。

2. 解除工作表保护:如果需要对已经保护的工作表进行修改,可以使用`Unprotect`方法来解除保护。

例如,使用下面的代码解除对某个工作表的保护:```vbaWorksheets("Sheet1").Unprotect Password:="123456"```注意,解除保护时需要输入正确的密码。

3. 指定允许编辑的区域:有时候我们希望只允许某些区域进行编辑,而其他区域保持锁定。

可以使用`EnableSelection`方法来实现这一功能。

例如,使用下面的代码将某个工作表的A1:B5区域设置为允许编辑:```vbaWorksheets("Sheet1").EnableSelection = xlUnlockedCellsWorksheets("Sheet1").Range("A1:B5").Locked = False```这样,只有A1:B5区域的单元格可以进行编辑,其他单元格将被锁定。

Excel VBA编程 保护工作表

Excel VBA编程  保护工作表

Excel VBA编程保护工作表保护工作表与保护工作簿的区别在于对工作表进行保护之后,仍然可以对工作表的窗口大小进行调整。

在进行保护工作表的过程中,使用了Worksheet.Protect方法,该方法的含义为保护工作表使其不能被修改。

语法:表达式.Protect(Password, DrawingObjects, Contents, Scenarios, UserInterfaceOnly, All owFormattingCells, AllowFormattingColumns, AllowFormattingRows, AllowInsertingColumns, AllowInsertingRows, AllowInsertingHyperlinks, AllowDeletingColumns, AllowDeletingRows, All owSorting, AllowFiltering, AllowUsingPivotTables)其中,在Worksheet.Protect方法的表达式中,包含多个参数,其功能如下表15-7所示。

注意如果对工作表应用Protect方法时,将UserInterfaceOnly参数设为True,然后又保存了工作簿,那么再次打开工作簿时,整张工作表将被完全保护,而并非仅仅保护用户界面。

要在打开工作簿后重新启用用户界面保护,必须再次将UserInterfaceOnly参数设为True,并应用Protect方法。

例如,对打开的工作表进行保护,且设置保护工作表的密码为12345,则可以在【模块】代码编辑窗口中,输入如下的代码:Sub 保护工作表()ActiveSheet.Protect Password:="12345"End Sub另外,若用户需要对受保护的工作表进行一系列必要的更改,可以取消对工作表的保护,其密码如下:Sub 取消保护()ActiveSheet.Unprotect Password:="12345"End Sub在取消保护工作表的过程中,使用了Worksheet.Unprotect 方法,该方法的含义为取消工作表或工作簿的保护。

Excel-vba宏代码-大全

Excel-vba宏代码-大全

Excel-vba宏代码-大全宏文件集▲打开全部隐藏工作表返回Sub 打开全部隐藏工作表()Dim i As IntegerFor i = 1 To Sheets.CountSheets(i).Visible = TrueNext iEnd Sub▲循环宏返回Sub 循环()AAA = Range("C2")Dim i As LongDim times As Longtimes = AAA'times代表循环次数,执行前把times赋值即可(不可小于1,不可大于2147483647)For i = 1 To timesCall 过滤一行If Range("完成标志") = "完成" Then Exit For '如果名为'完成标志'的命名单元的值等于'完成',则退出循环,如果一开始就等于'完成',则只执行一次循环就退出'If Sheets("传送参数").Range("A" & i).Text = "完成" Then Exit For '如果某列出现"完成"内容则退出循环Next iEnd Sub▲录制宏时调用“停止录制”工具栏返回Sub 录制宏时调用停止录制工具栏()/doc/4911298482.html,mandBars("Stop Recording").Visible = TrueEnd Sub▲高级筛选5列不重复数据至指定表返回Sub 高级筛选5列不重复数据至Sheet2()Sheets("Sheet2").Range("A1:E65536") = "" '清除Sheet2的A:D 列Range("A1:E65536").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Sheet2.Range( _"A1"), Unique:=TrueSheet2.Columns("A:E").Sort Key1:=Sheet2.Range("A2"), Order1:=xlAscending,Header:=xlGuess, _OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _:=xlPinYinEnd Sub▲双击单元执行宏(工作表代码)返回Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)If Range("$A$1") = "关闭" Then Exit SubSelect Case Target.AddressCase "$A$4"Call 宏1Cancel = TrueCase "$B$4"Call 宏2Cancel = TrueCase "$C$4"Call 宏3Cancel = TrueCase "$E$4"Call 宏4Cancel = TrueEnd SelectEnd Sub▲双击指定区域单元执行宏(工作表代码)返回Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)If Range("$A$1") = "关闭" Then Exit SubIf Not Application.Intersect(Target, Range("A4:A9", "C4:C9")) Is Nothing Then Call 打开隐藏表End Sub▲进入单元执行宏(工作表代码)返回Private Sub Worksheet_SelectionChange(ByVal Target As Range)'以单元格进入代替按钮对象调用宏If Range("$A$1") = "关闭" Then Exit SubSelect Case Target.AddressCase "$A$5" '单元地址(Target.Address),或命名单元名字(/doc/4911298482.html,)Call 宏1Case "$B$5"Call 宏2Case "$C$5"Call 宏3End SelectEnd Sub▲进入指定区域单元执行宏(工作表代码)返回Private Sub Worksheet_SelectionChange(ByVal Target As Range)If Range("$A$1") = "关闭" Then Exit SubIf Not Application.Intersect(Target, Range("A4:A9","C4:C9")) Is Nothing Then Call打开隐藏表▲在多个宏中依次循环执行一个(控件按钮代码)返回Private Sub CommandButton1_Click()Static RunMacro As IntegerSelect Case RunMacroCase 0宏1RunMacro = 1Case 1宏2RunMacro = 2Case 2宏3RunMacro = 0End SelectEnd Sub▲在两个宏中依次循环执行一个并相应修改按钮名称(控件按钮代码)返回Private Sub CommandButton1_Click()With CommandButton1If .Caption = "保护工作表" ThenCall 保护工作表.Caption = "取消工作表保护"Exit SubEnd IfIf .Caption = "取消工作表保护" ThenCall 取消工作表保护.Caption = "保护工作表"Exit SubEnd IfEnd With▲在三个宏中依次循环执行一个并相应修改按钮名称(控件按钮代码)返回Option ExplicitPrivate Sub CommandButton1_Click()With CommandButton1If .Caption = "宏1" ThenCall 宏1.Caption = "宏2"Exit SubEnd IfIf .Caption = "宏2" ThenCall 宏2.Caption = "宏3"Exit SubEnd IfIf .Caption = "宏3" ThenCall 宏3.Caption = "宏1"Exit SubEnd IfEnd WithEnd Sub▲根据A1单元文本隐藏/显示按钮(控件按钮代码)返回Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Range("A1") > 2 ThenCommandButton1.Visible = 1ElseCommandButton1.Visible = 0End IfEnd SubPrivate Sub CommandButton1_Click()重排窗口End Sub▲当前单元返回按钮名称(控件按钮代码)返回Private Sub CommandButton1_Click()ActiveCell = CommandButton1.CaptionEnd Sub▲当前单元内容返回到按钮名称(控件按钮代码)返回Private Sub CommandButton1_Click()CommandButton1.Caption = ActiveCellEnd Sub▲奇偶页分别打印返回Sub 奇偶页分别打印()Dim i%, Ps%Ps = ExecuteExcel4Macro("GET.DOCUMENT(50)") '总页数MsgBox "现在打印奇数页,按确定开始."For i = 1 To Ps Step 2ActiveSheet.PrintOut from:=i, To:=iNext iMsgBox "现在打印偶数页,按确定开始."For i = 2 To Ps Step 2ActiveSheet.PrintOut from:=i, To:=iNext iEnd Sub▲自动打印多工作表第一页返回Sub 自动打印多工作表第一页() Dim sh As IntegerDim xDim yDim syDim syzx = InputBox("请输入起始工作表名字:")sy = InputBox("请输入结束工作表名字:")y = Sheets(x).Indexsyz = Sheets(sy).IndexFor sh = y To syzSheets(sh).SelectSheets(sh).PrintOut from:=1, To:=1Next shEnd Sub▲查找A列文本循环插入分页符返回Sub 循环插入分页符()' Selection = Workbooks("临时表").Sheets("表2").Range("A1") 调用指定地址内容Dim i As LongDim times As Longtimes = Application.WorksheetFunction.CountIf(Sheet1.Range("a:a"), "分页")'times代表循环次数,执行前把times赋值即可(不可小于1,不可大于2147483647)For i = 1 To timesCall 插入分页符Next iEnd SubSub 插入分页符()Cells.Find(What:="分页", After:=ActiveCell, LookIn:=xlValues, LookAt:= _xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False) _.ActivateActiveWindow.SelectedSheets.HPageBreaks.AddBefore:=ActiveCellEnd SubSub 取消原分页()Cells.SelectActiveSheet.ResetAllPageBreaksEnd Sub▲将A列最后数据行以上的所有B列图片大小调整为所在单元大小返回Sub 将A列最后数据行以上的所有B列图片大小调整为所在单元大小()Dim Pic As Picture, i&i = [A65536].End(xlUp).RowFor Each Pic In Sheet1.PicturesIf Not Application.Intersect(Pic.TopLeftCell, Range("B1:B" & i)) Is Nothing ThenPic.Top = Pic.T opLeftCell.TopPic.Left = Pic.TopLeftCell.LeftPic.Height = Pic.TopLeftCell.HeightPic.Width = Pic.TopLeftCell.WidthEnd IfNextEnd Sub▲返回光标所在行数返回Sub 返回光标所在行数()x = ActiveCell.RowRange("A1") = xEnd Sub▲在A1返回当前选中单元格数量返回Sub 在A1返回当前选中单元格数量()[A1] = Selection.CountEnd Sub▲返回当前工作簿中工作表数量返回Sub 返回当前工作簿中工作表数量()t = Application.Sheets.CountMsgBox tEnd Sub▲返回光标选择区域的行数和列数返回Sub 返回光标选择区域的行数和列数()x = Selection.Rows.County = Selection.Columns.CountRange("A1") = xRange("A2") = yEnd Sub▲工作表中包含数据的最大行数返回Sub 包含数据的最大行数()n = Cells.Find("*", , , , 1, 2).RowMsgBox nEnd Sub▲返回A列数据的最大行数返回Sub 返回A列数据的最大行数() n = Range("a65536").End(xlUp).RowRange("B1") = nEnd Sub▲将所选区域文本插入新建文本框返回Sub 将所选区域文本插入新建文本框()For Each rag In Selectionn = n & rag.Value & Chr(10)NextActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizon tal, ActiveCell.Left +ActiveCell.Width, ActiveCell.T op + ActiveCell.Height, 250#, 100).SelectSelection.Characters.Text = "问题:" & nWith Selection.Characters(Start:=1, Length:=3).Font.Name = "黑体".FontStyle = "常规".Size = 12End WithEnd Sub▲批量插入地址批注返回Sub 批量插入地址批注()On Error Resume NextDim r As RangeIf Selection.Cells.Count > 0 ThenFor Each r In Selection/doc/4911298482.html,ment.Deleter.AddComment/doc/4911298482.html,ment.Visible = False /doc/4911298482.html,ment.Text Text:="本单元格:" & r.Address & " of " & Selection.AddressNextEnd IfEnd Sub▲批量插入统一批注返回Sub 批量插入统一批注()Dim r As Range, msg As Stringmsg = InputBox("请输入欲批量插入的批注", "提示", "随便输点什么吧")If Selection.Cells.Count > 0 ThenFor Each r In Selectionr.AddComment/doc/4911298482.html,ment.Visible = False /doc/4911298482.html,ment.TextText:=msgNextEnd IfEnd Sub▲以A1单元内容批量插入批注返回Sub 以A1单元内容批量插入批注()Dim r As RangeIf Selection.Cells.Count > 0 ThenFor Each r In Selectionr.AddComment/doc/4911298482.html,ment.Visible = False /doc/4911298482.html,ment.TextText:=[a1].T extNextEnd IfEnd Sub▲不连续区域插入当前文件名和表名及地址返回Sub 批量插入当前文件名和表名及地址()For Each mycell In Selectionmycell.FormulaR1C1 = "[" + /doc/4911298482.html, + "]" + /doc/4911298482.html, +"!" + mycell.AddressNextEnd Sub▲不连续区域录入当前单元地址返回Sub 区域录入当前单元地址() For Each mycell In Selectionmycell.FormulaR1C1 = mycell.AddressNextEnd Sub▲连续区域录入当前单元地址返回Sub 连续区域录入当前单元地址()Selection = "=ADDRESS(ROW(),COLUMN(),4,1)"Selection.CopySelection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _:=False, Transpose:=FalseEnd Sub▲返回当前单元地址返回Sub 返回当前单元地址()d = ActiveCell.Address[A1] = dEnd Sub▲不连续区域录入当前日期返回Sub 区域录入当前日期()Selection.FormulaR1C1 = Format(Now(), "yyyy-m-d")End Sub▲不连续区域录入当前数字日期返回Sub 区域录入当前数字日期() Selection.FormulaR1C1 = Format(Now(), "yyyymmdd")End Sub▲不连续区域录入当前日期和时间返回Sub 区域录入当前日期和时间()Selection.FormulaR1C1 = Format(Now(), "yyyy-m-d h:mm:ss")End Sub▲不连续区域录入对勾返回Sub 批量录入对勾()Selection.FormulaR1C1 = "√"End Sub▲不连续区域录入当前文件名返回Sub 批量录入当前文件名()Selection.FormulaR1C1 = /doc/4911298482.html,End Sub▲不连续区域添加文本返回Sub 批量添加文本()Dim s As RangeFor Each s In Selections = s & "文本内容"NextEnd Sub▲不连续区域插入文本返回Sub 批量插入文本()Dim s As RangeFor Each s In Selections = "文本内容" & sNextEnd Sub▲从指定位置向下同时录入多单元指定内容返回Sub 从指定位置向下同时录入多单元指定内容()Dim arrarr = Array("1", "2", "13", "25", "46", "12", "0", "20")[B2].Resize(8, 1) = Application.WorksheetFunction.Transpose(arr)End Sub▲按aa工作表A列的内容排列工作表标签顺序返回Sub 按aa工作表A列的内容排列工作表标签顺序()Dim I%, str1$I = 1Sheets("aa").SelectDo While Cells(I, 1).Value <> ""str1 = Trim(Cells(I, 1).Value)Sheets(str1).SelectSheets(str1).Move after:=Sheets(I)I = I + 1Sheets("aa").SelectLoopEnd Sub▲以A1单元文本作表名插入工作表返回Sub 以A1单元文本作表名插入工作表()Dim nm As Stringnm = [a1]Sheets.Add/doc/4911298482.html, = nmEnd Sub▲删除全部未选定工作表返回Sub 删除全部未选定工作表()Dim sht As Worksheet, n As Integer, iFlag As BooleanDim ShtName() As Stringn = ActiveWindow.SelectedSheets.CountReDim ShtName(1 To n)n = 1For Each sht In ActiveWindow.SelectedSheetsShtName(n) = /doc/4911298482.html,n = n + 1NextApplication.DisplayAlerts = FalseFor Each sht In SheetsiFlag = FalseFor i = 1 To n - 1If ShtName(i) = /doc/4911298482.html, TheniFlag = TrueExit ForEnd IfNextIf Not iFlag Then sht.DeleteNextApplication.DisplayAlerts = TrueEnd Sub▲工作表标签排序返回Sub 工作表标签排序()Dim i As Long, j As Long, nums As Long, msg As Longmsg = MsgBox("工作表按升序排列请选'是[Y]'. " & vbCrLf & vbCrLf & "工作表按降序排列请选 '否[N]'", vbYesNoCancel, "工作表排序")If msg = vbCancel Then Exit Subnums = Sheets.CountIf msg = vbYes Then 'Sort ascendingFor i = 1 To numsFor j = i To numsIf UCase(Sheets(j).Name) < UCase(Sheets(i).Name) ThenSheets(j).Move Before:=Sheets(i)End IfNext jNext iElse 'Sort descendingFor i = 1 To numsFor j = i To numsIf UCase(Sheets(j).Name) > UCase(Sheets(i).Name) ThenSheets(j).Move Before:=Sheets(i)End IfNext jNext iEnd IfEnd Sub▲定义指定工作表标签颜色返回Sub 定义指定工作表标签颜色() Sheets("Sheet1").T ab.ColorIndex = 46End Sub▲在目录表建立本工作簿中各表链接目录返回Sub 在目录表建立本工作簿中各表链接目录()Dim s%, Rng As RangeOn Error Resume NextSheets("目录").ActivateIf Err = 0 ThenSheets("目录").UsedRange.DeleteElseSheets.Add/doc/4911298482.html, = "目录" End If。

ExcelVBA——如何保护好您的VBA作品!!

ExcelVBA——如何保护好您的VBA作品!!

Excel VBA——如何保护好您的VBA作品!!当你辛辛苦苦开发出的程序作品后,是不是想过怎样来保护好程序的源代码呢!,保护好程序源码,在大多会员来看都是非常关心的问题.遗憾的是,Excel不像其他的开发软件一样,在加密上很容易被各种密码破解软件破译.尽管这样,我们也应尽可能来保护Excel工作簿和VBA源码。

一、为VBA工程设置密码限制别人查看VBA源代码的一个简单办法就是设置VBA工程密码或设置工程不可查看。

方法如下:1、按Alt+F11,在VBE窗口在,单击“工具—VBAproject属性”,打开“VBAproject属性”对话框。

2、单击“VBAproject属性”对话框中的“保护”选项卡。

如图1所示,选中“查看时锁定工程”复选框。

在“密码”框中输入保护密码,在“确认密码”框中再输入一次密码,然后单击“确定”,关闭“VBAproject属性”对话框。

3、保存并关闭工作簿。

当你再打开该工作簿后,打开VBE窗口时,就不再显示VBA的窗体、模块等对象,看不到VBA源代码了。

★提示:这种密码保护很容易破解。

★二、设置工程不可查看限制别人查看VBA源代码的方法就是设置“工程不可查看”。

方法如下:共享级锁定:先对Excel文件的“VBAProject工程”进行密码保护(参考“为VBA工程设置密码”)。

再打开要保护的文件,单击“工具_保护_保护并共享工作簿_以追踪修订方式共享”,如图2所示,输入保护密码再保存文件。

当你得新打开“VBAProject”工程属性时,就将会提示:“工程不可看!”破坏型锁定:用16进制编辑工具(如WinHex等)打开Excel文件,查找定位以下地方:ID="{00000000-0000-0000-0000-000000000000}"(注:实际显示不会全部为0),此时,你只要将其中的字节随便修改一下即可。

★提示:在修改前最好做好你的文档备份。

当然这种方法也可破解的,因为加密总是相对。

VBA中的文件加密和解密方法详解

VBA中的文件加密和解密方法详解

VBA中的文件加密和解密方法详解VBA(Visual Basic for Applications)是一种用于自动化任务和定制化Microsoft Office等软件的编程语言。

在VBA中,我们经常需要处理和保护敏感数据和文件,因此文件加密和解密是一项非常重要的任务。

本文将详细介绍VBA中的文件加密和解密方法,帮助读者保护重要数据。

文件加密是将文件内容通过特定算法进行转换,使其变得不可读或不可理解,只有经过解密操作才能恢复原始内容。

在VBA中,我们可以使用各种加密算法来对文件进行加密。

下面是一些常用的加密算法:1. 对称加密算法:对称加密算法使用相同的密钥加密和解密文件。

VBA中常用的对称加密算法有DES(Data Encryption Standard)和AES(Advanced Encryption Standard)。

这些算法使用密钥对文件内容进行转换,使其变得不可读。

对称加密算法的优点是加密解密速度快,但密钥的安全性需要额外关注。

2. 非对称加密算法:非对称加密算法使用一对密钥,公钥用于加密文件内容,私钥用于解密文件内容。

VBA中常用的非对称加密算法有RSA(Rivest-Shamir-Adleman)。

非对称加密算法的优点是密钥的安全性相对较高,但加密解密过程较为耗时。

3. 混合加密算法:混合加密算法结合了对称加密算法和非对称加密算法的优势。

在文件加密过程中,混合加密算法先使用非对称加密算法将对称密钥进行加密,再使用对称加密算法对文件内容进行加密。

这样既保证了密钥的安全性,也提高了加密解密的速度。

在VBA中,使用文件加密算法可以采取以下步骤:1. 选择合适的加密算法并生成一个密钥。

2. 打开需要加密的文件,并读取文件的内容。

3. 使用密钥对文件内容进行加密,并将加密结果保存到一个新文件中。

4. 关闭原始文件和新文件。

下面是一个简单的示例代码,演示了在VBA中如何使用AES算法对文件进行加密:```VBASub EncryptFile(fileToEncrypt As String, encryptionKey As String)Dim objStream As ObjectSet objStream = CreateObject("ADODB.Stream")objStream.Type = 1 ' binaryobjStream.OpenobjStream.LoadFromFile fileToEncryptobjStream.Position = 0objStream.Type = 1 ' binaryobjStream.Write (encryptionKey)objStream.Position = 0objStream.Type = 2 ' text' Perform encryptionobjStream.SaveToFile "EncryptedFile.txt", 2 ' overwrite existing fileobjStream.CloseSet objStream = NothingEnd Sub```在上述示例代码中,`EncryptFile`方法接受两个参数,`fileToEncrypt`表示需要加密的文件路径,`encryptionKey`表示用于加密的密钥。

VBA技巧19 录入数据后单元格自动保护

VBA技巧19   录入数据后单元格自动保护

技巧1 录入数据后单元格自动保护下面的代码可以使用户在单元格录入数据后自动对已录入数据单元格进行保护,防止修改数据。

#001 Private Sub Worksheet_SelectionChange(ByVal Target As Range)#002 On Error Resume Next#003 Sheet1.Unprotect Password:="12345"#004 If Target.Value <> "" Then#005 Target.Locked = True#006 Sheet1.Protect Password:="12345"#007 End If#008 End Sub代码解析:工作表的SelectionChange事件,在单元格录入数据后自动对已录入数据单元格进行保护。

第3行代码使用Unprotect方法取消工作表的保护。

应用于Worksheet 对象的Unprotect方法取消工作表的保护,如果工作表不是受保护的,则此方法不起作用,语法如下:expression.Unprotect(Password)参数expression是必需的,该表达式返回一个Worksheet 对象。

参数Password是可选的,指定用于解除工作表的保护的密码,此密码是区分大小写的。

第4、5行代码单元格录入数据后将Locked属性设置为True。

Locked属性应用于Range 对象时,如果Range对象被锁定,则该值为True,当工作表有保护时Range对象不可被修改。

第6行代码使用Protect方法保护工作表。

应用于Worksheet对象的Protect方法保护工作表使其不至被修改,语法如下:expression.Protect(Password, DrawingObjects, Contents, Scenarios, UserInterfaceOnly, AllowFormattingCells, AllowFormattingColumns,AllowFormattingRows, AllowInsertingColumns, AllowInsertingRows, AllowInsertingHyperlinks, AllowDeletingColumns, AllowDeletingRows, AllowSorting, AllowFiltering, AllowUsingPivotTables)其中参数expression是必需的,该表达式返回一个Worksheet对象。

VBA 中的文件加密与解密技巧

VBA 中的文件加密与解密技巧

VBA 中的文件加密与解密技巧在日常办公中,我们经常需要处理敏感或机密的文件。

为了确保文件的安全性,文件加密和解密是重要的技巧。

在 VBA(Visual Basic for Applications)中,我们可以利用一些加密算法和函数来加密和解密文件。

本文将介绍 VBA 中的文件加密与解密技巧,帮助您保护文件的安全。

1. 加密文件在 VBA 中,我们可以使用 AES(Advanced Encryption Standard)算法对文件进行加密。

AES 是一种安全且常用的对称加密算法,能够对数据进行高效的加密和解密。

下面是一个示例代码,演示如何使用 AES 算法对文件进行加密:```vbaSub EncryptFile(filePath As String, password As String)Dim fso As ObjectDim tsIn As ObjectDim tsOut As ObjectDim dataIn() As ByteDim dataEncrypted() As ByteDim aes As ObjectSet fso = CreateObject("Scripting.FileSystemObject")Set tsIn = fso.OpenTextFile(filePath, 1)dataIn = tsIn.ReadAlltsIn.CloseSet aes =CreateObject("System.Security.Cryptography.AesManaged")aes.GenerateKeyaes.GenerateIVaes.Mode = 1 ' CipherMode.CBCaes.Padding = 2 ' PaddingMode.PKCS7dataEncrypted = aes.CreateEncryptor.TransformFinalBlock( _ dataIn, 0, UBound(dataIn) + 1)Set tsOut = fso.OpenTextFile(filePath, 2)tsOut.Write StrConv(dataEncrypted, vbUnicode)tsOut.CloseMsgBox "文件已加密。

excel工作表保护破解

excel工作表保护破解

excel工作表保护破解Excel工作表保护破解。

在日常工作中,我们经常会使用Excel表格来存储和处理数据。

为了保护数据的安全性,我们经常会对Excel工作表进行保护。

但有时候我们会遇到需要修改或编辑被保护的工作表的情况,这就需要我们学会如何破解Excel工作表的保护。

破解Excel工作表保护并不是一件复杂的事情,下面我将向大家介绍几种常用的方法。

第一种方法是通过VBA代码来破解Excel工作表保护。

首先,我们需要按下Alt + F11组合键,打开VBA编辑器。

然后在新建的模块中输入以下代码:Sub UnprotectSheet()。

Dim ws As Worksheet。

For Each ws In ThisWorkbook.Worksheets。

ws.Unprotect Password:="yourpassword"Next ws。

End Sub。

在上面的代码中,yourpassword是你设置的工作表保护密码。

执行完上述代码后,所有工作表的保护都会被解除。

第二种方法是通过在线工具来破解Excel工作表保护。

有一些在线工具可以帮助我们破解Excel工作表的保护,例如LostMyPass、Password-Find等。

我们只需要上传被保护的Excel文件,这些工具就可以帮我们破解保护密码。

第三种方法是通过修改Excel文件的扩展名来破解Excel工作表保护。

我们可以将Excel文件的扩展名修改为.zip,然后解压缩这个压缩文件。

在解压缩后的文件夹中,我们可以找到xl目录,里面包含了workbook.xml和worksheets文件夹。

我们可以用记事本打开workbook.xml文件,找到<workbookProtection>节点,将其删除或者修改为<workbookProtection lockStructure="0" lockWindows="0"/>,然后保存文件。

excelvba解读(75):保护工作表protect方法

excelvba解读(75):保护工作表protect方法
Excel VBA解读(中,我们可以保护工作表,避免用户对工作表进行不必要的修改。要想保护工作表,可以单击“审阅”选项卡中的“保护工作表”按钮,如下图所示。在“保护工作表”对话框中输入密码(当然也可以为空,即不设置密码),进行相应的选取设置后,即对工作表设置了保护。此时,用户不能随意在工作表中编辑单元格。 Excel宏录制器为上述操作录制的代码为:Sub Macro1()'' Macro1 Macro' 由完美Excel录制 ' ActiveSheet.ProtectDrawingObjects:=True, Contents:=True, Scenarios:=TrueEnd Sub 可以看出,Excel VBA使用Protect方法保护工作表,虽然在操作中我们为保护工作表设置了密码,但Excel并没有为我们录制设置的密码项。然而,我们可以方便地使用Protect方法通过代码为保护工作表设置密码。 Protect方法工作表对象的Protect方法用于保护工作表,使之不能够被修改。Protect方法有很多参数,多达16个,但均为可选参数,我们可以根据需要有选择地使用这些参数以达到目的,例如,虽然对工作表进行了保护,但仍允许用户对限定的区域进行修改。 示例1:使用Protect方法保护工作表下面的代码保护当前工作表,并设置密码为“test”。Sub ProtectActivesheet() If NotActiveSheet.ProtectContents ThenActiveSheet.ProtectPassword:='test', _ DrawingObjects:=True, _ Contents:=True, _ Scenarios:=True End IfEnd Sub说明:参数Password用来设置密码,区分大小写。如果忽略该参数,那么在取消工作表保护时不需要密码。参数DrawingObject、Contents、Scenarios分别设置是否保护工作表中的形状、内容和方案。它们的默认值都是True。ProtectContents属性返回一个Boolean值,表明工作表是否已保护。上述代码运行时,如果工作表已受保护,则不执行任何操作。 Unprotect方法要想通过代码修改受保护的工作表,必须先取消工作表保护,才能进行修改。Unprotect方法用于取消工作表保护。 示例2:使用Unprotect方法取消工作表保护下面的代码取消对设置了密码“test”的当前工作表的保护。Sub UnprotectActivesheet() IfActiveSheet.ProtectContents Then ActiveSheet.UnprotectPassword:='test' End IfEnd Sub说明:Unprotect方法只有一个可选参数Password,用来提供保护工作表时所设置的密码。如果保护工作表时没有设置密码,可以忽略参数Password。如果提供的密码不正确,那么Excel会弹出一个错误提示框,如下图所示。 示例3:设置与取消工作表保护的通用代码下面是Steven M.Hansen编写的一段代码,用于设置与取消工作表保护:说明:这段代码可以沿用到自已的代码中,用于需要在代码运行过程中设置工作表保护,或者需要修改受保护工作表中的内容而临时取消工作表保护的情形。代码中使用了错误处理语句,以及带参数的函数过程。在后续的文章中会详细讲解这些技术。本文属原创文章,转载请联系我(****************)或者注明出处。

用VB.NET(Visual

用VB.NET(Visual

⽤(Visual Basic 2010)封装EXCEL VBA为DLL_COM。

为了保护⾃⼰⾟⾟苦苦编写的Excel VBA代码不被盗⽤,我们需要对Excel VBA代码进⾏加密。

通常的做法是利⽤给⼯程设置密码的⽅法实现加密,对于这类加密⽅法,由于存在安全度低、易破解等问题,因此往往起不到应有的效果。

通过将Excel VBA代码封装成DLL动态链接库,可有效防⽌代码被⾮法查看。

在百度⾥搜索“封装EXCEL VBA”关键字,有很多封装VBA的教程,但99%是利⽤VB6(Microsoft Visual Basic 6.0)来封装,主要原因是VB6的操作界⾯及语法与Excel的VBA具有极⾼的相似度。

2002年,随着的引⼊,⼤部分⼈都放弃使⽤VB⽽选择,VB6终将被淘汰,因此我们必须与时俱进,学习⽤Microsoft Visual Basic 2010封装VBA。

我们可以在VS⾥建⽴com类项⽬,把NET类库的⼀些⽅法重新包装后暴露给VBA使⽤。

案例:在⼯作表的C1单元格得出A1单元格+B1单元格的值。

设计的VBA代码:1Sub Test()2On Error Resume Next3 Range("C1").Value = Range("A1").Value + Range("B1").Value4End Sub⼀、使⽤Microsoft Visual Basic 2010制作DLL⽂件⼯具及原料:1、Microsoft Office Excel 20032、Microsoft Visual Studio 20103、Windows XP 32位操作系统操作步骤:1、启动Microsoft Visual Studio 2010,在起始页界⾯点击“新建项⽬”,如图1所⽰。

图12、在弹出的“新建项⽬”对话框选择“类库”,修改名称为“VBADLL”,点击确定,如图2所⽰。

如何在VBA中进行文件加密和解密处理

如何在VBA中进行文件加密和解密处理

如何在VBA中进行文件加密和解密处理VBA(Visual Basic for Applications)是一种广泛使用的编程语言,常用于微软的Office套件中,如Excel、Word等。

在VBA中,我们可以利用一些加密算法和方法对文件进行加密和解密处理。

本文将详细介绍如何在VBA中进行文件加密和解密处理的方法。

一、加密文件处理文件加密是指通过某种算法将文件内容转换成不可读的形式,以保护文件的安全性。

在VBA中进行文件加密处理可以采用以下步骤:1. 打开待加密的文件在VBA中,我们可以使用`FileSystemObject`对象的`OpenTextFile`方法来打开文件。

首先,我们需要创建一个`FileSystemObject`对象,并使用该对象的`OpenTextFile`方法打开文件。

以下是一个示例代码:```vbaDim fso As ObjectSet fso = CreateObject("Scripting.FileSystemObject")Dim inputFile As ObjectSet inputFile = fso.OpenTextFile("C:\input.txt", 1)```以上代码中,`CreateObject("Scripting.FileSystemObject")`用于创建`FileSystemObject`对象。

`OpenTextFile`方法的第一个参数是要打开的文件路径,第二个参数1表示以只读模式打开文件。

2. 读取文件内容一旦文件打开,我们可以使用`ReadAll`方法读取文件的内容。

以下是一个示例代码:```vbaDim fileContent As StringfileContent = inputFile.ReadAll```3. 加密文件内容加密文件内容的方法取决于所选择的加密算法。

VBA技巧17 双击被保护单元格时不显示提示消息框

VBA技巧17   双击被保护单元格时不显示提示消息框

技巧1 双击被保护单元格时不显示提示消息框
当用户使用鼠标左键双击被保护工作表中锁定的单元格区域时,系统将显示如图1-1所示的消息框。

图1-1 系统提示消息框
如果不希望显示该消息框,可以在工作表Worksheet_BeforeDoubleClick事件中进行设置,如下面的代码所示。

#001 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
#002 If Target.Locked = True Then
#003 MsgBox "此单元格已保护,不能编辑!"
#004 Cancel = True
#005 End If
#006 End Sub
代码解析:
当用户使用鼠标左键双击工作表单元格时,触发Worksheet_BeforeDoubleClick事件。

该事件中的Target参数代表用户双击鼠标左键的单元格区域。

参数Cancel设置是否取消该操作。

如果将参数Cancel设置为True,将不进行默认的双击操作。

第2行代码中判断用户双击鼠标左键的单元格区域是否已锁定(Range对象的Locked 属性返回或设置Range对象是否锁定),如果单元格区域已锁定,则设置参数Cancel设置为True,不进行默认的双击操作,因而不再显示图1-1所示的消息框,只显示一个自定义的提示信息,如图1-2所示。

图1-2 自定义提示信息。

vbaprotect解密

vbaprotect解密

如果出现vba加密,可用此代码进行破解Sub MoveProtect()Dim FileName As StringFileName = Application.GetOpenFilename("Excel文件(*.xls & *.xla),*.xls;*.xla", , "VBA破解") If FileName = CStr(False) ThenExit SubElseVBAPassword FileName, FalseEnd IfEnd Sub'设置VBA编码保护Sub SetProtect()Dim FileName As StringFileName = Application.GetOpenFilename("Excel文件(*.xls & *.xla),*.xls;*.xla", , "VBA破解") If FileName = CStr(False) ThenExit SubElseVBAPassword FileName, TrueEnd IfEnd SubPrivate Function VBAPassword(FileName As String, Optional Protect As Boolean = False)If Dir(FileName) = "" ThenExit FunctionElseFileCopy FileName, FileName & ".bak"End IfDim GetData As String * 5Open FileName For Binary As #1Dim CMGs As LongDim DPBo As LongFor i = 1 To LOF(1)Get #1, i, GetDataIf GetData = "CMG=""" Then CMGs = iIf GetData = "[Host" Then DPBo = i - 2: Exit ForNextIf CMGs = 0 ThenMsgBox "请先对VBA编码设置一个保护密码...", 32, "提示"Exit FunctionEnd IfIf Protect = False ThenDim St As String * 2Dim s20 As String * 1'取得一个0D0A十六进制字串Get #1, CMGs - 2, St'取得一个20十六制字串Get #1, DPBo + 16, s20'替换加密部份机码For i = CMGs To DPBo Step 2Put #1, i, StNext'加入不配对符号If (DPBo - CMGs) Mod 2 <> 0 ThenPut #1, DPBo + 1, s20End IfMsgBox "文件解密成功......", 32, "提示"ElseDim MMs As String * 5MMs = "DPB="""Put #1, CMGs, MMsMsgBox "对文件特殊加密成功......", 32, "提示" End IfClose #1End FunctionVBA破解") a", , "VBA破解")。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

ct属性”,
在显示的


189‑1所示


VBAProje
ct—工程属
性”对话
框的“保
护”选项
卡中选中
“查看时
锁定工程
”复选
框,并在
“密码”
文本框和
“确认密
码”文本
框中输入
密码后单
击“确定
ห้องสมุดไป่ตู้
”按钮关
闭该对话
框,保存
并关闭文
件。
图 189‑1
“ VBAProjec t—工程属 性”对话框
密码保护
完成后,
技巧1
保护
VBA 代

VBA 项 目 的源代码 是完全开 放的,如 果不希望 其他人看 到源代 码,可以 使用以下 两种方法 将代码保 护起来。 1-1 设 置 工程密码 设 置 VBA 工程的密 码,只有 在输入正 确密码后 才能看到 源代码。
在 VBE 窗
口中单击
菜单“工
具”→“
VBAProje
当试图打
开该工程
时会显示

VBAProje
ct密码”的
对话框,


189‑2所示
。只有在
输入正确
的密码后
才能看到
该工程的
源代码。
图 189‑2
密码输入对 话框
相关文档
最新文档