Перенос данных из рабочей книги (внутри текстового поля) в другую рабочую книгу (на рабочем листе) - PullRequest
0 голосов
/ 14 апреля 2019

Я пытаюсь соединить данные с двумя рабочими книгами.

У меня есть рабочая тетрадь с некоторыми текстовыми полями, тексты которых необходимо перераспределить в другую рабочую книгу (основную рабочую книгу) на определенном листе.

Я попытался установить обычную подпрограмму кода, когда я запускаю код для переноса текста внутри текстового поля в пустую строку, у меня возникает ошибка компиляции «Метод или элемент данных не найден», даже с объявленной книгой , лист и объекты / текстовое поле.

Ниже я показываю кусок кода.

Может кто-нибудь помочь мне с этой ошибкой?

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

1 Ответ

0 голосов
/ 14 апреля 2019

Во-первых, я предполагаю, что код, который вы разместили, не является полным. Как уже было отмечено в разделе комментариев, есть несколько проблем, таких как 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

Если речь идет о контроле формы ActiveX , о котором мы говорим, который вы вставили из Developer>Insert>ActiveX Controls>Text Box, то он не должен быть объявлен как 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...