Excel vba границы листа

Параметры печатной страницы в VBA Excel. Свойство PageSetup объекта Worksheet. Объект PageSetup и описание некоторых его свойств с примерами.

PageSetup — это объект, который содержит все атрибуты параметров страницы в виде свойств (диапазон печати, размеры полей, ориентация страницы и т.д.).

Объект PageSetup возвращается свойством PageSetup объекта Worksheet:

где Expression — это выражение (переменная), возвращающее объект Worksheet.

Свойства объекта PageSetup

Диапазон печати

Установить диапазон для печати из кода VBA Excel можно с помощью свойства PageSetup.PrintArea:

Worksheets(«Лист1»).PageSetup.PrintArea = «D7:L30»

Лист1.PageSetup.PrintArea = Selection.Address

Размеры полей

Свойства, отвечающие за размер полей печатной страницы:

Свойство Описание
LeftMargin Возвращает или задает размер левого поля
TopMargin Возвращает или задает размер верхнего поля
RightMargin Возвращает или задает размер правого поля
BottomMargin Возвращает или задает размер нижнего поля

Свойства, отвечающие за размер полей, предназначены для чтения и записи, выражаются в точках (1 точка равна 1/72 дюйма или ≈1/28 см). Тип данных — Double.

Для того, чтобы вручную не высчитывать количество точек в дюймах или сантиметрах, существуют методы Application.InchesToPoints и Application.CentimetersToPoints, которые автоматически переводят дюймы и сантиметры в точки.

Пример задания размеров полей для печатной страницы:

Sub Primer1()

    With Лист4.PageSetup

        .LeftMargin = 72  ‘1 дюйм (2,54 см)

        .TopMargin = Application.CentimetersToPoints(2)  ‘2 см

        .RightMargin = 28  ‘приблизительно 1 см

        .BottomMargin = Application.InchesToPoints(0.5)  ‘0,5 дюйма (1,27 см)

    End With

End Sub

Пример чтения размеров заданных полей для печатной страницы и запись их в ячейки диапазона [A1:A4] активного листа:

Sub Primer2()

    With Лист4.PageSetup

        [A1] = .LeftMargin

        [A2] = .TopMargin

        [A3] = .RightMargin

        [A4] = .BottomMargin

    End With

End Sub

Масштаб

Масштабирование рабочего листа для печати осуществляется в VBA Excel с помощью свойства PageSetup.Zoom:

Лист4.PageSetup.Zoom = 200  ‘Увеличение масштаба до 200% (от 100%)

Worksheets(«Лист4»).PageSetup.Zoom = 80  ‘Уменьшение масштаба до 80% (от 100%)

Свойство PageSetup.Zoom может задавать или возвращать значение от 10 до 400 процентов.

Ориентация страницы

За ориентацию печатной страницы отвечает свойство PageSetup.Orientation, которое возвращает или задает значение константы из коллекции XlPageOrientation.

Константы коллекции XlPageOrientation:

Константа Значение Описание
xlPortrait 1 Портретный режим (вертикальная ориентация)
xlLandscape 2 Ландшафтный режим (горизонтальная ориентация)

Примеры установки ориентации печатной страницы из кода VBA Excel:

Worksheets(«Лист4»).PageSetup.Orientation = xlPortrait

ActiveSheet.PageSetup.Orientation = xlLandscape


Excel VBA Border

Borders in Excel VBA

Borders are a necessary part of every worksheet or in any word file. Borders separate data from one another it shows which part of data is referred to which area to avoid any confusion. Also, it looks good to have borders in our datasheet. In excel worksheet we have options for inserting borders manually, but how we do it in VBA is what we will learn in this article.

To apply borders in VBA we need to access the properties of a cell and in the current case, the property we need to access is borders. Now we need to keep in mind that there are various types of options available in borders properties. Such as diagonal vertical up down etc. We will cover some of them here.

How to Use Borders in VBA

To use borders in VBA we need to follow these steps as follows:

  1. Use range method to access the range value.
  2. Use borders method if we want to format only a portion of cell or borders around if we want to cover the cells with borders.
  3. Use different line styles to make the borders look pleasant.

You can download this VBA Border Excel Template here – VBA Border Excel Template

Now let us go through some examples and see how we can insert a border in excel cell.

Example #1 – VBA Borders

Let us use the basic enumerations what VBA provides us when we type the keywords to see the borders. We will put borders in cell A1 and see the result.

Step 1: Go to Developer’s tab, open visual basic and we will see a VB Editor.

Developer's Tab

Step 2: Insert a new module from the insert tab provided. Click on the module we just inserted which will open a code window for us,

Module

Step 3: Declare a sub-function which means naming our macro.

Code:

Sub Sample()

End Sub

Sub Function

Step 4: Activate the worksheet first in order to use its properties by the following code below,

Code:

Sub Sample()

Worksheets("Sheet1").Activate

End Sub

VBA Border Example 1.2

Step 5: Now let us try to change the border of cell A1. Use the range method as below,

Code:

Sub Sample()

Worksheets("Sheet1").Activate
Range("A1").Borders

End Sub

VBA Border Example 1.3

Step 6: Select the borders properties which will give us an option to select the border style as follows,

Code:

Sub Sample()

Worksheets("Sheet1").Activate
Range("A1").Borders(

End Sub

Border Example 1.5

Step 7: Select the first option which is Xdiagonalup as the border style.

Code:

Sub Sample()

Worksheets("Sheet1").Activate
Range("A1").Borders (xlDiagonalUp)

End Sub

Bdr Example 1.6

Step 8: Now we need to use the line style for borders. After dot(.) operator use enumerations for line style as follows,

Code:

Sub Sample()

Worksheets("Sheet1").Activate
Range("A1").Borders(xlDiagonalUp).LineStyle

End Sub

Bdr Example 1.7

Step 9: Type = sign and it will give us the numerous enumerations for linestyle as follows,

Code:

Sub Sample()

Worksheets("Sheet1").Activate
Range("A1").Borders(xlDiagonalUp).LineStyle = XlLineStyle.xlDouble

End Sub

Bdr Example 1.8

Step 10: Let us run the above code by pressing F5 and see the result in sheet 1 as follows,

VBA Border 1

Example #2 – VBA Border

Now let us use the other method for the border style in VBA.

Step 1: We already have our module inserted, Name a macro in it with another sub-function as follows,

Code:

Sub Sample1()

End Sub

VBA Border Example 2.1

Step 2: Activate the worksheet by the following code written below,

Code:

Sub Sample1()

Worksheets("Sheet1").Activate

End Sub

Bdr Example 2.2

Step 3: Now let use the range method to activate the border properties such as shown below,

Code:

Sub Sample1()

Worksheets("Sheet1").Activate
Range("C1").Borders(xlEdgeBottom).LineStyle = XlLineStyle.xlDashDot

End Sub

Bdr Example 2.3

Step 4: Now run the above code and see the result in Sheet 1 as follows,

VBA border 2

Example #3 – VBA Border

Let us try a few more of the border and line styles in another cell. This time we will use it in a cell range C5:E6.

Step 1: We already have our module inserted, Name a macro in it with another sub-function as follows,

Code:

Sub Sample2()

End Sub

VBA Border Example 3.1

Step 2: Activate the worksheet by the following code written below,

Code:

Sub Sample2()

Worksheets("Sheet3").Activate

End Sub

VBA Border Example 3.2

Step 3: Now let use the range method to activate the border properties such as shown below,

Code:

Sub Sample2()

Worksheets("Sheet3").Activate
Range("C5:E6").Borders(xlEdgeTop).LineStyle = XlLineStyle.xlSlantDashDot

End Sub

Bdr Example 3.3

Step 4: Now run the above code and see the result in Sheet 1 as follows,

VBA Border 3

Example #4 – VBA Border

Now in this example, we will use borders around the cell covering the whole cell. Earlier what we did was border only one portion of the cell. Consider the following data we have in sheet 2 as follows,

VBA Border Example 4.1

Let us try to use a border around this data using the border around the method.

Step 1: We already have our module inserted, Name a macro in it with another sub-function as follows,

Code:

Sub Sample3()

End Sub

VBA Border Example 4.2

Step 2: Activate the worksheet by the following code written below,

Code:

Sub Sample3()

Worksheets("Sheet2").Activate

End Sub

Bdr Example 4.3

Step 3: Now let’s use the range method to activate the border around properties such as shown below,

Code:

Sub Sample3()

Worksheets("Sheet2").Activate
Range("A1:B6").BorderAround

End Sub

Bdr Example 4.4

Step 4: Now use the line style and line thickness as follows,

Code:

Sub Sample3()

Worksheets("Sheet2").Activate
Range("A1:B6").BorderAround LineStyle:=xlContinuous, Weight:=xlThick

End Sub

Bdr Example 4.5

Step 5: Run the above code by pressing F5 and see the result in sheet 2 as follows,

VBA Border 4

Things to Remember

  • Border around is used to cover all parts of cells.
  • Borders method is used to cover only a portion of a cell.
  • X Linestyles are used to use different types of styles in borders.
  • Inserting borders is similar to formatting data.
  • Borders in VBA are similar to borders in the worksheet, we need to remember the keyword for it to use.

Recommended Articles

This is a guide to VBA Borders. Here we discuss how to use Borders in Excel VBA along with practical examples and downloadable excel template. You can also go through our other suggested articles –

  1. VBA IsNumeric
  2. VBA UCASE
  3. VBA Worksheets
  4. VBA RGB

Borders in VBA Excel

We use borders in Excel to highlight our data. In any dashboard, it is a very important skill to represent the important data, and borders do it. Borders are a property in VBA that we can access using the Range method and giving the appropriate border style as we know there are different border styles.

If you are good at formatting in excelFormatting is a useful feature in Excel that allows you to change the appearance of the data in a worksheet. Formatting can be done in a variety of ways. For example, we can use the styles and format tab on the home tab to change the font of a cell or a table.read more, you can call yourself an “Excel Beautician.” Formatting is vital in making the reports look appealing to the end-user or readers. We hope you are well aware of the formatting techniques in the regular worksheet. Formatting through VBA codingConditional formatting is also possible in Excel VBA programming by using the ‘Format Conditions Collection’ macro/procedure. A conditional format is one that is applied only to cells that meet certain criteria, such as values above a certain threshold, positive or negative values, or values with a specific formula, and so on.read more requires a considerable amount of VBA coding languageVBA code refers to a set of instructions written by the user in the Visual Basic Applications programming language on a Visual Basic Editor (VBE) to perform a specific task.read more. This article will show you one of the most underrated formatting techniques, i.e., applying Excel VBA borders.

Table of contents
  • Borders in VBA Excel
    • Examples of Borders in VBA
      • Example #1 – Apply VBA Borders with Coding
      • Example #2 – Change the Border Using VBA Borders Around Method
    • Recommended Articles

VBA Borders

Examples of Borders in VBA

Let us take a look at some examples to understand this in a better manner.

You can download this VBA Borders Excel Template here – VBA Borders Excel Template

Example #1 – Apply VBA Borders with Coding

Creating a macro to apply Excel VBA borders with different styles, making them available as an add-on to the excelAn add-in is an extension that adds more features and options to the existing Microsoft Excel.read more ribbon, makes the job easier whenever we want to apply VBA borders.

Every cell in a worksheet has borders and background colors. By default, every cell has no border and background color.

In the worksheet under the HOME tab, we have a border option. In addition, we have various options if you click on the drop-down list in excelA drop-down list in excel is a pre-defined list of inputs that allows users to select an option.read more.

VBA Borders Example 1

But in VBA, first, we must decide on the cell or range of cells. Then, we will apply the Excel VBA borders formatting styles. So, we can refer to the range of cells or cells using VBA RANGEThe range property of VBA is used to refer to any data, cells, or selection. It is an inbuilt property that allows us to access any part of the worksheet. Using the range property for a single cell-like range is referred to as range cells.read more object. So, for example, if you want to change the border of cell B5, then you can write the code like this.

Range(“B5”)

Then, we need to access the “Borders” property.

Code:

Sub Border_Example1()

  Range("B5").Bo

End Sub

VBA Borders Example 1-1

After applying the Excel VBA “Borders” property, we must open parenthesis to see all border formatting options..

Code:

Sub Border_Example1()

  Range("B5").Borders(

End Sub

VBA Borders Example 1-2

Here, we have xlDiagonalDown, xlDiagonalUp, xlEdgeBottom, xlEdgeLeft, xlEdgeRight, xlEdgeTop, xlInsideHorizontal, and xlInsideVertical.

VBA Borders Example 1-3

After selecting the border style, we need to select the characteristic we want to work with. One of the characters we need to use here is “LineStyle,” so select the “LineStyle” property.

Code:

Sub Border_Example1()

  Range("B5").Borders (xlEdgeBottom).li

End Sub

VBA Borders Example 1-4

Once the line style property is selected, we need to set the line style type of line or type of borders we will apply in VBA.

Put an equal sign and select “XlLineStyle” enumeration.

Code:

Sub Border_Example1()

  Range("B5").Borders(xlEdgeBottom).LineStyle =XlLineStyle.

End Sub

VBA Borders Example 1-5

Put a dot to see all the available border styles.

Code:

VBA Borders Example 1-6

We have many options here. xlContinuous, xldash, xlDashDot, xlDashDotDot, xlDot, xlDouble, XlLineStyleNone, and xlSlantDashDot.

Now, we have selected the option of “xlDouble.”

Code:

Sub Border_Example1()

  Range("B5").Borders(xlEdgeBottom).LineStyle = XlLineStyle.xlDouble

End Sub

Now, if I run the code, it will apply the Double line to the bottom of cell B5.

VBA Borders Example 1-7

Line Type: “xlContinuous”.

Code:

Sub Border_Example1()

  Range("B5").Borders(xlEdgeBottom).LineStyle = XlLineStyle.xlContinuous

End Sub

Result:

VBA Borders Example 1-8

Line Type: “clash.”

Code:

Sub Border_Example1()

  Range("B5").Borders(xlEdgeBottom).LineStyle = XlLineStyle.xlDash

End Sub

Result:

VBA Borders Example 1-9

Line Type: “xlDashDot.”

Code:

Sub Border_Example1()

  Range("B5").Borders(xlEdgeBottom).LineStyle = XlLineStyle.xlDashDot

End Sub

Result:

VBA Borders Example 1-10

Line Type: “xlDashDotDot”.

Code:

Sub Border_Example1()

  Range("B5").Borders(xlEdgeBottom).LineStyle = XlLineStyle.xlDashDotDot

End Sub

Result:

VBA Borders Example 1-11

Line Type: “xlDot.”

Code:

Sub Border_Example1()

  Range("B5").Borders(xlEdgeBottom).LineStyle = XlLineStyle.xlDot

End Sub

Result:

Example 1-12

Line Type: “xlLineStyleNone”.

Code:

Sub Border_Example1()

  Range("B5").Borders(xlEdgeBottom).LineStyle = XlLineStyle.xlLineStyleNone

End Sub

Result:

Example 1-13

It will remove the border of the specified cell.

Line Type: “xlSlantDashDot”.

Code:

Sub Border_Example1()

  Range("B5").Borders(xlEdgeBottom).LineStyle = XlLineStyle.xlSlantDashDot

End Sub

Result:

Example 1-14

Example #2 – Change the Border Using VBA Borders Around Method

We can also change the cell’s borders using the VBA Borders Around method. Once we mention the range of cells or cells, we need to access the VBA Borders Around method.

Example 2

Open parenthesis to see all the parameters.

Range(“B5”).BorderAround([Line Style], [Weight as xlBorderWeight], [ColorIndex], [Color], [Theme Color])

We can mention the line style, color, border weight, and many more things we can do with this method.

Code:

Sub Border_Example1()

  Range("B5").BorderAround LineStyle:=xlContinuous, Weight:=xlThick

End Sub

It will change the Line Style to xlContinuous.

LineStyle:=xlContinuous

The weight of the Border is thick.

Weight:=xlThick

And the result of this code is as below.

Example 2-1

Like this, using Excel VBA Borders and Border Around property and method, we can change the border and elements of borders through VBA coding.

Recommended Articles

This article has been a guide to VBA Borders. Here, we learn how to set borders with Excel VBA coding, practical examples, and downloadable code templates. You may also have a look at other articles related to Excel VBA: –

  • What are Global Variables in Excel VBA?
  • Examples to Create a Pivot Table in VBA
  • Excel VBA End
  • Conditional Formatting for Blank Cells

  • Границы в Excel VBA

Границы в Excel VBA

Границы являются необходимой частью каждого листа или в любом файле слова. Границы отделяют данные друг от друга, они показывают, какая часть данных относится к какой области, чтобы избежать путаницы. Кроме того, выглядит хорошо иметь границы в нашей таблице данных. В листе Excel у нас есть опции для вставки границ вручную, но как мы это сделаем в VBA, мы узнаем из этой статьи.

Чтобы применить границы в VBA, нам нужен доступ к свойствам ячейки, и в текущем случае нам нужно получить доступ к границам. Теперь нам нужно помнить, что в свойствах границ доступны различные типы опций. Например, диагональ по вертикали вниз и т. Д. Мы рассмотрим некоторые из них здесь.

Как использовать границы в VBA

Чтобы использовать границы в VBA, нам нужно выполнить следующие шаги:

  1. Используйте метод диапазона для доступа к значению диапазона.
  2. Используйте метод border, если мы хотим отформатировать только часть ячейки или границы вокруг, если мы хотим покрыть ячейки границами.
  3. Используйте разные стили линий, чтобы границы выглядели приятнее.

Вы можете скачать этот шаблон VBA Border Excel здесь — Шаблон VBA Border Excel

Теперь давайте рассмотрим несколько примеров и посмотрим, как мы можем вставить границу в ячейку Excel.

Пример № 1 — Границы VBA

Давайте использовать основные перечисления, которые предоставляет нам VBA, когда мы вводим ключевые слова, чтобы увидеть границы. Мы поместим границы в ячейку A1 и увидим результат.

Шаг 1: Перейдите на вкладку разработчика, откройте Visual Basic, и мы увидим VB Editor.

Шаг 2: Вставьте новый модуль из вкладки вставки. Нажмите на модуль, который мы только что вставили, который откроет окно кода для нас,

Шаг 3: Объявите подфункцию, которая означает именование нашего макроса.

Код:

 Sub Sample () End Sub 

Шаг 4. Сначала активируйте лист, чтобы использовать его свойства с помощью приведенного ниже кода.

Код:

 Sub Sample () Worksheets ("Sheet1"). Активировать End Sub 

Шаг 5: Теперь давайте попробуем изменить границу ячейки A1. Используйте метод диапазона, как показано ниже,

Код:

 Sub Sample () Worksheets ("Sheet1"). Активировать диапазон ("A1"). Границы End Sub 

Шаг 6: Выберите свойства границ, что даст нам возможность выбрать стиль границы следующим образом:

Код:

 Sub Sample () Worksheets ("Sheet1"). Активировать диапазон ("A1"). Границы (End Sub 

Шаг 7: Выберите первую опцию, которая является Xdiagonalup в качестве стиля рамки.

Код:

 Sub Sample () Worksheets ("Sheet1"). Активировать диапазон ("A1"). Границы (xlDiagonalUp) End Sub 

Шаг 8: Теперь нам нужно использовать стиль линий для границ. После оператора точка (.) Используйте перечисления для стиля линии следующим образом:

Код:

 Sub Sample () Worksheets ("Sheet1"). Активировать диапазон ("A1"). Границы (xlDiagonalUp) .LineStyle End Sub 

Шаг 9: Тип = знак, и он даст нам многочисленные перечисления для линейного стиля следующим образом:

Код:

 Sub Sample () Worksheets ("Sheet1"). Активировать диапазон ("A1"). Границы (xlDiagonalUp) .LineStyle = XlLineStyle.xlDouble End Sub 

Шаг 10: Давайте запустим приведенный выше код, нажав F5, и увидим результат на листе 1 следующим образом:

Пример №2 — Граница VBA

Теперь давайте воспользуемся другим методом для стиля границы в VBA.

Шаг 1: У нас уже вставлен наш модуль. Назовите в нем макрос с помощью другой подфункции следующим образом:

Код:

 Sub Sample1 () End Sub 

Шаг 2: Активируйте лист с помощью следующего кода, написанного ниже,

Код:

 Sub Sample1 () Worksheets ("Sheet1"). Активировать End Sub 

Шаг 3: Теперь позвольте использовать метод range, чтобы активировать свойства границы, как показано ниже,

Код:

 Sub Sample1 () Рабочие листы ("Sheet1"). Активировать диапазон ("C1"). Границы (xlEdgeBottom) .LineStyle = XlLineStyle.xlDashDot End Sub 

Шаг 4: Теперь запустите приведенный выше код и посмотрите результат на листе 1 следующим образом:

Пример № 3 — Граница VBA

Давайте попробуем еще несколько стилей границ и линий в другой ячейке. На этот раз мы будем использовать его в диапазоне ячеек C5: E6.

Шаг 1: У нас уже вставлен наш модуль. Назовите в нем макрос с помощью другой подфункции следующим образом:

Код:

 Sub Sample2 () End Sub 

Шаг 2: Активируйте лист с помощью следующего кода, написанного ниже,

Код:

 Sub Sample2 () Worksheets ("Sheet3"). Активировать End Sub 

Шаг 3: Теперь позвольте использовать метод range, чтобы активировать свойства границы, как показано ниже,

Код:

 Sub Sample2 () Рабочие листы ("Sheet3"). Активировать диапазон ("C5: E6"). Границы (xlEdgeTop) .LineStyle = XlLineStyle.xlSlantDashDot End Sub 

Шаг 4: Теперь запустите приведенный выше код и посмотрите результат на листе 1 следующим образом:

Пример № 4 — Граница VBA

Теперь в этом примере мы будем использовать границы вокруг ячейки, охватывающей всю ячейку. Раньше мы ограничивали только одну часть камеры. Рассмотрим следующие данные, которые мы имеем на листе 2, следующим образом:

Давайте попробуем использовать границу вокруг этих данных, используя границу вокруг метода.

Шаг 1: У нас уже вставлен наш модуль. Назовите в нем макрос с помощью другой подфункции следующим образом:

Код:

 Sub Sample3 () End Sub 

Шаг 2: Активируйте лист с помощью следующего кода, написанного ниже,

Код:

 Sub Sample3 () Worksheets ("Sheet2"). Активировать End Sub 

Шаг 3: Теперь давайте используем метод range, чтобы активировать границу вокруг свойств, таких как показано ниже,

Код:

 Sub Sample3 () Рабочие листы ("Sheet2"). Активировать диапазон ("A1: B6"). BorderAround End Sub 

Шаг 4: Теперь используйте стиль линии и толщину линии следующим образом,

Код:

 Sub Sample3 () Worksheets ("Sheet2"). Активировать диапазон ("A1: B6"). BorderAround LineStyle: = xlContinuous, Weight: = xlThick End Sub 

Шаг 5: Запустите приведенный выше код, нажав F5, и просмотрите результат на листе 2 следующим образом:

То, что нужно запомнить

  • Граница вокруг используется для покрытия всех частей клеток.
  • Метод Borders используется для покрытия только части ячейки.
  • X Linestyles используются для использования различных типов стилей в границах.
  • Вставка границ аналогична форматированию данных.
  • Границы в VBA аналогичны границам на рабочем листе, нам нужно запомнить ключевое слово для его использования.

Рекомендуемые статьи

Это руководство по границам VBA. Здесь мы обсудим, как использовать границы в Excel VBA, а также с практическими примерами и загружаемым шаблоном Excel. Вы также можете просмотреть наши другие предлагаемые статьи —

  1. Как использовать функцию VBA IsNumeric?
  2. Создание поля со списком в Excel
  3. Вставьте флажок в Excel
  4. Функция VBA UCASE в Excel
  5. VBA Worksheets (шаблон Excel)

 

A-Soft

Пользователь

Сообщений: 13
Регистрация: 19.06.2014

Интересная задачка — на каждой странице листа выделить нижнюю строку и установить нижнюю границу.
Маркорекордер не поможет — в разных файлах по-разному располагаются границы страниц.
К тому же в процессе редактирования границы переношу (в страничном режиме)
Надо ловить именно установленную мной или автоматическую нижнюю границу печатной страницы.
Нужен макрос.
Пример:

Прикрепленные файлы

  • Книга1.xls (48.5 КБ)

Изменено: A-Soft21.06.2014 09:42:26

 

ктулху

Пользователь

Сообщений: 9709
Регистрация: 22.12.2012

#2

21.06.2014 10:21:55

как-то так…

Код
Sub t()
  For Each ws In ActiveWorkbook.Worksheets
    nc = ws.Range(ws.PageSetup.PrintArea).Columns.Count
    For Each p In ws.HPageBreaks
      p.Location.Offset(-1).Resize(, nc).Borders(xlEdgeBottom).LineStyle = xlContinuous
      p.Location.Resize(, nc).Borders(xlEdgeTop).LineStyle = xlContinuous
    Next
    ws.Range(ws.PageSetup.PrintArea).Borders(xlEdgeBottom).LineStyle = xlContinuous
  Next
End Sub

на каждой странице должна быть задана область печати.
ну или код усложнять надо.

Изменено: ктулху21.06.2014 10:24:15

фрилансер Excel, VBA — контакты в профиле
«Совершенствоваться не обязательно. Выживание — дело добровольное.» Э.Деминг

 

A-Soft

Пользователь

Сообщений: 13
Регистрация: 19.06.2014

ругается на
   nc = ws.Range(ws.PageSetup.PrintArea).Columns.Count

 

ктулху

Пользователь

Сообщений: 9709
Регистрация: 22.12.2012

#4

21.06.2014 10:28:50

читать умеем?

Цитата
ктулху пишет: на каждой странице должна быть задана область печати.

фрилансер Excel, VBA — контакты в профиле
«Совершенствоваться не обязательно. Выживание — дело добровольное.» Э.Деминг

 

A-Soft

Пользователь

Сообщений: 13
Регистрация: 19.06.2014

умеем. У меня вид-страничный режим — область печати белое, за областью печати — серое.
Перезадал область печати — тот же результат.
Или имеется ввиду что каждую страницу отдельно добавлять к области печати?

 

ктулху

Пользователь

Сообщений: 9709
Регистрация: 22.12.2012

#6

21.06.2014 10:42:29

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

приходится идти на ухищрения — добавить в начало цикла.

Код
ws.Activate
 ws.Parent.Windows(1).View = xlPageBreakPreview
 ws.Parent.Windows(1).View = xlNormalView

пс. возможно, найдётся способ и получше.

фрилансер Excel, VBA — контакты в профиле
«Совершенствоваться не обязательно. Выживание — дело добровольное.» Э.Деминг

 

ктулху

Пользователь

Сообщений: 9709
Регистрация: 22.12.2012

#7

21.06.2014 10:45:43

Цитата
A-Soft пишет: каждую страницу отдельно добавлять к области печати?

это как?
у меня на Вашем файле для Вашего листа всё отработало и без «ухищрений».
для вновь созданного листа — вручную задал область печати и добавил «ухищрения» в код.
тоже работает.

фрилансер Excel, VBA — контакты в профиле
«Совершенствоваться не обязательно. Выживание — дело добровольное.» Э.Деминг

 

A-Soft

Пользователь

Сообщений: 13
Регистрация: 19.06.2014

Так он мне вид переключил на обычный и поменял параметры страницы. И все равно обругал
   nc = ws.Range(ws.PageSetup.PrintArea).Columns.Count
может объявить переменную nc?

 

ктулху

Пользователь

Сообщений: 9709
Регистрация: 22.12.2012

не знаю… может быть, от версии Excel зависит…
файлик.
код чуть отличается. но это несущественно.

Прикрепленные файлы

  • hpb.rar (20.64 КБ)

фрилансер Excel, VBA — контакты в профиле
«Совершенствоваться не обязательно. Выживание — дело добровольное.» Э.Деминг

 

A-Soft

Пользователь

Сообщений: 13
Регистрация: 19.06.2014

Ваш файл работает, но если делаю альбомную ориентацию страницы — макрос вылетает в том же месте и в Вашем файле.
*Я одним маркосом задаю многие параметры страницы, потом немного корректирую границы между страницами (по смыслу),
а потом приходится тупо рисовать нижнюю границу у ячеек. Настройки страницы сбивать никак нельзя.

 

V

Пользователь

Сообщений: 5018
Регистрация: 22.12.2012

#11

21.06.2014 11:05:30

Цитата
A-Soft пишет: может объявить переменную nc?

если перед кодом есть надпись Option Explicit то да объявить нужно или удалить эту строчку.

 

A-Soft

Пользователь

Сообщений: 13
Регистрация: 19.06.2014

Странно. nc не объявлял, просто в лоб указал количество столбцов (оно у меня везде одинаковое),
макрос вылетел на строке

   ws.Range(ws.PageSetup.PrintArea).Borders(xlEdgeBottom).LineStyle = xlContinuous

При этом границы нарисовал там где надо!!!

Вы не могли бы прокомментровать строки макроса, а то я не очень понимаю
что там происходит. Код профессиональный, а еще новичок.
Может сам что наэкспериментирую?

 

ктулху

Пользователь

Сообщений: 9709
Регистрация: 22.12.2012

#13

21.06.2014 11:12:50

Цитата
A-Soft пишет:
если делаю альбомную ориентацию страницы — макрос вылетает в том же месте и в Вашем файле

мне не удалось воспроизвести такую ошибку.

фрилансер Excel, VBA — контакты в профиле
«Совершенствоваться не обязательно. Выживание — дело добровольное.» Э.Деминг

 

A-Soft

Пользователь

Сообщений: 13
Регистрация: 19.06.2014

Run-time error ‘1004’:
Application-defined or object-defined error.
Вот эта ошибка выскакивает.
(у меня офис 2013, вроде профессиональный)

Изменено: A-Soft21.06.2014 11:21:19

 

ктулху

Пользователь

Сообщений: 9709
Регистрация: 22.12.2012

#15

21.06.2014 11:22:30

да там и комментировать-то нечего.

Код
Sub t()
  For Each ws In ActiveWorkbook.Worksheets ' цикл по всем рабочим листам активной книги
    ws.Activate ' делаем активным очередной лист
                ' это "некрасиво", но приходится
    
    s = ws.PageSetup.PrintArea ' область печати (адрес)
    If Len(s) Then
      nc = ws.Range(s).Columns.Count ' число столбцов в области печати
      ws.Parent.Windows(1).View = xlPageBreakPreview ' переводим лист в режим разметки _
        (чтобы появились автоматические разрывы страниц)
    
      For Each p In ws.HPageBreaks ' цикл о всем горизонтальным разрывам страниц
        
        With p.Location.Offset(-1).Resize(, nc).Borders(xlEdgeBottom)
        ' берем адрес (p.Location) очередного разрыва, смещаемся на одну ячейку вверх _
          (Offset(-1)), увеличиваем в ширину на число столбцов области печати (Resize(, nc)), _
          работаем с нижней границей (.Borders(xlEdgeBottom))
          .LineStyle = xlContinuous ' стиль линии (сплошная)
          .Weight = xlThin ' тонкая
          .ColorIndex = xlAutomatic ' цвет
        End With
        
        With p.Location.Resize(, nc).Borders(xlEdgeTop)
        ' то же с верхней границей соседних ячеек (нет смещения)
          .LineStyle = xlContinuous
          .Weight = xlThin
          .ColorIndex = xlAutomatic
        End With
      Next
      
      ws.Range(ws.PageSetup.PrintArea).Borders(xlEdgeBottom).LineStyle = xlContinuous
      ' то же с нижней границей области печати
    End If
    ws.Parent.Windows(1).View = xlNormalView
    ' возвращаемся в обычный режим
  Next
End Sub

Изменено: ктулху21.06.2014 11:29:56

фрилансер Excel, VBA — контакты в профиле
«Совершенствоваться не обязательно. Выживание — дело добровольное.» Э.Деминг

 

ктулху

Пользователь

Сообщений: 9709
Регистрация: 22.12.2012

#16

21.06.2014 11:23:38

Цитата
V пишет: если перед кодом есть надпись   Option Explicit  

то код не «выбивает» при выполнении.
код просто тупо не компилируется :)

фрилансер Excel, VBA — контакты в профиле
«Совершенствоваться не обязательно. Выживание — дело добровольное.» Э.Деминг

 

ктулху

Пользователь

Сообщений: 9709
Регистрация: 22.12.2012

ну давайте добавим проверку на то, задана ли область печати
добавил в код в сообщении #15

Изменено: ктулху21.06.2014 11:30:44

фрилансер Excel, VBA — контакты в профиле
«Совершенствоваться не обязательно. Выживание — дело добровольное.» Э.Деминг

 

A-Soft

Пользователь

Сообщений: 13
Регистрация: 19.06.2014

Во как!!! Есть что комментировать!
Мне-то надо это сделать только на активном листе, а не на всех.
Листы у меня есть несколько для печати, а есть служебные — с формулами.
Просто уже давно все так скомпоновано.
Ваши комментарии, кстати ОЧЕНЬ важны! Как новичок — не везде понимаю что где и как,
а так есть отправная точка для понимания этой области.
Лучше любого учебника. :)

 

ктулху

Пользователь

Сообщений: 9709
Регистрация: 22.12.2012

#19

21.06.2014 11:32:09

моя вина. невнимательно прочитал условие.

Цитата
A-Soft пишет:
на каждой странице листа

:oops:

фрилансер Excel, VBA — контакты в профиле
«Совершенствоваться не обязательно. Выживание — дело добровольное.» Э.Деминг

 

Михаил С.

Пользователь

Сообщений: 10514
Регистрация: 21.12.2012

#20

22.06.2014 00:53:48

Цитата
ктулху пишет:
а вообще-то работа с разделителями в Excel подглючивает.

Для корректной работы с разделителями страниц лист должен быть в режиме разметки страниц.
Если вид менять нельзя (не понятно, почему?), то запомнить состояние, перейти в режим разметки, выполнить все что нужно с разделителями, и потом вернуть нужный вид.
Область печати — постольку, поскольку…

Границы таблицы (листа) найдены. Спасибо.

qwertyhp
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя

 
Сообщения: 156
Зарегистрирован: 07.10.2009 (Ср) 15:02
Откуда: Москва

Границы таблицы (листа) найдены. Спасибо.

Читаю из закрытой книги так:

Код: Выделить всё
    Public C1 As Object    ' Приложение
    Public W1 As Object    ' Файл
    Public S1 As Object    ' Лист

    Set C1 = CreateObject("Excel.Application") ' Создаём объект - суть приложение Excel :
    Set W1 = C1.Workbooks.Open(path0 & file)     ' Далее на этой базе задаём (но уже имеющуюся на диске) рабочую книгу :

For k = 1 To C1.Sheets.Count
    Set S1 = W1.Worksheets(k)           ' И, наконец - на базе первого и второго создаём рабочий лист

' Заполняем таблицу данными из закрытой книги в обычном листе :
    For j = 1 To 5
        For i = 1 To 1000 ' вертикальный просмотр листа :
            yyy = S1.Cells(i, j)
            If Trim$(yyy) <> "0" Then
                Sheets("InComing").Cells(i, j) = yyy
            End If
        Next i
    Next j

    Set S1 = Nothing                    ' Лист
Next k

Увы — таблицу приходится читать, не зная заранее её размеры по вертикали и горизонтали — что вызывает лишние циклы. А вот как найти границы таблицы (листа) в ЗАКРЫТОЙ книге — не знаю. Например, для обычного листа последняя строка на листе находится как

Код: Выделить всё
iLastRow& = Cells(ActiveSheet.Rows.Count, 1).End(xlUp).Row

А вот как то же самое сделать для закрытой книги? Как записать xlUp? Что ни пробывал — не выходит. Может, кто знает?
Спасибо.

Последний раз редактировалось qwertyhp 25.06.2010 (Пт) 1:54, всего редактировалось 2 раз(а).

Пятачок Forever! :)


SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя

 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар
  • ICQ

Re: Как найти границы таблицы (листа) в ЗАКРЫТОЙ книге?

Сообщение SLIM » 22.06.2010 (Вт) 6:30

Что значит доля закрытой? Книга по любому открывается.

По поводу вычисления границы. Запиши макрос где будешь перемещаться по таблице с помощью горячих клавиш Ctrl+Righr и Ctrl+Down.
Код похож будет на твой. Работать будет точно.

Пишите жизнь на чистовик…..переписать не удастся…..


alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Как найти границы таблицы (листа) в ЗАКРЫТОЙ книге?

Сообщение alibek » 22.06.2010 (Вт) 8:15

SLIM писал(а):По поводу вычисления границы. Запиши макрос где будешь перемещаться по таблице с помощью горячих клавиш Ctrl+Righr и Ctrl+Down.
Код похож будет на твой. Работать будет точно.

Работать будет неправильно.
Потому что автору нужно не Sheet.Rows.Count, а Sheet.UsedRange.Rows.Count.

Lasciate ogni speranza, voi ch’entrate.


Alec
Бывалый
Бывалый
 
Сообщения: 275
Зарегистрирован: 31.08.2008 (Вс) 0:15
Откуда: Ростов-на-Дону
  • ICQ

Re: Как найти границы таблицы (листа) в ЗАКРЫТОЙ книге?

Сообщение Alec » 22.06.2010 (Вт) 9:37

qwertyhp писал(а):Как записать xlUp?

Вообще xlUp — константа.
Открываешь Excel, VBA, ObjectBrowser и ищешь в нем xlUp.
У меня получилось xlUp=-4162 (&HFFFFEFBE)
Объявляй у себя эту константу и пользуйся…

Код: Выделить всё
Const xlUp = -4162

Иногда лучше вовремя остановиться…
И начать заново!


alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Как найти границы таблицы (листа) в ЗАКРЫТОЙ книге?

Сообщение alibek » 22.06.2010 (Вт) 9:53

Только использовать надо не xlUp, а xlLastCell.

Lasciate ogni speranza, voi ch’entrate.


SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя

 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар
  • ICQ

Re: Как найти границы таблицы (листа) в ЗАКРЫТОЙ книге?

Сообщение SLIM » 22.06.2010 (Вт) 18:27

alibek писал(а):Работать будет неправильно.
Потому что автору нужно не Sheet.Rows.Count, а Sheet.UsedRange.Rows.Count.

Ему нужен используемый диапазон а не весь. Весь мы и так знаем.

Пишите жизнь на чистовик…..переписать не удастся…..


qwertyhp
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя

 
Сообщения: 156
Зарегистрирован: 07.10.2009 (Ср) 15:02
Откуда: Москва

Re: Как найти границы таблицы (листа) в ЗАКРЫТОЙ книге?

Сообщение qwertyhp » 23.06.2010 (Ср) 3:38

Боюсь, что задача оказалась несколько хитрее. Запись вида

Код: Выделить всё
iLastRow& = Cells(ActiveSheet.Rows.Count, 1).End(xlUp).Row

не проходит хотя бы уже потому, что никакой ActiveSheet в наличии нет — т.к. делается попытка прочитать файл, не открывая его в Excel (SLIM, говоря о чтении из закрытого файла, я имел ввиду именно это. Естественно, на диске он открывается). Попытка записи

Код: Выделить всё
iLastRow& = Cells(S1.Rows.Count, 1).End(-4162).Row

и аналогичные в различных вариациях (и через константу) успеха не принесли — значение выдаётся либо 1, либо ошибка.
Ага. Запись

Код: Выделить всё
iLastRow& = S1.Rows.Count

выдала значение 65536. Уже лучше))))).
…Нет. Не сдаётся…

Пятачок Forever! :)


SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя

 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар
  • ICQ

Re: Как найти границы таблицы (листа) в ЗАКРЫТОЙ книге?

Сообщение SLIM » 23.06.2010 (Ср) 6:28

Активируй лист по номеру самого листа.
Я ежедневно обрабатываю порядка 400 файлов таким образом.
Берешь лист (если знаешь какой индекс листа), выделяешь первую используемую ячейку (у меня всегда самая первая), далее Selection.End(xlDown).Select и в Selection.Cell.Row (по-моему) получаешь самую нижнюю ячейку используемого диапазона. То же самое с самой правой.
Посмотрю сегодня скрипт на работе.

qwertyhp писал(а):не проходит хотя бы уже потому, что никакой ActiveSheet в наличии нет — т.к. делается попытка прочитать файл, не открывая его в Excel (SLIM, говоря о чтении из закрытого файла, я имел ввиду именно это. Естественно, на диске он открывается). Попытка записи

Как это нет? А ты откуда собственно запускаешь этот скрипт?

Пишите жизнь на чистовик…..переписать не удастся…..


Alec
Бывалый
Бывалый
 
Сообщения: 275
Зарегистрирован: 31.08.2008 (Вс) 0:15
Откуда: Ростов-на-Дону
  • ICQ

Re: Как найти границы таблицы (листа) в ЗАКРЫТОЙ книге?

Сообщение Alec » 23.06.2010 (Ср) 14:08

qwertyhp писал(а):делается попытка прочитать файл, не открывая его в Excel

Интересно, а это что делает?

Код: Выделить всё
    Set C1 = CreateObject("Excel.Application")
    Set W1 = C1.Workbooks.Open(path0 & file)

Иногда лучше вовремя остановиться…
И начать заново!


qwertyhp
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя

 
Сообщения: 156
Зарегистрирован: 07.10.2009 (Ср) 15:02
Откуда: Москва

Re: Как найти границы таблицы (листа) в ЗАКРЫТОЙ книге?

Сообщение qwertyhp » 23.06.2010 (Ср) 22:02

2 Alex: не открывая в Excel — в смысле не вызывая экспонирования страницы Книги Excel на экране монитора, а также — и визуального интерфейса пользователя упомянутого табличного процессора. Уважаемый Alex. В человеческих языках есть конструкции, которые интерпретируются и воспринимаются правильно даже в тех случаях, когда с точки зрения используемого языка смысл выражения на этом же языке отсутствует. Например, реплика «Да нет, наверное«. Если читать то, что написано — то должно происходить зависание))). Если читать то, что что интуитивно понятно — то все в порядке. В контексте обсуждаемой проблемы понятно, что файл открывается — просто визуально для пользователя ничего на экране не происходит.
2 SLIM: ничего заранее о файле не известно: по E-Mail приходит файл, сохраняется в папку, программа периодически сканирует эту папку, если находит там файл(ы) Excel — читает его(их) лист за листом в куда-нибудь (открытый для визуального просмотра файл, массив, etc.) — и прочитав лист, обрабатывает его. Вот в чём дело… и для увеличения скорости считывания желательно знать нижнюю и правую границы предполагаемой таблицы на листе.

Пятачок Forever! :)


Alec
Бывалый
Бывалый
 
Сообщения: 275
Зарегистрирован: 31.08.2008 (Вс) 0:15
Откуда: Ростов-на-Дону
  • ICQ

Re: Как найти границы таблицы (листа) в ЗАКРЫТОЙ книге?

Сообщение Alec » 23.06.2010 (Ср) 23:45

По-моему тебе нужно вот это:

Код: Выделить всё
  Const xlLastCell = 11
  MsgBox S1.Cells.SpecialCells(xlLastCell).Row 'номер строки
  MsgBox S1.Cells.SpecialCells(xlLastCell).Column 'номер столбца

Что касается

qwertyhp писал(а):2 Alex: не открывая в Excel — в смысле не вызывая экспонирования страницы Книги Excel на экране монитора, а также — и визуального интерфейса пользователя упомянутого табличного процессора. Уважаемый Alex. В человеческих языках есть конструкции, которые интерпретируются и воспринимаются правильно даже в тех случаях, когда с точки зрения используемого языка смысл выражения на этом же языке отсутствует. Например, реплика «Да нет, наверное». Если читать то, что написано — то должно происходить зависание))). Если читать то, что что интуитивно понятно — то все в порядке. В контексте обсуждаемой проблемы понятно, что файл открывается — просто визуально для пользователя ничего на экране не происходит.

мой вопрос касался как раз того, понимаешь ли ты, что делаешь. В частности:

qwertyhp писал(а):никакой ActiveSheet в наличии нет — т.к. делается попытка прочитать файл, не открывая его в Excel

Независимо от того, показан Excel на экране или нет, при наличии открытой в нем книги, имеющей хотя-бы один видимый (Visible=true) лист, у этой книги есть ActiveSheet, точнее

Код: Выделить всё
W1.ActiveSheet

PS. Примеры кода показаны в контексте объявленных тобой в первом посте переменных.
PPS. Конструкцию

Код: Выделить всё
For k = 1 To C1.Sheets.Count 'кстати, здесь ошибка, наверное W1.Sheets.Count
    Set S1 = W1.Worksheets(k)

' ...
    Set S1 = Nothing
Next k

если тебе не нужно значение k, можно написать:

Код: Выделить всё
For Each S1 In W1.Worksheets
'...
Next S1

Иногда лучше вовремя остановиться…
И начать заново!


qwertyhp
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя

 
Сообщения: 156
Зарегистрирован: 07.10.2009 (Ср) 15:02
Откуда: Москва

Re: Как найти границы таблицы (листа) в ЗАКРЫТОЙ книге?

Сообщение qwertyhp » 24.06.2010 (Чт) 0:46

2 Alex: Ур-р-ра, заработало ! ! ! ! ! ! !
По поводу ActiveSheet — возможно, я недопонимаю, я знаю…(((; «…кстати, здесь ошибка, наверное W1.Sheets.Count» — согласен с Вами, и работает эта ошибка корректно, вероятно, лишь только потому, что пока в файлах встречалось только по одному листу.
…Сейчас проверил код в реальных условиях, на реальных файлах: КОД ЛЕТАЕТ МУХОЙ!!! Alex, спасибо огромное за помощь! И всем спасибо!
P.S. Я изменил заголовок Темы на утвердительный — для тех, кто ищет решение этой же проблемы.

Пятачок Forever! :)


VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя

 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Re: Границы таблицы (листа) в ЗАКРЫТОЙ книге найдены!

Сообщение VVitafresh » 24.06.2010 (Чт) 1:10

qwertyhp, прочитал тему полностью, но так и не понял, почему ты акцентируешь внимание на ЗАКРЫТОЙ книге (еще и в заголовке заглавными выделил)?
Какая разница отображается на экране Excel или нет, если обращение к ячейкам, да и вообще работа с объектной моделью Excel производится абсолютно одинаково (видишь ты лист или не видишь — значения здесь не имеет).

Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.


qwertyhp
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя

 
Сообщения: 156
Зарегистрирован: 07.10.2009 (Ср) 15:02
Откуда: Москва

Re: Границы таблицы (листа) в ЗАКРЫТОЙ книге найдены!

Сообщение qwertyhp » 24.06.2010 (Чт) 13:06

Уважаемый VVitafresh! В нашем мире принято обозначать объекты так, чтобы их можно было отличить от других, в чём-то похожих, объектов. И обозначения эти должны быть разумной длинны и интуитивно понятны. Такова общепринятая практика. Поэтому, если книга Excel не отобраэается на экране — её принято в обиходе называть закрытой. Заглавными буквами — это чтобы сразу бросался в глаза основной предмет рассмотрения.
По поводу общепринятой практики. Скорость света конечна. Свет от Солнца идёт в среднем 8 мин. 15 сек. От Веги (слзвездие Лиры) — 26,4 года. Протяжённость Млечного Пути — около 100 000 световых лет. До галактики в созвездии Андромеды — около 2-х миллионов лет.
Скажите: когда вы видите Туманность Андромеды — вы видите то, что существует сейчас, или то, что отражает существование 2-х миллионолетней давности?
А вот второй вопрос ещё интереснее: а когда вы показываете пальцем на звёзды, и одновременно видите и свою руку (сколько вам лет?) — и то, что было тысячи и тысячи лет назад — вы что — действительно видите реально существующий мир? Вы ухитряетесь видеть и человеческую руку — и звёзды такими и там, какими и где они были, когда человечества на Земле ещё вообще не было!!! То, что вы видите, одновременно никогда не существовало вообще!!! — но вас от этого не плющит и не колбасит. Потому что ваше видение мира привычно, доступно и понятно.
Но видите ли — все остальные объекты — все без исключения! — вы видите в том же режиме, что и далёкий Космос. Различны только рассояния — вот и всё. Принцип же сохраняется. Но вас же это не озадачивает, и вы по-прежнему будете различать реальных людей (ну, как это принято) — и глюки? Или теперь это для Вас вопрос дискуссионный? Наверное, нет. По-старинке общепринято, общепонятно и удобно. А достоверность восприятия картины мира — да и ладно с ней. Ведь верно?
То же самое — и с понятием закрытой книги Excel. Просто есть принятые — для удобства — разговорные и интуитивно понятные построения. Говорят — «две большие разницы» — но не говорят — «две маленькие разницы» — тогда как разница вообще одна. Нет двух разниц.
Из моего заголовка все поняли, о чём шла речь, и помогли — за что им огромное спасибо.
Уважаемые модераторы, извините за некоторый оффтоп.
Кстати, уважаемый VVitafresh! А как бы Вы назвали то, что я назвал «чтением из закрытого файла»? Или, другими словами — переформулируйте мой вопрос так, чтобы он звучал корректно с вашей точки зрения и MS Excel, и влез в заголовок. Если получится — будем использовать вашу семантическую конструкцию.

Пятачок Forever! :)


Alec
Бывалый
Бывалый
 
Сообщения: 275
Зарегистрирован: 31.08.2008 (Вс) 0:15
Откуда: Ростов-на-Дону
  • ICQ

Re: Границы таблицы (листа) в ЗАКРЫТОЙ книге найдены!

Сообщение Alec » 24.06.2010 (Чт) 13:30

Исходя из заголовка темы, возникает мысль, что вопрошающий:
1. Не имеет проблем в определении сабжа в ОТКРЫТОЙ книге
2. Знает как работать с файлом книги EXCEL без ее открытия (т.е. без наличия и использования EXCEL)
3. Не знает как п.п. 1 и 2 использовать вместе.
На самом деле все намного проще:
1. Автор НЕ знает как определить нужные границы вообще
2. Автор не знает как работать с файлом EXCEL без использования EXCEL (что, в общем, логично), но при этом не видит разницы в работе с файлом или работе с объектной моделью EXCEL, поэтому акцентирует (CAPS’ом) внимание на «ЗАКРЫТОЙ книге».
По-моему, тема топика должна выглядеть примерно так: «Как определить границы листа EXCEL». Тогда переписка по поводу закрытой книги не появилась бы, длина треда уменьшилась бы в половину, а решение нашлось бы сразу.
Все это ИМХО.

Иногда лучше вовремя остановиться…
И начать заново!


VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя

 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Re: Границы таблицы (листа) в ЗАКРЫТОЙ книге найдены!

Сообщение VVitafresh » 24.06.2010 (Чт) 13:34

qwertyhp писал(а):…а когда вы показываете пальцем на звёзды, и одновременно видите и свою руку (сколько вам лет?) — и то, что было тысячи и тысячи лет назад — вы что — действительно видите реально существующий мир? …

qwertyhp, и хватило же терпения написать всю эту тарабарщину :) Подобные изыски для Трепа — там можно и пофилософствовать.

qwertyhp писал(а):Кстати, уважаемый VVitafresh! А как бы Вы назвали то, что я назвал «чтением из закрытого файла»? Или, другими словами — переформулируйте мой вопрос так, чтобы он звучал корректно с вашей точки зрения и MS Excel, и влез в заголовок. Если получится — будем использовать вашу семантическую конструкцию.

Я вообще не упоминал бы о ЗАКРЫТОЙ книге, закрытом листе, невидимом Excel’e и т.п., т.к. в данном случае видимость/невидимость НЕ ВЛИЯЕТ на решение задачи.

Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.


iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Границы таблицы (листа) в ЗАКРЫТОЙ книге найдены!

Сообщение iGrok » 24.06.2010 (Чт) 13:55

qwertyhp писал(а):В нашем мире…

Демагог detected.

label:

cli

jmp label


qwertyhp
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя

 
Сообщения: 156
Зарегистрирован: 07.10.2009 (Ср) 15:02
Откуда: Москва

Re: Границы таблицы (листа) в ЗАКРЫТОЙ книге найдены!

Сообщение qwertyhp » 24.06.2010 (Чт) 14:29

2 Alec: назвав тему «Как определить границы листа EXCEL», я бы получил дополнительно решения, не пременимые в моём случае. И получал бы их достаточно долго. Ладно, сформулирую иначе — решения, которые Я бы не сообразил, как применить в моём случае. Мой вопрос был сформулирован некорректно, а вот ваш ответ на него подошёл идеально. Что, собственно, и требовалось. Спасибо.
2 iGrok:

Демагог detected

Изини. Это рассуждения, логика, да-а… А комикс потянешь?

Пятачок Forever! :)


iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Границы таблицы (листа) в ЗАКРЫТОЙ книге найдены!

Сообщение iGrok » 24.06.2010 (Чт) 17:45

qwertyhp писал(а):Изини. Это рассуждения, логика, да-а… А комикс потянешь?

Разумеется. Нарисуй. 8)

З.Ы. Это — не логика. Это — демагогия.
Логика — это то, что в постах Alec и VVitafresh. Ознакомьтесь и примите на вооружение. :wink:

label:

cli

jmp label


qwertyhp
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя

 
Сообщения: 156
Зарегистрирован: 07.10.2009 (Ср) 15:02
Откуда: Москва

Re: Границы таблицы (листа) в ЗАКРЫТОЙ книге найдены!

Сообщение qwertyhp » 24.06.2010 (Чт) 23:05

Вернёмся к Excel. Видите ли — я интуитивно понимаю, что вы правы, усматривая в формулировке моего вопроса слабое знание VB. Конечно, я понимаю, что для получения данных файл открывается так или иначе, хотя — не скрою — полагал, что в разных случаях это делается по-разному. А возможно — и действительно по-разному — за столь короткий срок я ещё не успел обогатиться новыми познаниями в области VB. И вы правы, что для эффективного программирования понимание сущности процессов необходимо.
Но также верно и то, что запрашивающий поддержку человек рассчитывает получить её именно на уровне своего понимания. Вы можете быть совершенно правы в оценке этого уровня как низкого — но либо вы оказываете эту помощь нуждающемуся, либо нет. Как вариант, вы можете оказать эту помощь на уровне понимания вопрошающего — но снабдить её своими комментариями, разъясняющими заблуждения юзера и побуждающего его к более глубокому пониманию процессов. Я, например, просто слабо воспринимаю саму логику VB. В школе я две с половиной четверти не мог понять, что такое «валентность». Меня химичка поднимала, спрашивала определение, ставила «неуд», и на следующем занятии всё повторялось.
И вот однажды я понял, что это такое — «валентность». В итоге в школе по химии у меня было «отлично», в институте — «отлично».
А Илья Муромец до 33-х лет сиднем сидел.
VVitafresh, по поводу терпения писать: пишу я достаточно быстро. И, кстати — почему я стремлюсь читать/писать в файл Excel без открытия активного окна (правильно сказал?))): в поцесе открытия последнего могут возникать ошибки приложения, и если необходимости видеть лист нет, то такой вероятности лучше избегать.

Пятачок Forever! :)


iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Границы таблицы (листа) в ЗАКРЫТОЙ книге найдены!

Сообщение iGrok » 24.06.2010 (Чт) 23:41

qwertyhp, ну и чего?
Ты сам признаёшь, что твои знания далеки от идеала — честь и хвала.
Что НЕ делает тебе чести — так это то, что вместо того, чтобы читать, впитывать знания, и задавать нормальные вопросы, ты начинаешь отстаивать свою точку зрения, основанную на неверных представлениях о действительности. Нет, упорство и упрямство — это, определённо, хорошо. Но не стоит после этого удивляться, что каждый считает делом чести ткнуть тебя носом в твои же ошибки — чисто чтобы гонору поубавилось.

Пойми, тут на форуме тебя лично никто не знает, и против тебя лично никто ничего не имеет. Любая критика основывается только и исключительно на том, что ты пишешь. А пишешь ты по большей части в той или иной степени ерунду. Тебе объясняют, что это ерунда. Тебе объясняют, ПОЧЕМУ это ерунда. А в ответ ты пишешь «я так вижу».

Мой тебе дружеский совет, больше читай, меньше (и исключительно по делу) пиши. Время, сэкономленное на письме, трать на чтение. И всем будет легче.

qwertyhp писал(а):в поцесе открытия последнего могут возникать ошибки приложения, и если необходимости видеть лист нет, то такой вероятности лучше избегать.

Это ты где такой совет вычитал?

label:

cli

jmp label


Alec
Бывалый
Бывалый
 
Сообщения: 275
Зарегистрирован: 31.08.2008 (Вс) 0:15
Откуда: Ростов-на-Дону
  • ICQ

Re: Границы таблицы (листа) в ЗАКРЫТОЙ книге найдены!

Сообщение Alec » 25.06.2010 (Пт) 0:32

И, чтобы совсем понятно было что происходит при исполнении кода:
1. Попробуй во время работы запустить диспетчер задач. Наличие там Excel’я не наводит на мысли?
2. А еще лучше, после

Код: Выделить всё
Set C1 = CreateObject("Excel.Application")

допиши строку

Код: Выделить всё
C1.Visible = True

PS. А «окнами» в Excel называются совершенно другие объекты.
PPS. Советую все же почитать справку по VBA в EXCEL. Некоторые части кода, использующие объектную модель Excel, лучше отлаживать сначала в VBA, а если возникают вопросы по программному выполнению каких-нибудь действий, очень помогает Запись макросов + изучение полученного кода + справка. Удачи!

Иногда лучше вовремя остановиться…
И начать заново!


qwertyhp
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя

 
Сообщения: 156
Зарегистрирован: 07.10.2009 (Ср) 15:02
Откуда: Москва

Re: Границы таблицы (листа) найдены. Спасибо.

Сообщение qwertyhp » 25.06.2010 (Пт) 1:45

Наводит. Особенно, когда в процессе выполнения кода возникают ошибки, файлы не выгружается из памяти, и в Диспетчере возникает множество процессов Excel, и их приходится закрывать вручную.
Заголовок исправил. Буду учить матчасть.

Пятачок Forever! :)



Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot и гости: 1

In this article I will explain how you can modify border thickness and style using VBA for Excel. For more information about creating borders please see Excel VBA, Create Border. In that article I’ve explained how you can create a border for the different sections of a range of cells (i.e top edge, left edge, …)  Therefore I’m assuming readers are familiar with the basics of creating a border.

Jump To:

  • Border Line Styles, .LineStyle
  • Border Line Thickness, .Weight
  • Example

You can download the code and file related to this article here.


Border Line Styles, .LineStyle:

Basically we’ve got 6 different border line styles:

  • Continuous (xlContinuous)
  • Dot, (xlDot)
  • DashDotDot, (xlDashDotDot)
  • Dash, (xlDash)
  • SlantDashDot, (xlSlantDashDot)
  • Double, (xlDouble)

You can see them in the figure below:

Excel VBA Line Styles
The borders were created using the code below:

Sub main()
Dim i As Integer
i = 1
Range(Cells(i, 3), Cells(i, 5)).Borders(xlEdgeBottom).LineStyle _
= xlContinuous
i = 3
Range(Cells(i, 3), Cells(i, 5)).Borders(xlEdgeBottom).LineStyle _
= xlDot
i = 5
Range(Cells(i, 3), Cells(i, 5)).Borders(xlEdgeBottom).LineStyle _
= xlDashDot
i = 7
Range(Cells(i, 3), Cells(i, 5)).Borders(xlEdgeBottom).LineStyle _
= xlDash
i = 9
Range(Cells(i, 3), Cells(i, 5)).Borders(xlEdgeBottom).LineStyle _
= xlSlantDashDot
i = 11
Range(Cells(i, 3), Cells(i, 5)).Borders(xlEdgeBottom).LineStyle _
= xlDouble
End Sub

The code above is equivalent to the code below:

Sub main()
Range("C1:E1").Borders(xlEdgeBottom).LineStyle = xlContinuous
Range("C3:E3").Borders(xlEdgeBottom).LineStyle = xlDot
Range("C5:E5").Borders(xlEdgeBottom).LineStyle = xlDashDot
Range("C7:E7").Borders(xlEdgeBottom).LineStyle = xlDash
Range("C9:E9").Borders(xlEdgeBottom).LineStyle = xlSlantDashDot
Range("C11:E11").Borders(xlEdgeBottom).LineStyle = xlDouble
End Sub


Border Line Thickness, .Weight:

There are 3 different border line thicknesses available:

  • Thin
  • Medium
  • Thick

The different thicknesses can be seen in the figure below:

Excel VBA, Line  Thickness
The code below was used to generate these lines:

Sub main()
Range("C1:E1").Borders(xlEdgeBottom).LineStyle = xlContinuous
Range("C1:E1").Borders(xlEdgeBottom).Weight = xlThin

Range("C3:E3").Borders(xlEdgeBottom).LineStyle = xlContinuous
Range("C3:E3").Borders(xlEdgeBottom).Weight = xlMedium

Range("C5:E5").Borders(xlEdgeBottom).LineStyle = xlContinuous
Range("C5:E5").Borders(xlEdgeBottom).Weight = xlThick

End Sub


Example:

In this example the user selects the line style and line weight using drop down lists in cells A2 and B2. Upon selecting a new value from the drop down lists, the border on the bottom edge of the cells C4:F4 is updated:

Excel VBA, Example, Border, Line style

Excel VBA, Example, Border, Line Thickness
Result:

Excel VBA, Example
The drop down list is created using data validation. For more information about creating drop down lists in Excel please see Excel VBA Drop Down Lists.

The code used for this example can be seen below:

'exectues when the user makes changes to the sheet
Private Sub worksheet_change(ByVal target As Range)
'set line style
If Cells(2, 1) = "Continuous" Then
    Range("C4:F4").Borders(xlEdgeBottom).LineStyle = xlContinuous
ElseIf Cells(2, 1) = "Dot" Then
    Range("C4:F4").Borders(xlEdgeBottom).LineStyle = xlDot
ElseIf Cells(2, 1) = "Dash" Then
    Range("C4:F4").Borders(xlEdgeBottom).LineStyle = xlDash
ElseIf Cells(2, 1) = "DashDotDot" Then
    Range("C4:F4").Borders(xlEdgeBottom).LineStyle = xlDashDotDot
ElseIf Cells(2, 1) = "Dash" Then
    Range("c4:F4").Borders(xlEdgeBottom).LineStyle = xlSlantDashDot
ElseIf Cells(2, 1) = "SlantDashDot" Then
    Range("c4:F4").Borders(xlEdgeBottom).LineStyle = xlDouble
End If

'set the border thickness
If Cells(2, 2) = "Thin" Then
    Range("C4:F4").Borders(xlEdgeBottom).Weight = xlThin
ElseIf Cells(2, 2) = "Medium" Then
    Range("C4:F4").Borders(xlEdgeBottom).Weight = xlMedium
ElseIf Cells(2, 2) = "Thick" Then
    Range("C4:F4").Borders(xlEdgeBottom).Weight = xlThick
End If

End Sub

The main function for this example is a worksheet_change event handler. The event handler executes when the user selects a new value from the drop down lists:

Private Sub worksheet_change(ByVal target As Range)
...
End Sub

The first part of the code checks which value was chosen from the drop down list in cell A2 and adjusts the border style of the bottom edge of the range C4:F4 accordingly:

If Cells(2, 1) = "Continuous" Then
    Range("C4:F4").Borders(xlEdgeBottom).LineStyle = xlContinuous
ElseIf Cells(2, 1) = "Dot" Then
...
End If

The second part of the code checks which value was chosen from the drop down list in cell B2 and adjusts the border thickness of the bottom edge of the range C4:F4 accordingly:

If Cells(2, 2) = "Thin" Then
    Range("C4:F4").Borders(xlEdgeBottom).Weight = xlThin
ElseIf Cells(2, 2) = "Medium" Then
...
End If

You can download the code and file related to this article here.

See also:

  • Excel VBA, Create Border
  • Excel VBA, Format Cells and Ranges Using the Macro Recorder
  • Excel VBA Border Colors
  • Excel VBA, Remove Border
  • Excel VBA, Get Border Properties
  • Excel VBA Borders

If you need assistance with your code, or you are looking for a VBA programmer to hire feel free to contact me. Also please visit my website  www.software-solutions-online.com

Понравилась статья? Поделить с друзьями:
  • Excel vba глобальный массив
  • Excel vba вставить картинку в word
  • Excel vba вставить диапазон в ячейку
  • Excel vba вставить в ворд
  • Excel vba всплывающее окно