Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 在受保护的共享Excel工作簿中打开字段_Vba_Excel_Excel 2010 - Fatal编程技术网

Vba 在受保护的共享Excel工作簿中打开字段

Vba 在受保护的共享Excel工作簿中打开字段,vba,excel,excel-2010,Vba,Excel,Excel 2010,我有一个共享的、受保护的工作簿,它有一个打开搜索表单的按钮。这个表单上有两个字段,txtYear和cbxRegion,我需要启用它们。每当我尝试打开字段时,它都会一直工作,直到我退出Excel 我尝试过取消工作簿的保护,取消共享工作簿,并注释掉VBA中的任何引用,以重新保护表单。尽管如此,即使编辑过的VBA也会恢复到原始版本 这是我需要启用的表单的代码部分。如蒙协助,将不胜感激。我正在使用Excel 2010 Private Sub UserForm_Initialize() Dim strD

我有一个共享的、受保护的工作簿,它有一个打开搜索表单的按钮。这个表单上有两个字段,txtYear和cbxRegion,我需要启用它们。每当我尝试打开字段时,它都会一直工作,直到我退出Excel

我尝试过取消工作簿的保护,取消共享工作簿,并注释掉VBA中的任何引用,以重新保护表单。尽管如此,即使编辑过的VBA也会恢复到原始版本

这是我需要启用的表单的代码部分。如蒙协助,将不胜感激。我正在使用Excel 2010

Private Sub UserForm_Initialize()

Dim strDb As String
Dim rs As ADODB.Recordset
Dim cn As ADODB.Connection
Dim row As Integer
Dim AccessVersionID As String

cbxRegion.Value = Worksheets("Parameters").Cells(5, 14)
Me.txtYear = Worksheets("Parameters").Cells(4, 7)
Me.chkBoth = Worksheets("Parameters").Cells(9, 2)
Me.chkConsultant = Worksheets("Parameters").Cells(7, 2)
Me.chkInHouse = Worksheets("Parameters").Cells(8, 2)
'Set region values
'Open connection
'Select Case SysCmd(acSysCmdAccessVer)
'Case 11: AccessVersionID = "2003"
'End Select

'If AccessVersionID = "2003" Then
'    strDb = Worksheets("Parameters").Cells(17, 2).Value 'This will reference the path
'Else
    strDb = Worksheets("Parameters").Cells(18, 2).Value
'End If

Set cn = New ADODB.Connection
cn.Open "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & strDb & ";"
Set rs = New ADODB.Recordset

'Get recordset
With rs
    Set .ActiveConnection = cn
    .Open "Select * From LookupRegion"
    .Requery
End With

'Add regions
row = 0
With rs
    .MoveFirst
    Do Until .EOF
        cbxRegion.AddItem ![region]
        cbxRegion.list(row, 1) = ![RegionName]
        row = row + 1
        .MoveNext
    Loop
End With

'Close the recordset
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing

End Sub

就我而言,对于共享工作簿,任何人都能给你的最好建议是:不要使用它们

共享工作簿不可能排除故障。他们的反常行为无法纠正。他们不遵循任何逻辑。一旦共享工作簿开始出现异常行为,您就进入了不可避免的结束阶段。没有办法解决它。这种行为不一定是可复制的

如果需要同时对数据集进行多用户写入访问,则Excel是错误的工具。使用数据库


不要使用共享工作簿

我设法让它工作起来了。为此,我:

  • 取消共享工作簿
  • 取消工作簿的保护
  • 保存、关闭并重新打开工作簿,以确保设置保持不变
  • 启用字段
  • 保存、关闭并重新打开工作簿,以确保设置保持不变
  • 保护工作簿
  • 共享工作簿(根据我收到的规范要求,我不想共享它,但这并不是我的要求)
  • 保存、关闭并重新打开工作簿,以确保设置保持不变

现在它完全按照我的需要工作

虽然我很感激你的建议,但这并没有让我更接近解决问题的方法,因为即使在我取消共享工作簿之后,我仍然有这个问题。你似乎不明白。无法对显示任何类型问题的共享工作簿进行故障排除。这是主要问题,也是不使用共享工作簿的原因。您的文件已损坏。而且它将继续腐败,不管你现在是否取消共享它。你将无法修复它。修复数据并构建新的解决方案。如果您从这次经历中学到了一些东西,那么您可能更愿意构建一个不涉及共享工作簿的解决方案。事实上,我很容易就解决了这个问题。它只是必须按照特定的顺序来完成,现在它工作得非常完美,并且做了我需要它做的事情。