Коллеги, есть файл, с макросами, так вот в этом файле, на листе есть кнопка расчет данных, нужно сделать так, чтоб данные рассчитывались на других таких же дополнительных листах (сделать копии листов - лист1, лист2 и т.д. и изменить немного код макроса) по хорошему нужно 5 листов. Расчет должен быть независим (каждый лист имеет свои параметры и считает все по своему) . У меня получается сделать так, что дополнительные листы, берут данные с первого листа и отображают в расчете одинаковые значения. Спасибо!
Коллеги, есть файл, с макросами, так вот в этом файле, на листе есть кнопка расчет данных, нужно сделать так, чтоб данные рассчитывались на других таких же дополнительных листах (сделать копии листов - лист1, лист2 и т.д. и изменить немного код макроса) по хорошему нужно 5 листов. Расчет должен быть независим (каждый лист имеет свои параметры и считает все по своему) . У меня получается сделать так, что дополнительные листы, берут данные с первого листа и отображают в расчете одинаковые значения. Спасибо!blayd2007
Global Const NS_IskhData1 = "лист 1" Global Const NS_IskhData2 = "лист 2" Global Const NS_IskhData3 = "лист 3" Global Const NS_IskhData4 = "лист 4" Global Const NS_IskhData5 = "лист 5"
[/vba]
В значении листа 1 прописываю: [vba]
Код
Set dataSheet = ActiveWorkbook.Worksheets(NS_IskhData1)
[/vba] листа 2 [vba]
Код
Set dataSheet = ActiveWorkbook.Worksheets(NS_IskhData2)
[/vba] и т.д.
Если в модуле Func, в строке: [vba]
Код
Set dataSheet = ActiveWorkbook.Worksheets(NS_IskhData1)
[/vba] ставить значение 1, то расчет происходит по данным с листа 1, если 2, то все листы берут данные с листа 2 и т.д., а если прописать все по очереди, [vba]
Код
Set dataSheet = ActiveWorkbook.Worksheets(NS_IskhData1) Set dataSheet = ActiveWorkbook.Worksheets(NS_IskhData2) Set dataSheet = ActiveWorkbook.Worksheets(NS_IskhData3)
[/vba] и т.д. то расчет по последнему в списке. А как сделать, чтобы каждый лист брал значения со своего листа?
Вот мои действия: В модуле Var прописываю: [vba]
Код
Global Const NS_IskhData1 = "лист 1" Global Const NS_IskhData2 = "лист 2" Global Const NS_IskhData3 = "лист 3" Global Const NS_IskhData4 = "лист 4" Global Const NS_IskhData5 = "лист 5"
[/vba]
В значении листа 1 прописываю: [vba]
Код
Set dataSheet = ActiveWorkbook.Worksheets(NS_IskhData1)
[/vba] листа 2 [vba]
Код
Set dataSheet = ActiveWorkbook.Worksheets(NS_IskhData2)
[/vba] и т.д.
Если в модуле Func, в строке: [vba]
Код
Set dataSheet = ActiveWorkbook.Worksheets(NS_IskhData1)
[/vba] ставить значение 1, то расчет происходит по данным с листа 1, если 2, то все листы берут данные с листа 2 и т.д., а если прописать все по очереди, [vba]
Код
Set dataSheet = ActiveWorkbook.Worksheets(NS_IskhData1) Set dataSheet = ActiveWorkbook.Worksheets(NS_IskhData2) Set dataSheet = ActiveWorkbook.Worksheets(NS_IskhData3)
[/vba] и т.д. то расчет по последнему в списке. А как сделать, чтобы каждый лист брал значения со своего листа?blayd2007
blayd2007, dataSheet может содержать только одно значение. Ваша запись с присвоением листов (Set dataSheet =...) аналогична [vba]
Код
Sub t() x = 1 x = 2 x = 3 MsgBox x End Sub
[/vba]В результате x будет равен 3!
Используйте массивы: [vba]
Код
NS_IskhData = Array("лист 1", "лист 2", "лист 3", "лист 4", "лист 5") For Each x In NS_IskhData Set dataSheet = ActiveWorkbook.Worksheets(x) 'Работа с листом... Next x
[/vba]или[vba]
Код
For i = 1 To 5 Set dataSheet = ActiveWorkbook.Worksheets("лист " & i) 'Работа с листом... Next i
[/vba]
blayd2007, dataSheet может содержать только одно значение. Ваша запись с присвоением листов (Set dataSheet =...) аналогична [vba]
Код
Sub t() x = 1 x = 2 x = 3 MsgBox x End Sub
[/vba]В результате x будет равен 3!
Используйте массивы: [vba]
Код
NS_IskhData = Array("лист 1", "лист 2", "лист 3", "лист 4", "лист 5") For Each x In NS_IskhData Set dataSheet = ActiveWorkbook.Worksheets(x) 'Работа с листом... Next x
[/vba]или[vba]
Код
For i = 1 To 5 Set dataSheet = ActiveWorkbook.Worksheets("лист " & i) 'Работа с листом... Next i
blayd2007, если вызываете с Call, то со скобками надо [vba]
Код
Call doRaschet(dataSheet)
[/vba]если без него, то и без скобок [vba]
Код
doRaschet dataSheet
[/vba] дальше не могу ничего проверить из-за миссинга в библиотеках, если убираю его, то ругается на несуществующий тип CMethodOfMetering31 в функции Priv_15
blayd2007, если вызываете с Call, то со скобками надо [vba]
Код
Call doRaschet(dataSheet)
[/vba]если без него, то и без скобок [vba]
Код
doRaschet dataSheet
[/vba] дальше не могу ничего проверить из-за миссинга в библиотеках, если убираю его, то ругается на несуществующий тип CMethodOfMetering31 в функции Priv_15Manyasha
Очень мудрено все, а для меня особенно. У меня вообще опыт "газетных шапок", а реализовать много чего хочется, буквально недавно окунулся в мир vba, и только простейшего понимания. Простите, если вопросы мои просты или тупы:). Спросить больше не у кого.
Очень мудрено все, а для меня особенно. У меня вообще опыт "газетных шапок", а реализовать много чего хочется, буквально недавно окунулся в мир vba, и только простейшего понимания. Простите, если вопросы мои просты или тупы:). Спросить больше не у кого.blayd2007