2015-05-20 2 views
2

Я фактически создаю рабочие листы программно и добавляю кнопку с макросом, связанным с этими рабочими таблицами программно. Что я хочу сделать, так это то, что когда я нажимаю на кнопку, содержимое листка, содержащего кнопку, копируется на другой рабочий лист.Запись с рабочего листа на другой с использованием макроса, добавленного программным способом

Есть на самом деле две вещи, которые смущают меня: Во-первых я не понимаю, если макрос я связываю к кнопке находится (я имею в виду его код находится) в файле создания листа или в созданном листе сам.

Вот код, я создаю добавить кнопку с соответствующей макрокоманды:

With newWorkBook.Worksheets(1).Buttons 
     .Add 350, 75, 173.25, 41.25 
     .OnAction = "'" & ThisWorkbook.FullName & "'!export_Click" 
     .Caption = "Exporter la fiche" 
     End With 

     newWorkBook.Worksheets("Feuil1").Name = "Valeurs" 

checkPVC_Click Sub находится в модуле, расположенном в файле Excel используется для создания электронных таблиц.

Во-вторых,, внутри макроса, который должен скопировать содержимое листка на другой, я не знаю, как относиться к двум листам (источнику и цели) в коде.

В приведенном ниже коде:

Dim newWorkBook As Workbook 
Dim createdSheetColumnsTab(100) As String 
Dim col As Integer 
col = Cells(1, 8).Value 

Set newWorkBook1 = Workbooks.Add 

newWorkBook1.Worksheets("Feuil1").Cells(1, 1).Value = "Stat" 

newWorkBook1.Worksheets("Feuil1").Cells(2, 1) = ActiveWorkbook.Worksheets("Valeurs").Cells(12, 1) 

Здесь в строке col = Cells(1, 8).Value я получить доступ к содержанию листа, содержание которых я хочу, чтобы скопировать, и в строке newWorkBook1.Worksheets("Feuil1").Cells(1, 1).Value = "Stat" получить доступ к содержанию «мишени ", и я не знаю, как ссылаться на содержимое первого рабочего листа в следующем коде, чтобы скопировать содержимое.

Надеюсь, что я был ясен, и я могу добавить дополнительные замечания, если необходимо, извините, что я не владею английским, поэтому мне сложно объяснить эту проблему.

ответ

1

Вы можете оставить Sub checkPVC_Click в оригинальной книге. Просто убедитесь, что вы указали полный путь и имя файла, у которого есть этот макрос. Например. Убедитесь, что файл, из которого выполняется этот макрос, сохраняется как минимум один раз.

Sub Sample() 
    Dim NewWorkbook As Workbook 

    Set NewWorkbook = Workbooks.Add 

    With NewWorkbook.Worksheets(1).Buttons 
     .Add 350, 15, 173.25, 41.25 
     .OnAction = "'" & ThisWorkbook.FullName & "'!checkPVC_Click" 
    End With 
End Sub 

Sub checkPVC_Click() 
    MsgBox "a" 
End Sub 

Что касается вашего второго вопроса, вы должны полностью квалифицировать Cells объект так, чтобы он знать, какие клетки вы имеете в виду

ThisWorkbook будет ссылаться на ячейку из книги, которая содержит код.

Activeworkbook будет ссылаться на ячейку из рабочей книги, которая в настоящее время активна.

Редактировать: Последующие комментарии. Это то, что вы пытаетесь?

Sub Sample() 
    Dim newWorkBook As Workbook 
    Dim ws As Worksheet 

    Set newWorkBook = Workbooks.Add 
    Set ws = newWorkBook.Sheets(1) 
    ws.Name = "Valeurs" 

    With ws.Buttons 
     .Add 350, 15, 173.25, 41.25 
     .OnAction = "'" & ThisWorkbook.FullName & "'!checkPVC_Click" 
    End With 
End Sub 

Sub checkPVC_Click() 
    Dim OldWorkbook As Workbook, newWorkBook As Workbook 
    Dim createdSheetColumnsTab(100) As String 

    Set OldWorkbook = ActiveWorkbook 

    Set newWorkBook1 = Workbooks.Add 

    newWorkBook1.Worksheets("Feuil1").Cells(1, 1).Value = "Stat" 

    newWorkBook1.Worksheets("Feuil1").Cells(2, 1) = OldWorkbook.Worksheets("Valeurs").Cells(12, 1) 
End Sub 
+0

Спасибо за ваш ответ. Фактически я использую первую книгу для создания второй книги с макросом, связанным с кнопкой. И я что, когда я нажимаю на эту кнопку, содержимое второй книги копируется в третью книгу, которая создается, я надеюсь, что теперь это станет более ясным. – Neo

+0

Да, вы должны использовать то, что я дал выше. В 'Sub checkPVC_Click()', используйте 'Activeworkbook' для копирования со 2-го по 3-й. –

+0

Теперь я получаю ошибку времени выполнения: Subscript out the range (Error 9) – otus

0

Чтобы получить доступ к содержимому на первый листе рабочей книги, содержащий макрос, Вы должны использовать:

Thisworkbook.sheets(1).range("a1:a100") ' range as an example you can input anything 

Надеется, что это помогло.

+0

Я проверил его и он не работает:/ – otus

+0

пытались ли вы: thisworkbook.sheets (1) .cells (1,8) .copy назначения: = newWorkBook1.Worksheets ("Feuil1").Ячейки (1, 8) – KKowalczyk

+0

Да, на самом деле копия работает, но содержимое копируется не из моего «исходного» листа – otus

Смежные вопросы