vb代码控制 Excel锁定单元格

简介:
Sub Protect([Password], [DrawingObjects], [Contents], [Scenarios], [UserInterfaceOnly], [AllowFormattingCells], [AllowFormattingColumns], [AllowFormattingRows], [AllowInsertingColumns], [AllowInsertingRows], [AllowInsertingHyperlinks], [AllowDeletingColumns], [AllowDeletingRows], [AllowSorting], [AllowFiltering], [AllowUsingPivotTables])
    Member of Excel.Worksheet

如下代码:
Public Function SaveToExcel() As Boolean
On Error GoTo SaveToExcelErr
   Dim fs As Scripting.FileSystemObject, f As File
   Dim checkNow As Boolean
   Dim objWorkSheet As Worksheet
   Dim objworkBook As Workbook
   Dim objExcel As Excel.Application
   Dim intI As Integer
   Dim rang As Range
   Dim arrTemp() As String
   Dim intRow As Integer
   Dim intX As Integer
   Dim filename As String
    Set objExcel = New Excel.Application       
    Set objworkBook = objExcel.Workbooks.add    
    Set objWorkSheet = objworkBook.Worksheets.item(1)    
   'Write Header
   For intRow = 1 To 3
      'intRow = 65
       'intX = 1
       arrTemp = Split(arrTagExcel(intRow - 1), "|")
       For intX = LBound(arrTemp) + 1 To UBound(arrTemp) + 1
                    'With objWorkSheet.Range(Chr(intRow) & CStr(intX + 1))
                   With objWorkSheet.Cells(intRow, intX)
                   If intRow = 1 Then .Font.size = 13
                   If intRow = 3 Then .Interior.Pattern = xlPatternGray25
                   .Font.Bold = True
                   .value = arrTemp(intX - 1)
                   .ColumnWidth = Len(arrTemp(intX - 1)) + 1.5
                   .Locked = True
                  End With                 
       Next
    Next
    'Write Content
    'rows
    For intRow = 4 To UBound(arrTagExcel)       
        arrTemp = Split(arrTagExcel(intRow - 1), "|")
       For intX = LBound(arrTemp) + 1 To UBound(arrTemp) + 1           
                  'objWorkSheet.Range(Chr(intRow) & CStr(intX + 1)).NumberFormatLocal = "@" ' .Select.Activate = arrtemp(intI)
'                    If intX = UBound(arrtemp) + 1 Then
'                       Debug.Print "ok"
'                    End If
                    objWorkSheet.Cells(intRow, intX) = arrTemp(intX - 1)                 
                   'objWorkSheet.Range(intRow, intX + 1).Locked = False
                   objWorkSheet.Cells(intRow, intX).Locked = False
                   objWorkSheet.Cells(intRow, intX).NumberFormatLocal = "@"
                   'objWorkSheet.Cells(intRow, intX)                   
       Next
       'intX = intX + 1
       objWorkSheet.Cells(intRow, intX - 1).Font.Color = vbRed
    Next
      objWorkSheet.Protect "", False, True, False, False, True, True, True, False, False, False, False, True, False, False, True 
      'objWorkSheet.Protect

    lblstatus = "Finished!"    
       Set fs = New Scripting.FileSystemObject
        If fs.FileExists(txtFileName) Then
               If MsgBox("Excel file already exists,Do you want to replace it.", vbOKCancel + vbQuestion, "Finish") = vbOK Then
                     fs.DeleteFile txtFileName, True
               Else
                     With CommonDialog1
                        .DialogTitle = "Please choose another directory..."
                        .ShowSave
                        If (.filename <> "") Then filename = .filename
                        If InStr(filename, ".xls") > 0 Then filename = Left(filename, InStr(filename, ".xls") - 1)
                          txtFileName.Text = filename + ".xls"
                        End With                     
               End If
        End If
        Set f = Nothing
        Set fs = Nothing        
        objworkBook.SaveAs txtFileName
        objExcel.Visible = True
        SaveToExcel = True
    Exit Function
SaveToExcelErr:
'   If Not objExcel Is Nothing Then
'     objExcel.Workbooks.Close
'     objExcel.Quit
'     Set objExcel = Nothing
'   End If
If Err.number = 70 Then
   Set itmX = lvwRst.ListItems.add(, , Err.Source + ":Save Permission Denied!The excel file has been opened already.", , 2)
Else
   Set itmX = lvwRst.ListItems.add(, , Err.Source + ":" + Err.Description, , 2)
End If
    
    
End Function


如果为     objWorkSheet.Protect "", False, True, False, False, True, True, True, False, False, False, False, True, False, False, True 
则结果入 附件1 :
如果为      'objWorkSheet.Protect
则结果如 附件2:


Sub Protect([Password], [DrawingObjects], [Contents], [Scenarios], [UserInterfaceOnly], [AllowFormattingCells], [AllowFormattingColumns], [AllowFormattingRows], [AllowInsertingColumns], [AllowInsertingRows], [AllowInsertingHyperlinks], [AllowDeletingColumns], [AllowDeletingRows], [AllowSorting], [AllowFiltering], [AllowUsingPivotTables])
中每个参数什么意思真的还不清楚!
[Password]                                :设置保护密码
[DrawingObjects]                       :是否允许修改excel sheet上面的图形之类的物件
[Contents]                                 :是否允许修改内容
[Scenarios]                               :?
[UserInterfaceOnly]                    : ?
[AllowFormattingCells]               :是否允许Formatting单元格(就是是否允许对单元格进行拖拉了)
[AllowFormattingColumns]         :是否允许Formatting列
[AllowFormattingRows]              :是否允许Formatting行
[AllowInsertingColumns]            :是否允许插入列
[AllowInsertingRows]                 :是否允许插入行
[AllowInsertingHyperlinks]          :是否允许超链接
[AllowDeletingColumns]             :是否允许删除列
[AllowDeletingRows]                  :是否允许删除行
[AllowSorting]                           :是否允许排序
[AllowFiltering]                          :是否允许过滤
[AllowUsingPivotTables]             :?



http://www.microsoft.com/china/msdn/library/office/office/UndstaExcelObjModNETDev.mspx?mfr=true 中得知:

设置 Password 参数来指定一个区分大小写的字符串,这是取消保护工作表所需要的。如果您不指定这个参数,任何人都可以取消保护工作表。
将 Contents 参数设置为 True 来保护工作表的内容(单元格)。默认值为 True,您可能永远不会改变它。 
将 DrawingObjects 参数设置为 True 来保护工作表的形状。默认值为 False。 
将 Scenarios 参数设置为 True 来保护工作表中的方案。默认值为 True。
将 UserInterfaceOnly 参数设置为 True 可以允许通过代码修改,但是不允许通过用户界面修改。默认值为 False,这意味着通过代码和用户界面项都不可以修改受保护的工作表。这个属性设置只适用于当前会话。如果您想让代码可以在任何会话中都可以操作工作表,那么您需要每次工作簿打开的时候添加设置这个属性的代码。

AllowFormattingCells 参数、AllowFormattingColumns 参数和前面方法语法的完整列表中所示的其余参数允许特定的格式化功能,对应于对话框中(如图 12 所示)的选项。默认情况下,所有这些属性都是 False。 

本文转自kenty博客园博客,原文链接http://www.cnblogs.com/kentyshang/archive/2006/05/31/414054.html如需转载请自行联系原作者


kenty

相关文章
|
5月前
|
XML 物联网 API
服务端和客户端 RESTful 接口上传 Excel 的 Python 代码
本文作者木头左是物联网工程师,分享如何使用 Python 和 Flask-RESTful 构建一个简单的 RESTful API,实现文件上传功能,特别支持Excel文件。通过安装Flask和Flask-RESTful库,创建Flask应用,实现文件上传接口,并将其添加到API。该方法具有简单易用、灵活、可扩展及社区支持等优点。
服务端和客户端 RESTful 接口上传 Excel 的 Python 代码
Excel中用宏VBA实现GBT 4761-2008 家庭关系代码转换
Excel中用宏VBA实现GBT 4761-2008 家庭关系代码转换
|
1月前
|
Java Apache
Apache POI java对excel表格进行操作(读、写) 有代码!!!
文章提供了使用Apache POI库在Java中创建和读取Excel文件的详细代码示例,包括写入数据到Excel和从Excel读取数据的方法。
34 0
|
3月前
|
开发工具 开发者
Excel 2016 VBA 提取单元格的中文字符
Excel 2016 VBA 提取单元格的中文字符
29 1
|
3月前
|
C# 开发者 Windows
WPF遇上Office:一场关于Word与Excel自动化操作的技术盛宴,从环境搭建到代码实战,看WPF如何玩转文档处理的那些事儿
【8月更文挑战第31天】Windows Presentation Foundation (WPF) 是 .NET Framework 的重要组件,以其强大的图形界面和灵活的数据绑定功能著称。本文通过具体示例代码,介绍如何在 WPF 应用中实现 Word 和 Excel 文档的自动化操作,包括文档的读取、编辑和保存等。首先创建 WPF 项目并设计用户界面,然后在 `MainWindow.xaml.cs` 中编写逻辑代码,利用 `Microsoft.Office.Interop` 命名空间实现 Office 文档的自动化处理。文章还提供了注意事项,帮助开发者避免常见问题。
224 0
|
3月前
|
SQL
SQL SERVER 查询表结构,导出到Excel 生成代码用
SQL SERVER 查询表结构,导出到Excel 生成代码用
42 0
|
4月前
|
数据格式 Python
Python代码示例,读取excel表格,将行数据转为列数据。(10)
【7月更文挑战第10天】Python代码示例,读取excel表格,将行数据转为列数据。
148 2
Excel如何使用VBA操作引用其它工作簿中的单元格
Excel引用其它工作簿中的单元格的值及使用VBA操作
|
4月前
Excel 下拉选择列表的单元格
Excel 下拉选择列表的单元格
30 0
|
5月前
|
Python
【代码】Python实现Excel数据合并
【代码】Python实现Excel数据合并