我正在尝试将数据与2个工作簿连接。
我有一个带有一些文本框的工作簿,需要将这些文本重新分配到特定工作表中的另一个工作簿(主工作簿)上。
我试图设置一个常规的代码例程,当我运行代码以将文本框内的文本带到空行时,即使使用已声明的工作簿,我也会出现编译错误“找不到方法或数据成员” ,工作表和对象/文本框。
下面我显示一段代码。
有人可以帮助我解决此错误吗?
Dim mestre As Workbook, Servo As Workbook
Dim cadastro As Worksheet, listacadastro As Worksheet, controle As Worksheet, listamatricula As Worksheet
Dim boxnomecompleto1 As TextBox
varmestre = Worksheets("99. Controles").Range("C19").Value
varservo = Worksheets("99. Controles").Range("C20").Value
Set mestre = Workbooks.Open(varmestre)
Set Servo = Workbooks.Open(varservo)
'range C19 and C20 had the workbook location
Set cadastro = Servo.Worksheets("01. Cadastro")
Set listacadastro = mestre.Worksheets("01. Lista Cadastro")
Set controle = Servo.Worksheets("99. Controles")
Set listamatricula = mestre.Worksheets("02. Lista de Matriculados")
n = 2000
For i = 8 To n
If listacadastro.Cells(i, 2).Value = "" Then
listacadastro.Cells(i, 2).Value = "C" & ncadastro
listacadastro.Cells(i, 4).Value = cadastro.boxnomecompleto1.Value
End if
Exit for
答案 0 :(得分:0)
首先,我将假设您发布的代码不完整。正如注释部分已经指出的那样,存在一些问题,例如ncadastro
未声明或初始化,以及For-Next
循环缺少Next
部分。
此外,请确保声明了varmestre
和varservo
变量,并在为它们分配值时使用对特定工作簿的引用。例如:
dim varmestre as string
dim varservo as string
varmestre = thisWorkbook.Worksheets("99. Controles").Range("C19").Value 'Of course it doesn't have to be ThisWorkbook necessarily. It can be anything you want.
varservo = thisWorkbook.Worksheets("99. Controles").Range("C20").Value
第二,就您的文本框而言:
如果我们要讨论的是一个简单的文本框,您是从Insert>Text>Textbox
插入的,那么您可以将其声明为TextBox
,但必须设置如下:
Set boxnomecompleto1= cadastro.TextBoxes("Name of your TextBox here")
或
Set boxnomecompleto1= cadastro.TextBoxes(n) 'where n is your textbox index n=1 for the 1st one n=2 for the 2nd one etc
然后您可以像这样访问它的值:
listacadastro.Cells(i, 4).Value = boxnomecompleto1.Text
我们正在谈论的是它是从Developer>Insert>ActiveX Controls>Text Box
插入的ActiveX表单控件,因此不应将其声明为TextBox
。相反,应将其声明为Object
:
Dim boxnomecompleto1 As Object
然后需要这样设置:
set boxnomecompleto1 = cadastro.OLEObjects("Name of your TextBox here").Object
或
set boxnomecompleto1 = cadastro.OLEObjects(n).Object 'where n is your object index n=1 for the 1st one n=2 for the 2nd one etc
然后您可以像这样访问其值:
listacadastro.Cells(i, 4).Value = boxnomecompleto1.Text