Следующий вопрос на самом деле является случаем, когда вам нужно , чтобы использовать .Select
. Почти во всех других случаях никогда не используйте его.
Вопрос о том, как экспортировать xlsx в формате pdf
Этот вопрос должен помочь вам узнать, как открыть файл Excel с помощью диалогового окна файла
Я не уверен, что вы хотите сделать с weekNR
, учитывая, что вы делаете это позже:
ActiveCell.FormulaR1C1 = weekNR
Так что я буду игнорировать это, пока не получу больше информации об этом.
Поскольку konstnadst
является Range
объектом, как вы его назначили, я бы предложил объявить его как Range
объект со ссылкой на рабочий лист, с которым вы работаете, например:
Dim konstandadst As Range
'you need to Set objects such as Ranges, Worksheets, Workbooks, ect.
Set konstandadst = whateverWsThisIs.Range("E7")
Использование Range.Activate
эквивалентно щелчку по диапазону, который кажется бесполезным в ваших обстоятельствах, поэтому избавьтесь от этого.
Использование:
Range1.Select
Range2.Select
Range3.Select
В результате вы выбираете Range3
только после завершения этого блока.
Я бы настоятельно рекомендовал никогда , используя .Select
, и вместо этого создать ссылочные переменные для ваших диапазонов для непосредственной работы с ними, например:
'these select cell A1
Set MyRange = ws.Range("A1")
Set MyRange = ws.Cells(1,1)
'this selects column B
Set MyRange = ws.Range("B:B")
'this selects the row from A1 to B1
Set MyRange = ws.Range(ws.Cells(1,1), ws.Cells(1,2))
'this selects a table defined from A1 to C2
Set MyRange = ws.Range(ws.Cells(1,1), ws.Cells(2,3))
Не делайте этого:
For Each ws In Worksheets
Сделайте это, потому что вы хотите явно указать VBA рабочую книгу, в которой вы ссылаетесь на коллекцию Worksheets
:
For Each ws In ThisWorkbook.Worksheets
Или, если вы урод, как я:
For Each ws In Excel.Application.ThisWorkbook.Worksheets
Вот несколько важных операций, которые вы можете выполнить с Range
объектами (подробнее здесь ):
'clears the values in the cells
MyRange.ClearContents
'clears the formatting and formulas in the cells
MyRange.Clear
'adjust column width
MyRange.ColumnWidth = someNumber
'adjust row height
MyRange.RowHeight = someOtherNumber
'eliminate indents (i think)
MyRange.IndentLevel = 0
'change the orientation
MyRange.Orientation = 0
После того, как вы установили ссылочные переменные для желаемых диапазонов, вы можете использовать их следующим образом:
With MyRange
'do the stuff here
End With
Вместо:
With Selection
'bad stuff here, don't do the stuff
End With