编辑:我有一个访问应用程序,我需要打开一个现有的Excel工作表,找到一个日期(已在工作表中)并用1或0填充一行(带有日期单元格列)
这意味着在设置要填充的单元格之前,我必须将datecell.column转换为等效的字母表。
我使用了一个函数,我之前在excel中使用过(如下所示)END EDIT
Function Col_Letter(lngcol) As String
Dim vArr
vArr = Split(Cells(1, lngcol).Address(True, False), "$")
Col_Letter = vArr(0)
End Function
以下代码是我如何在我的应用程序中使用代码的示例
Dim CD, d, f, f1, f2, g, strd
...
For n = 0 To 10
d = CD + n
strd = Str(d)
Select Case Weekday(strd)
Case vbSunday, vbSaturday
Case Else
Set f = book.Worksheets(a).Range("5:5").Find(strd)
f1 = f.Column
f2 = Col_Letter(f1)
g = f2 & Srow
book.Worksheets(a).Range(g).Value = "0"
End Select
Next n
End If
'CD = Current date, a = worksheetname set eariler in code, srow = excel row number set earlier in code`enter code here`
'this is executed in an excel sheet which was opened from access
当我运行它时,有时它会完美运行,有时我会得到Object'_Global'的方法'单元'失败的错误代码,当我点击调试时它突出显示col_letter函数的第三行
vArr = Split(Cells(1, lngcol).Address(True, False), "$")
你有什么想法(貌似)随机选择显示这个错误吗?
答案 0 :(得分:1)
您需要完全限定单元格对象。试试这个
Function Col_Letter(lngcol As Integer) As String
Col_Letter = Split(book.Sheets(1).Cells(, lngcol).Address, "$")(1)
End Function
或
Function Col_Letter(lngcol As Integer) As String
Col_Letter = Split(book.ActiveSheet.Cells(, lngcol).Address, "$")(1)
End Function
你可能得到的另一个错误是因为这行
f1 = f.Column
如果发现无法返回任何内容怎么办?您可能想要使用
If Not f is Nothing then
'Rest of the code
End If
答案 1 :(得分:0)
所以,只是你来这个页面遇到类似的问题就是我如何修复它。
仍然在我尝试了各种方法来验证单元格后,代码仍然无法正常工作,因此我决定使用另一个函数将列号更改为字母...
Function ColumnLetter(ColumnNumber) As String
Dim n As Integer
Dim c As Byte
Dim s As String
n = ColumnNumber
Do
c = ((n - 1) Mod 26)
s = Chr(c + 65) & s
n = (n - c) \ 26
Loop While n > 0
ColumnLetter = s
End Function
因为它不需要excel中的任何单元格,所以在这里工作正常......
我觉得这会让代码执行得慢一点(可能只是我的系统)所以如果你仍然有建议随时发布答案。