#excel #vba
#excel #vba
Вопрос:
Я создаю код copy / paste vba для переноса моей финансовой модели в вставленную версию в отдельной модели Excel и не могу понять, как вставить только то, что показано в области печати. В настоящее время она работает просто отлично, но она вставляет все данные за пределы диапазона печати и показывает все данные, которые скрыты в строках / столбцах и не отображаются.
Кажется, я не могу найти функцию или простую функцию для добавления к уже работающему коду, который бы это делал. Я новичок в VBA и не уверен в наилучшем способе добавления этой функциональности.
Sub Test()
Dim wb As Workbook, wbPaste As Workbook, wsExhibit1 As Worksheet, wsPaste As Worksheet, wsInputs As Worksheet, _
wsExhibit2 As Worksheet
With Application
.ScreenUpdating = False
.Calculation = xlCalculationAutomatic
.EnableEvents = False
End With
Set wb = ThisWorkbook
Set wbPaste = Workbooks("Copy_PasteWorkbook.xlsx")
With wb
Set wsExhibit1 = .Sheets("Value_Summary")
Set wsInputs = .Sheets("Inputs")
Set wsExhibit2 = .Sheets("Calculations")
End With
With wbPaste
Set wsPaste = .Sheets.Add(after:=.Sheets(.Sheets.Count))
End With
With wsPaste
wsExhibitA1.UsedRange.Copy
.Range("A1").PasteSpecial xlPasteValues
.Range("A1").PasteSpecial xlPasteFormats
.Range("A1").PasteSpecial xlPasteColumnWidths
.Name = .Cells(1, 3)
End With
wsInputs.Range("Selected_Calculation").Value = 1
Do Until wsInputs.Range("Selected_Calculation").Value > wsInputs.Range("Total_Calculations").Value
Application.Calculate
With wbPaste
Set wsTemp = .Sheets.Add(after:=.Sheets(.Sheets.Count))
End With
With wsTemp
wsExhibit2.UsedRange.Copy
.Range("A1").PasteSpecial xlPasteValues
.Range("A1").PasteSpecial xlPasteFormats
.Range("A1").PasteSpecial xlPasteColumnWidths
.Name = .Cells(1, 3)
End With
wsInputs.Range("Selected_Calculation").Value = wsInputs.Range("Selected_Calculation").Value 1
DoEvents
Loop
wsInputs.Range("Selected_Calculation").Value = 1
With Application
.ScreenUpdating = False
.Calculation = xlCalculationAutomatic
.EnableEvents = False
.CutCopyMode = False
End With
End Sub
Я надеюсь вставить только то, что находится в области печати, установленной в книге, на соответствующие страницы. Не вставлять скрытые данные или данные за пределами диапазона.
Ответ №1:
Print_Area
это именованный диапазон.
Sheets(“SheetName”).Range(“Print_Area”).Copy
Чтобы избежать скрытых ячеек:
Sheets(“SheetName”).Range(“Print_Area”).SpecialCells(xlCellTypeVisible).Copy
Комментарии:
1. Тогда, конечно, очень простой ответ. Спасибо за помощь. Есть какие-нибудь советы о том, как игнорировать скрытые строки / столбцы при вставке?