Excel 2016 VBA 64位 - 编译错误:找不到方法或数据成员 - Userform Textbox

时间:2017-06-16 03:58:47

标签: excel vba compilation

我正在运行Excel 2016(64位)并获得“编译错误:找不到方法或数据成员”,这会突出显示文本框名称。

我无法理解为什么我收到此错误。 我复制了我在另一个项目(32位)中创建的代码,因为它在32位环境中完美运行。

我已经查看了由于32位Vs 64位平台冲突而遇到的问题。但我找不到编译错误的原因,因为我目前还没有其他地方的代码。

有人会告诉我出现问题的地点和原因,我在Userform中有以下代码名为 Frm_AFI

Option Explicit
   Dim wb As ThisWorkbook
   Dim wsLog As cnServiceLog ' cnServiceLog is the codename for my "Service Log" worksheet
Private Sub UserForm_Initialize()

TXT_Date_Created.Value = Format(Date, "dd/mm/yyyy")

Dim irow As Long
Dim wsLog As cnServiceLog
Set wsLog = cnServiceLog
Dim lastRow As String


'find last data row from cnServiceLog
irow = wsLog.Cells(Rows.Count, 1).End(xlUp).Row
wsLog.TXTWorkOrderNo.Text = "SWC" & Year(Date) & Format(Month(Date), "00") & "-" & Format(Split(wsLog.Cells(irow, 1).Value, "-")(1) + 1, "00000")


End Sub


Sub getsettings()
    On Error Resume Next
    wb = ThisWorkbook.Worksheets(cnServiceLog).Name
    If Not Err.Number = 0 Then
        MsgBox "expected to find a Service Log worksheet, but it is missing"
    Exit Sub
End If
On Error GoTo 0
ThisWorkbook.Worksheets(cnServiceLog).Select
x = Range("A2").Value

End Sub

只需注释:此Userform必须与32位和64位Excel平台兼容。

提前感谢你,

TheShyButterfly

1 个答案:

答案 0 :(得分:0)

您的cnServiceLog工作表看起来像是在使用ActiveX控件。根据{{​​3}},如果你想坚持使用ActiveX控件,你将不得不提供32位版本的工作簿,以及使用64位版本的64位版本的工作簿。控制。

假设您仅使用ActiveX控件而不使用事件,您可以切换到非ActiveX文本框控件,并使单个工作簿在32位和64位主机中安全地工作

  • 删除现有的ActiveX控件
  • 插入文本框Insert..Shapes ..文本框,并将其命名为TXTWorkOrderNo

然后删除此行的VBA

wsLog.TXTWorkOrderNo.Text = "SWC" & Year(Date) & Format(Month(Date), "00") & "-" & Format(Split(wsLog.Cells(irow, 1).Value, "-")(1) + 1, "00000")

并替换为这些行

Dim shp As TextBox`
Set shp = wsLog.Shapes("TXTWorkOrderNo").OLEFormat.Object
shp.Text = "SWC" & Year(Date) & Format(Month(Date), "00") & "-" & Format(Split(wsLog.Cells(irow, 1).Value, "-")(1) + 1, "00000")