2016-05-04 3 views
0

Я хочу сделать лист с разными макро-кнопками Этот лист называется Кнопки. Макро-кнопки на этом листе связаны с макросами, которые должны запускаться на разных листах. Я попытался сделать макро-кнопку для листа 1. Stock & Demand:Запустите макрос на другом листе, используя VBA (Excel)

Sub NeuerTag() 

'Abfrage ob der Tag eingefügt werden soll, No = QUIT' 
If MsgBox("Möchtest du die Tabelle vorbereiten?", vbYesNo) = vbNo Then Exit Sub 

'Copies the last three coloumns of the Worksheet 1. Stock & Demand' 
With Sheets("1. Stock & Demand") 
Lastcol = .Cells(1, Columns.Count).End(xlToLeft).Column 
Columns(Lastcol - 1).Resize(, 1).Select 
Selection.Copy 

'Selects the first empty cell in 1. Stock & Demand and pastes' 
Sheets("1. Stock & Demand").Range("F3:ZZ3").End(xlToRight).Offset(-2, 1).Paste 

'Pastes the Today()' 
Sheets("1. Stock & Demand").Range("F3:ZZ3").End(xlToRight).Offset(-1, 0).Select 
Selection.Value = Date 

'Paste Special - Values' 
With Sheets("1. Stock & Demand") 
Lastcol = .Cells(1, Columns.Count).End(xlToLeft).Column 
Columns(Lastcol - 3).Resize(, 1).PasteSpecial Paste:=xlPasteValues 

End With 
End With 

End Sub 

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

Должен сказать, что я не очень хорошо разбираюсь в кодировании, поэтому, пожалуйста, объясните мне это как im five ;-).

ответ

1

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

Workbooks("Your_worksheet_name_here").Sheets("1. Stock & Demand").Range("F3:ZZ3").End(xlToRight).Offset(-2, 1).Paste 

Обычно, чтобы держать вещи ясно я сделать что-то вроде этого:

Set targetSheet = Workbooks("Your_worksheet_name_here").Sheets("1. Stock & Demand") 
targetSheet.Range("F3:ZZ3").End(xlToRight).Offset(-2, 1).Paste 
+0

Должен ли я использовать «Рабочие книги» («Your_worksheet_name_here») '? Это одна и та же книга, но другой лист. 'targetSheet.Range (« F3: ZZ3 »). End (xlToRight) .Offset (-2, 1) .Paste' создает ошибку. – Bluesector

+0

Я неправильно понял вашу проблему, посмотрите на ответ OldUgly. Я думаю, что его точка абсурдных точек в коде верна. –

1

что-то незначительное - внутри вашей With заявления, вы неправильно кодирования. Обратите внимание на «.». Из-за неправильного ввода/вывода вы получите результат с неправильной вкладкой.

Например

With Sheets("1. Stock & Demand") 
    Lastcol = .Cells(1, Columns.Count).End(xlToLeft).Column 
    Columns(Lastcol - 3).Resize(, 1).PasteSpecial Paste:=xlPasteValues 
End With 

Должно быть

With Sheets("1. Stock & Demand") 
    Lastcol = .Cells(1, .Columns.Count).End(xlToLeft).Column 
    .Columns(Lastcol - 3).Resize(, 1).PasteSpecial Paste:=xlPasteValues 
End With 

и это ...

With Sheets("1. Stock & Demand") 
    Lastcol = .Cells(1, Columns.Count).End(xlToLeft).Column 
    Columns(Lastcol - 1).Resize(, 1).Select 
    Selection.Copy 

'Selects the first empty cell in 1. Stock & Demand and pastes' 
    Sheets("1. Stock & Demand").Range("F3:ZZ3").End(xlToRight).Offset(-2, 1).Paste 

'Pastes the Today()' 
    Sheets("1. Stock & Demand").Range("F3:ZZ3").End(xlToRight).Offset(-1, 0).Select 
    Selection.Value = Date 

должен быть ...

With Sheets("1. Stock & Demand") 
    Lastcol = .Cells(1, .Columns.Count).End(xlToLeft).Column 
    .Columns(Lastcol - 1).Resize(, 1).Copy 

'Selects the first empty cell in 1. Stock & Demand and pastes' 
    .Range("F3:ZZ3").End(xlToRight).Offset(-2, 1).Paste 

'Pastes the Today()' 
    .Range("F3:ZZ3").End(xlToRight).Offset(-1, 0).Value = Date 
+0

Спасибо! Но теперь строка '' Выбирает первую пустую ячейку в 1. Stock & Demand и pastes ' .Range («F3: ZZ3»). End (xlToRight) .Offset (-2, 1) .Paste' дает мне ошибку , – Bluesector

+0

'.Range (« F3: ZZ3 »). End (xlToRight)' оценивает ячейку 'XFD3', последний столбец на листе. '.Offset (-2,1)' пытается подняться на две строки и на правую одну строку - прямо с листа. Я не знаю, что вы пытаетесь сделать, поэтому я не могу сказать вам решение. – OldUgly

+0

Это то, что макрос должен делать, но не делает. Visual Basic показывает мне желтую строку: /. ** Ошибка времени выполнения «438»: объект не поддерживает этот метод. ** – Bluesector

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