Я стажер в промышленной компании в Бразилии, и бывает так, что я использую excel много. Я только начал играть с VBA пару дней назад, и я удивлен многими вещами, которые он может сделать для меня !!VBA - лучший способ скопировать данные из закрытой книги
У меня нет сильного фона программирования, поэтому я участвую в основном. Код работает нормально, и от начала до конца требуется менее 15 секунд. Я не беспокоюсь о времени, но если бы он мог быть улучшен, это было бы здорово.
Моя основная цель - сохранить код простым и эффективным. Я уеду из компании в ближайшие месяцы, и я бы хотел, чтобы это было легко использовать и использовать. То, что я прошу, - это лучший способ написать мой код, чтобы другие могли понять легче, и, если возможно (конечно, это!), Требуется меньше времени.
Мой код удаляет 4 листа содержимого в моей текущей книге, а затем копирует обновленные данные из 4 других закрытых книг. Затем закройте все. :) Данные о ежедневном производстве, и их имена на португальском языке, извините за это.
Sub CopiarBase()
'
' Atalho do teclado: Ctrl+q
'
' Variables
Dim MyCurrentWB As Workbook
Dim BMalharia As Worksheet
Dim BBeneficiamento As Worksheet
Dim BEmbalagem As Worksheet
Dim BDikla As Worksheet
Set MyCurrentWB = ThisWorkbook
Set BMalharia = MyCurrentWB.Worksheets("B-Malharia")
Set BBeneficiamento = MyCurrentWB.Worksheets("B-Beneficiamento")
Set BEmbalagem = MyCurrentWB.Worksheets("B-Embalagem")
Set BDikla = MyCurrentWB.Worksheets("B-Dikla")
'Clean all the cells - Workbook 1
Dim Malharia_rng As Range
Set Malharia_rng = BMalharia.Range("A2:CN" & BMalharia.Cells(Rows.Count, 1).End(xlUp).Row)
Malharia_rng.ClearContents
Dim Ben_rng As Range
Set Ben_rng = BBeneficiamento.Range("A2:CY" & BBeneficiamento.Cells(Rows.Count, 1).End(xlUp).Row)
Ben_rng.ClearContents
Dim Emb_rng As Range
Set Emb_rng = BEmbalagem.Range("A2:CT" & BEmbalagem.Cells(Rows.Count, 1).End(xlUp).Row)
Emb_rng.ClearContents
Dim Dikla_rng As Range
Set Dikla_rng = BDikla.Range("A2:AV" & BDikla.Cells(Rows.Count, 1).End(xlUp).Row)
Dikla_rng.ClearContents
'Copy from Malharia Workbook
Workbooks.Open "C:\Users\marco.henrique\Desktop\Bases\Malharia Base.xls"
LastRowMB = Workbooks("Malharia Base.xls").Worksheets("Malharia Base").Cells(Rows.Count, 1).End(xlUp).Row
Dim Malha_base As Range
Set Malha_base = Workbooks("Malharia Base.xls").Worksheets("Malharia Base").Range("A2:CN" & LastRowMB)
MyCurrentWB.Worksheets("B-Malharia").Range("A2:CN" & LastRowMB).Value = Malha_base.Value
Workbooks("Malharia Base.xls").Close
'Copy from Beneficiamento Workbook
Workbooks.Open "C:\Users\marco.henrique\Desktop\Bases\Beneficiamento Base.xls"
LastRowBB = Workbooks("Beneficiamento Base.xls").Worksheets("Beneficiamento Base").Cells(Rows.Count, 1).End(xlUp).Row
Dim Ben_base As Range
Set Ben_base = Workbooks("Beneficiamento Base.xls").Worksheets("Beneficiamento Base").Range("A2:CY" & LastRowBB)
MyCurrentWB.Worksheets("B-Beneficiamento").Range("A2:CY" & LastRowBB).Value = Ben_base.Value
Workbooks("Beneficiamento Base.xls").Close
'Copy from Embalagem Workbook
Workbooks.Open "C:\Users\marco.henrique\Desktop\Bases\Embalagem Base.xls"
LastRowEB = Workbooks("Embalagem Base.xls").Worksheets("Embalagem Base").Cells(Rows.Count, 1).End(xlUp).Row
Dim Emb_base As Range
Set Emb_base = Workbooks("Embalagem Base.xls").Worksheets("Embalagem Base").Range("A2:CT" & LastRowEB)
MyCurrentWB.Worksheets("B-Embalagem").Range("A2:CT" & LastRowEB).Value = Emb_base.Value
Workbooks("Embalagem Base.xls").Close
'Copy from Dikla Workbook
Workbooks.Open "C:\Users\marco.henrique\Desktop\Bases\Diklatex Base.xls"
LastRowDB = Workbooks("Diklatex Base.xls").Worksheets("Diklatex Base").Cells(Rows.Count, 1).End(xlUp).Row
Dim Dikla_base As Range
Set Dikla_base = Workbooks("Diklatex Base.xls").Worksheets("Diklatex Base").Range("A2:AV" & LastRowDB)
MyCurrentWB.Worksheets("B-Dikla").Range("A2:AV" & LastRowDB).Value = Dikla_base.Value
Workbooks("Diklatex Base.xls").Close
End Sub
Прошу прощения, если я не был достаточно ясен, конечно английский не мой родной язык. Любые сомнения относительно моего кода или всей идеи не стесняются задавать вопросы.
Заранее благодарим за помощь!
Я голосующий, чтобы закрыть этот вопрос как не по теме, потому что он подходит именно для [Code Review] (http://codereview.stackexchange.com/) –
Это может быть хорошим вопросом для [codereview.se], до тех пор, пока: ** (A) ** _ код работает_, ** и (B) ** _it не является гипотетическим или неполным каким-либо образом. Перед публикацией прочитайте руководство по теме (http://codereview.stackexchange.com/help/on-topic), если вы решите перейти на [Обзор кода] (http://codereview.stackexchange.com/ вопросы/предложения). Если у вас есть какие-либо вопросы или проблемы, присоединяйтесь к нам в нашей [CR Help Desk] (http://chat.stackexchange.com/rooms/34045). – Phrancis
Я сделаю это. Извините за беспорядок! – mschlindwein