Excel 数据验证和命名范围
我有一个通过Access VBA生成的电子表格。我填充从Access到用于数据验证的单元格范围。范围在那里并命名,这是通过使用电子表格左上角的框来检查的。 当我尝试验证时,会收到消息“找不到您指定的命名范围”。如果现在使用Ctrl F3,则可以删除该范围。现在我使用完全相同的范围,在左上角的弓中键入完全相同的标题,然后一切正常。据我所知,我在整个过程中使用的标准完全相同。有人有什么想法吗 在第(5)页中为=间接函数“写入”常量 “与保罗的电话交谈。现在,这些将来自表 "_______________________________________________________________Excel 数据验证和命名范围,excel,vba,Excel,Vba,我有一个通过Access VBA生成的电子表格。我填充从Access到用于数据验证的单元格范围。范围在那里并命名,这是通过使用电子表格左上角的框来检查的。 当我尝试验证时,会收到消息“找不到您指定的命名范围”。如果现在使用Ctrl F3,则可以删除该范围。现在我使用完全相同的范围,在左上角的弓中键入完全相同的标题,然后一切正常。据我所知,我在整个过程中使用的标准完全相同。有人有什么想法吗 在第(5)页中为=间接函数“写入”常量 “与保罗的电话交谈。现在,这些将来自表 "_____________
Dim CL(1 To 6) As Integer ' This is to count "filled rows" when spreadsheet is filled
Dim Header(1 To 6) As String
Dim AddNameFormula As String
Header(1) = "CostType"
Header(2) = "SoftwareCosts"
Header(3) = "HardwareCosts"
Header(4) = "Expenses"
Header(5) = "Travel"
Header(6) = "Building"
NRrows = RSNonResourceCosts.RecordCount ' Number of Rows in Non Resource Table
NRcols = RSNonResourceCosts.Fields.Count ' Number of Fields in NonResource Table
RSNonResourceCosts.MoveFirst
For R = 1 To NRrows
If (RSNonResourceCosts![CostType]) <> "" Then
CL(1) = CL(1) + 1
WKS.Cells(199 + R, 1) = (RSNonResourceCosts![CostType])
End If
If (RSNonResourceCosts![SoftwareCosts]) <> "" Then
CL(2) = CL(2) + 1
WKS.Cells(199 + R, 2) = (RSNonResourceCosts![SoftwareCosts])
End If
If (RSNonResourceCosts![HardwareCosts]) <> "" Then
CL(3) = CL(3) + 1
WKS.Cells(199 + R, 3) = (RSNonResourceCosts![HardwareCosts])
End If
If (RSNonResourceCosts![Expenses]) <> "" Then
CL(4) = CL(4) + 1
WKS.Cells(199 + R, 4) = (RSNonResourceCosts![Expenses])
End If
If (RSNonResourceCosts![Travel]) <> "" Then
CL(5) = CL(5) + 1
WKS.Cells(199 + R, 5) = (RSNonResourceCosts![Travel])
End If
If (RSNonResourceCosts![Building]) <> "" Then
CL(6) = CL(6) + 1
WKS.Cells(199 + R, 6) = (RSNonResourceCosts![Building])
End If
RSNonResourceCosts.MoveNext
Next R
如果你能发布一些你的数据和命名范围公式的截图,这可能会对我们有所帮助。甚至Access VBA代码也可能有帮助。这些命名范围是如何创建的?这似乎与命名范围的“范围”有关。如果指定的范围是1:工作表的范围,2:在不同的工作表上,而不是在引用它的数据验证上,您将得到一个错误。
For C = 1 To NRcols - 1
X = CL(C) - 1
X = X + 200
RCount = Str(X)
RCount = Right$(RCount, Len(RCount) - 1) '
'strRange = "A201:A" + RCount
strRange = Chr$(64 + C) & "200:" & Chr$(64 + C) & RCount
MsgBox "strRange " & strRange & " Rcount " & RCount
WKS.Range(strRange).Select
If C = 1 Then
ColString = Str(C)
ColString = Right$(ColString, Len(ColString) - 1)
WKS.Names.Add Name:=Header(1), RefersToR1C1:="=ProjectDetails!R200C" & ColString & ":R" & RCount & "C1"
End If
If C = 2 Then
ColString = Str(C)
ColString = Right$(ColString, Len(ColString) - 1)
WKS.Names.Add Name:=Header(2), RefersToR1C1:="=ProjectDetails!R200C" & ColString & ":R" & RCount & "C2"
End If
If C = 3 Then
ColString = Str(C)
ColString = Right$(ColString, Len(ColString) - 1)
WKS.Names.Add Name:=Header(3), RefersToR1C1:="=ProjectDetails!R200C" & ColString & ":R" & RCount & "C3"
End If
If C = 4 Then
ColString = Str(C)
ColString = Right$(ColString, Len(ColString) - 1)
WKS.Names.Add Name:=Header(4), RefersToR1C1:="=ProjectDetails!R200C" & ColString & ":R" & RCount & "C4"
End If
If C = 5 Then
ColString = Str(C)
ColString = Right$(ColString, Len(ColString) - 1)
WKS.Names.Add Name:=Header(5), RefersToR1C1:="=ProjectDetails!R200C" & ColString & ":R" & RCount & "C5"
End If
If C = 6 Then
ColString = Str(C)
ColString = Right$(ColString, Len(ColString) - 1)
WKS.Names.Add Name:=Header(6), RefersToR1C1:="=ProjectDetails!R200C" & ColString & ":R" & RCount & "C6"
End If
Next C
I hope this might help. Code is vast.