Excel макрос присвоить значение ячейке

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

Обращение к конкретной ячейке

Прежде чем читать или записывать значение в ячейке, нужно определиться с тем, как можно указать какая именно ячейка нам необходима.

Полный путь к ячейке A1 в Книге1 на Листе1 можно записать двумя вариантами:

  • С помощью Range
  • С помощью Cells

Пример 1: Обратиться к ячейке A3 находящейся в Книге1 на Листе1

Workbooks("Книга1.xls").Sheets("Лист1").Range("A3") ' Обратиться к ячейке A3
Workbooks("Книга1.xls").Sheets("Лист1").Cells(3, 1) ' Обратиться к ячейке в 3-й строке и 1-й колонке (A3)

Однако, как правило, полный путь редко используется, т.к. макрос работает с Книгой, в которой он записан и часто на активном листе. Поэтому путь к ячейке можно сократить и написать просто:

Пример 2: Обратиться к ячейке A1 в текущей книге на активном листе

Range("A1")
Cells(1, 1)

Если всё же путь к книге или листу необходим, но не хочется его писать при каждом обращении к ячейкам, можно использовать конструкцию With End With. При этом, обращаясь к ячейкам, необходимо использовать в начале «.» (точку).

Пример 3: Обратиться к ячейке A1 и B1 в Книге1 на Листе2.

With Workbooks("Книга1").Sheets("Лист2")
  ' Вывести значение ячейки A1, которая находится на Листе2
  MsgBox .Range("A1")
  ' Вывести значение ячейки B1, которая находится на Листе2
  MsgBox .Range("B1")
End With

Так же, можно обратиться и к активной (выбранной в данный момент времени) ячейке.

Пример 4: Обратиться к активной ячейке на Листе3 текущей книги.

Application.ActiveCell ' полная запись
ActiveCell ' краткая запись

Чтение значения из ячейки

Есть 3 способа получения значения ячейки, каждый из которых имеет свои особенности:

  • Value2 — базовое значение ячейки, т.е. как оно хранится в самом Excel-е. В связи с чем, например, дата будет прочтена как число от 1 до 2958466, а время будет прочитано как дробное число. Value2 — самый быстрый способ чтения значения, т.к. не происходит никаких преобразований.
  • Value — значение ячейки, приведенное к типу ячейки. Если ячейка хранит дату, будет приведено к типу Date. Если ячейка отформатирована как валюта, будет преобразована к типу Currency (в связи с чем, знаки с 5-го и далее будут усечены).
  • Text — визуальное отображение значения ячейки. Например, если ячейка, содержит дату в виде «число месяц прописью год», то Text (в отличие от Value и Value2) именно в таком виде и вернет значение. Использовать Text нужно осторожно, т.к., если, например, значение не входит в ячейку и отображается в виде «#####» то Text вернет вам не само значение, а эти самые «решетки».

По-умолчанию, если при обращении к ячейке не указывать способ чтения значения, то используется способ Value.

Пример 5: В ячейке A1 активного листа находится дата 01.03.2018. Для ячейки выбран формат «14 марта 2001 г.». Необходимо прочитать значение ячейки всеми перечисленными выше способами и отобразить в диалоговом окне.

MsgBox Cells(1, 1)        ' выведет 01.03.2018
MsgBox Cells(1, 1).Value  ' выведет 01.03.2018
MsgBox Cells(1, 1).Value2 ' выведет 43160
MsgBox Cells(1, 1).Text   ' выведет 01 марта 2018 г.

Dim d As Date
d = Cells(1, 1).Value2    ' числовое представление даты преобразуется в тип Date
MsgBox d                  ' выведет 01.03.2018

Пример 6: В ячейке С1 активного листа находится значение 123,456789. Для ячейки выбран формат «Денежный» с 3 десятичными знаками. Необходимо прочитать значение ячейки всеми перечисленными выше способами и отобразить в диалоговом окне.

MsgBox Range("C1")        ' выведет 123,4568
MsgBox Range("C1").Value  ' выведет 123,4568
MsgBox Range("C1").Value2 ' выведет 123,456789
MsgBox Range("C1").Text   ' выведет 123,457р.

Dim c As Currency
c = Range("C1").Value2    ' значение преобразуется в тип Currency
MsgBox c                  ' выведет 123,4568

Dim d As Double
d = Range("C1").Value2    ' значение преобразуется в тип Double
MsgBox d                  ' выведет 123,456789

При присвоении значения переменной или элементу массива, необходимо учитывать тип переменной. Например, если оператором Dim задан тип Integer, а в ячейке находится текст, при выполнении произойдет ошибка «Type mismatch». Как определить тип значения в ячейке, рассказано в следующей статье.

Пример 7: В ячейке B1 активного листа находится текст. Прочитать значение ячейки в переменную.

Dim s As String
Dim i As Integer
s = Range("B1").Value2 ' успех
i = Range("B1").Value2 ' ошибка

Таким образом, разница между Text, Value и Value2 в способе получения значения. Очевидно, что Value2 наиболее предпочтителен, но при преобразовании даты в текст (например, чтобы показать значение пользователю), нужно использовать функцию Format.

Запись значения в ячейку

Осуществить запись значения в ячейку можно 2 способами: с помощью Value и Value2. Использование Text для записи значения не возможно, т.к. это свойство только для чтения.

Пример 8: Записать в ячейку A1 активного листа значение 123,45

Range("A1") = 123.45
Range("A1").Value = 123.45
Range("A1").Value2 = 123.45

Все три строки запишут в A1 одно и то же значение.

Пример 9: Записать в ячейку A2 активного листа дату 1 марта 2018 года

Cells(2, 1) = #3/1/2018#
Cells(2, 1).Value = #3/1/2018#
Cells(2, 1).Value2 = #3/1/2018#

В данном примере тоже запишется одно и то же значение в ячейку A2 активного листа.

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

Обращение к ячейке на листе Excel из кода VBA по адресу, индексу и имени. Чтение информации из ячейки. Очистка значения ячейки. Метод ClearContents объекта Range.

Обращение к ячейке по адресу

Допустим, у нас есть два открытых файла: «Книга1» и «Книга2», причем, файл «Книга1» активен и в нем находится исполняемый код VBA.

В общем случае при обращении к ячейке неактивной рабочей книги «Книга2» из кода файла «Книга1» прописывается полный путь:

Workbooks(«Книга2.xlsm»).Sheets(«Лист2»).Range(«C5»)

Workbooks(«Книга2.xlsm»).Sheets(«Лист2»).Cells(5, 3)

Workbooks(«Книга2.xlsm»).Sheets(«Лист2»).Cells(5, «C»)

Workbooks(«Книга2.xlsm»).Sheets(«Лист2»).[C5]

Удобнее обращаться к ячейке через свойство рабочего листа Cells(номер строки, номер столбца), так как вместо номеров строк и столбцов можно использовать переменные. Обратите внимание, что при обращении к любой рабочей книге, она должна быть открыта, иначе произойдет ошибка. Закрытую книгу перед обращением к ней необходимо открыть.

Теперь предположим, что у нас в активной книге «Книга1» активны «Лист1» и ячейка на нем «A1». Тогда обращение к ячейке «A1» можно записать следующим образом:

ActiveCell

Range(«A1»)

Cells(1, 1)

Cells(1, «A»)

[A1]

Точно также можно обращаться и к другим ячейкам активного рабочего листа, кроме обращения ActiveCell, так как активной может быть только одна ячейка, в нашем примере – это ячейка «A1».

Если мы обращаемся к ячейке на неактивном листе активной рабочей книги, тогда необходимо указать этот лист:

‘по основному имени листа

Лист2.Cells(2, 7)

‘по имени ярлыка

Sheets(«Имя ярлыка»).Cells(3, 8)

Имя ярлыка может совпадать с основным именем листа. Увидеть эти имена можно в окне редактора VBA в проводнике проекта. Без скобок отображается основное имя листа, в скобках – имя ярлыка.

Обращение к ячейке по индексу

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

Например, индекс ячеек в первой строке равен номеру столбца. Индекс ячеек во второй строке равен количеству ячеек в первой строке (которое равно общему количеству столбцов на листе, зависящему от версии Excel) плюс номер столбца. Индекс ячеек в третьей строке равен количеству ячеек в двух первых строках плюс номер столбца. И так далее.

Для примера, Cells(4) та же ячейка, что и Cells(1, 4). Используется такое обозначение редко, тем более, что у разных версий Excel может быть разным количество столбцов и строк на рабочем листе.

По индексу можно обращаться к ячейке не только на всем рабочем листе, но и в отдельном диапазоне. Нумерация ячеек осуществляется в пределах заданного диапазона по тому же правилу: слева-направо и сверху-вниз. Вот индексы ячеек диапазона Range(«A1:C3»):

Индексы ячеек в диапазоне Range("A1:C3")

Обращение к ячейке Range("A1:C3").Cells(5) соответствует выражению Range("B2").

Обращение к ячейке по имени

Если ячейке на рабочем листе Excel присвоено имя (Формулы –> Присвоить имя), то обращаться к ней можно по присвоенному имени.

Допустим одной из ячеек присвоено имя – «Итого», тогда обратиться к ней можно – Range("Итого").

Запись информации в ячейку

Содержание ячейки определяется ее свойством «Value», которое в VBA Excel является свойством по умолчанию и его можно явно не указывать. Записывается информация в ячейку при помощи оператора присваивания «=»:

Cells(2, 4).Value = 15

Cells(2, 4) = 15

Range(«A1») = «Этот текст записываем в ячейку»

ActiveCell = 28 + 10*36

Вместе с числами и текстом можно использовать переменные. Примеры здесь и ниже приведены для активного листа. Для неактивных листов дополнительно необходимо указывать имя листа, как в разделе «Обращение к ячейке».

Чтение информации из ячейки

Считать информацию из ячейки в переменную можно также при помощи оператора присваивания «=»:

Sub Test()

Dim a1 As Integer, a2 As Integer, a3 As Integer

Range(«A3») = 6

Cells(2, 5) = 15

a1 = Range(«A3»)

a2 = Cells(2, 5)

a3 = a1 * a2

MsgBox a3

End Sub

Точно также можно обмениваться информацией между ячейками:

Cells(2, 2) = Range(«A4»)

Очистка значения ячейки

Очищается ячейка от значения с помощью метода ClearContents. Кроме того, можно присвоить ячейке значение нуля. пустой строки или Empty:

Cells(10, 2).ClearContents

Range(«D23») = 0

ActiveCell = «»

Cells(5, «D») = Empty

Adding data to the worksheet is often done and it is essential to learn how to set variable to cell value in excel VBA. There can be instances when you want to add the same data to your worksheet. This task could easily be achieved with the help of Excel VBA variables. You can assign your cell values with variables. Let’s learn how to set variables to cell values in Excel VBA.

Declaring Variables in VBA

Before learning the assignment of variables, one needs to know what are variables and why they are used? Like any other programming language, VBA has variables. Variables are the containers to store data in them. There are some rules for storing data in them.

Rules for naming Variables

  • The variable name cannot start with a number.
  • While naming the variables you cannot have space between the names which means a space character (‘ ‘) is prohibited.
  • The length of the variable name should be less than Two-hundred and fifty-five (255) characters.

Implicit and Explicit Declaration

In Excel VBA, variables can be classified into 2 categories implicit and explicit,

Implicit Declaration

The implicit declaration declares a variable of data type variant. When we create variables implicitly, we never mention the data type to be used. The VBA automatically considers that variable as of variant type.

Syntax: variable_name = assigned_value

The variant data type is of two types,

  • Numeric Variant: The numeric variant data type is provided by VBA when the variable is assigned with a number. The bytes used are 16. It can take any value to Double.

Numeric-variant-data-type

  • Text Variant: The text variant data type is provided by VBA when the variable is assigned with a text. The bytes used are 22. It’s always possible to take variable sizes of the string.

Text-variant-data-type

Explicit Declaration

The explicit declaration declares a variable of custom data type. One can always mention the data type of the variable being used at the time of declaration. The keyword used is ‘Dim’.

Syntax: Dim variable_name as data_type

variable_name = assigned_value

Variable-name-as-data-type

Opening VBA immediate Window

The excel immediate window can be compared with a terminal that displays the code output in any other programming language. We will use this immediate window to run our code in the macro itself and display the code output immediately. You can also use the immediate window for debugging and running multiple VBA macros at once.

Different Ways to Open Immediate Windows in VBA

Press Ctrl + G

Open your VBA, then use the Short cut Ctrl + G on your keyboard, and the immediate window will open at the bottom side of your VBA.

Using View Tab

Step 1: Go to the Developer Tab, under the code section, and click on Visual Basic.

Clicking-visual-basic

Step 2: The VBA editor is open now.

VBA-editor-opens

Step 3: Go to View Tab, and click on Immediate Window.

Clicking-immediate-window

Step 4: The Immediate Window appears.

Immediate-window-displayed

Set Variable to Cell Value

After learning how to declare variables, and how to access the immediate window, you are ready to learn how to set variables to cell Values. Given the name of a student, ‘Arushi’. Write her Age and Aim in the worksheet by assigning variables in the VBA Macro.

Assigning-variables-in-VBA-macro

Step 1: Go to the Developer Tab, under the code section, and click on Visual Basic.

Clicking-visual-basic

Step 2: Your VBA editor is opened. Create a new Module. The name of the Sub created is geeks(). Declare an Age variable explicitly with custom data type as Integer. Assign the variable value as 19.

Variable-value-19-assigned

Step 3: Set the cell value by the variable name. Use =Range(cell).Value function to access any cell in the worksheet. Assign the Age variable to it. Run your macro.

Assigning-age-variable

Step 4: The value of cell C5 is set to 19.

Value-of-C5-set-as-19

Step 5: Repeat steps 2, 3, and 4 to set Aim for cell D5. Declare a variable name Aim explicitly with data type as Variant. Assign the variable value “CA”. Again, use the range function and set the cell value of D5 to the variable Aim.

Setting-value-of-D5-to-variable-name

Step 6: The value of cell D5 is set to “CA”.

D5-set-as-CA

Set Cell Value to Variable

We can also assign the cell values in the worksheet to the variables. Consider, the same data set as above but this time the age and aim of the student ‘Arushi’ are prefilled. Your task is to assign these values to the variables and print them in the immediate window.

Values-prefilled-shown

Step 1: Go to the Developer Tab, under the code section, and click on Visual Basic.

Clicking-visual-basic

Step 2: Declare the Age variable explicitly using the Dim keyword.

Age-variable-declared

Step 3: Assign the Age variable with the value of cell ‘C5′. This can be achieved using =Range(cell).Value function. Print the Age variable in the immediate window using Debug.Print(variable) function.

Assigning-age-variable-to-C5

Step 4: Click on the run button. The macro will run, and 19 is printed in the immediate window of the VBA.

Running-the-macro

Step 5: Repeat Steps 2, 3, and 4. Declare the Aim variable explicitly. The Range function assigns a cell value of D5 in the variable Aim. Print the Aim variable in the immediate window.

Printing-aim-variable-in-window

Step 6: Click on the run button, and “CA” is printed in the Immediate Window.

CA-printed-in-immediate-window

Содержание

  1. Чтение и запись значения ячейки в VBA
  2. Обращение к конкретной ячейке
  3. Чтение значения из ячейки
  4. Запись значения в ячейку
  5. VBA Excel. Ячейки (обращение, запись, чтение, очистка)
  6. Обращение к ячейке по адресу
  7. Обращение к ячейке по индексу
  8. Обращение к ячейке по имени
  9. Запись информации в ячейку
  10. VBA Excel. Переменная диапазона ячеек (As Range)
  11. Присвоение диапазона ячеек переменной
  12. Адресация ячеек в диапазоне
  13. Сводные таблицы Excel
  14. Использование конструкций with и End with для уменьшения объема кода
  15. Excel макрос присвоить переменной значение ячейки

Чтение и запись значения ячейки в VBA

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

Обращение к конкретной ячейке

Прежде чем читать или записывать значение в ячейке, нужно определиться с тем, как можно указать какая именно ячейка нам необходима.

Полный путь к ячейке A1 в Книге1 на Листе1 можно записать двумя вариантами:

  • С помощью Range
  • С помощью Cells

Пример 1: Обратиться к ячейке A3 находящейся в Книге1 на Листе1

Однако, как правило, полный путь редко используется, т.к. макрос работает с Книгой, в которой он записан и часто на активном листе. Поэтому путь к ячейке можно сократить и написать просто:

Пример 2: Обратиться к ячейке A1 в текущей книге на активном листе

Если всё же путь к книге или листу необходим, но не хочется его писать при каждом обращении к ячейкам, можно использовать конструкцию With End With. При этом, обращаясь к ячейкам, необходимо использовать в начале «.» (точку).

Пример 3: Обратиться к ячейке A1 и B1 в Книге1 на Листе2.

Так же, можно обратиться и к активной (выбранной в данный момент времени) ячейке.

Пример 4: Обратиться к активной ячейке на Листе3 текущей книги.

Чтение значения из ячейки

Есть 3 способа получения значения ячейки, каждый из которых имеет свои особенности:

  • Value2 — базовое значение ячейки, т.е. как оно хранится в самом Excel-е. В связи с чем, например, дата будет прочтена как число от 1 до 2958466, а время будет прочитано как дробное число. Value2 — самый быстрый способ чтения значения, т.к. не происходит никаких преобразований.
  • Value — значение ячейки, приведенное к типу ячейки. Если ячейка хранит дату, будет приведено к типу Date. Если ячейка отформатирована как валюта, будет преобразована к типу Currency (в связи с чем, знаки с 5-го и далее будут усечены).
  • Text — визуальное отображение значения ячейки. Например, если ячейка, содержит дату в виде «число месяц прописью год», то Text (в отличие от Value и Value2) именно в таком виде и вернет значение. Использовать Text нужно осторожно, т.к., если, например, значение не входит в ячейку и отображается в виде «#####» то Text вернет вам не само значение, а эти самые «решетки».

По-умолчанию, если при обращении к ячейке не указывать способ чтения значения, то используется способ Value.

Пример 5: В ячейке A1 активного листа находится дата 01.03.2018. Для ячейки выбран формат «14 марта 2001 г.». Необходимо прочитать значение ячейки всеми перечисленными выше способами и отобразить в диалоговом окне.

Пример 6: В ячейке С1 активного листа находится значение 123,456789. Для ячейки выбран формат «Денежный» с 3 десятичными знаками. Необходимо прочитать значение ячейки всеми перечисленными выше способами и отобразить в диалоговом окне.

При присвоении значения переменной или элементу массива, необходимо учитывать тип переменной. Например, если оператором Dim задан тип Integer, а в ячейке находится текст, при выполнении произойдет ошибка «Type mismatch». Как определить тип значения в ячейке, рассказано в следующей статье.

Пример 7: В ячейке B1 активного листа находится текст. Прочитать значение ячейки в переменную.

Таким образом, разница между Text, Value и Value2 в способе получения значения. Очевидно, что Value2 наиболее предпочтителен, но при преобразовании даты в текст (например, чтобы показать значение пользователю), нужно использовать функцию Format.

Запись значения в ячейку

Осуществить запись значения в ячейку можно 2 способами: с помощью Value и Value2. Использование Text для записи значения не возможно, т.к. это свойство только для чтения.

Пример 8: Записать в ячейку A1 активного листа значение 123,45

Все три строки запишут в A1 одно и то же значение.

Пример 9: Записать в ячейку A2 активного листа дату 1 марта 2018 года

В данном примере тоже запишется одно и то же значение в ячейку A2 активного листа.

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

Источник

VBA Excel. Ячейки (обращение, запись, чтение, очистка)

Обращение к ячейке на листе Excel из кода VBA по адресу, индексу и имени. Чтение информации из ячейки. Очистка значения ячейки. Метод ClearContents объекта Range.

Обращение к ячейке по адресу

Допустим, у нас есть два открытых файла: «Книга1» и «Книга2», причем, файл «Книга1» активен и в нем находится исполняемый код VBA.

В общем случае при обращении к ячейке неактивной рабочей книги «Книга2» из кода файла «Книга1» прописывается полный путь:

Удобнее обращаться к ячейке через свойство рабочего листа Cells(номер строки, номер столбца), так как вместо номеров строк и столбцов можно использовать переменные. Обратите внимание, что при обращении к любой рабочей книге, она должна быть открыта, иначе произойдет ошибка. Закрытую книгу перед обращением к ней необходимо открыть.

Теперь предположим, что у нас в активной книге «Книга1» активны «Лист1» и ячейка на нем «A1». Тогда обращение к ячейке «A1» можно записать следующим образом:

Точно также можно обращаться и к другим ячейкам активного рабочего листа, кроме обращения ActiveCell, так как активной может быть только одна ячейка, в нашем примере – это ячейка «A1».

Если мы обращаемся к ячейке на неактивном листе активной рабочей книги, тогда необходимо указать этот лист:

Имя ярлыка может совпадать с основным именем листа. Увидеть эти имена можно в окне редактора VBA в проводнике проекта. Без скобок отображается основное имя листа, в скобках – имя ярлыка.

Обращение к ячейке по индексу

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

Например, индекс ячеек в первой строке равен номеру столбца. Индекс ячеек во второй строке равен количеству ячеек в первой строке (которое равно общему количеству столбцов на листе, зависящему от версии Excel) плюс номер столбца. Индекс ячеек в третьей строке равен количеству ячеек в двух первых строках плюс номер столбца. И так далее.

Для примера, Cells(4) та же ячейка, что и Cells(1, 4). Используется такое обозначение редко, тем более, что у разных версий Excel может быть разным количество столбцов и строк на рабочем листе.

По индексу можно обращаться к ячейке не только на всем рабочем листе, но и в отдельном диапазоне. Нумерация ячеек осуществляется в пределах заданного диапазона по тому же правилу: слева-направо и сверху-вниз. Вот индексы ячеек диапазона Range(«A1:C3»):

Обращение к ячейке Range(«A1:C3»).Cells(5) соответствует выражению Range(«B2») .

Обращение к ячейке по имени

Если ячейке на рабочем листе Excel присвоено имя (Формулы –> Присвоить имя), то обращаться к ней можно по присвоенному имени.

Допустим одной из ячеек присвоено имя – «Итого», тогда обратиться к ней можно – Range(«Итого») .

Запись информации в ячейку

Содержание ячейки определяется ее свойством «Value», которое в VBA Excel является свойством по умолчанию и его можно явно не указывать. Записывается информация в ячейку при помощи оператора присваивания «=»:

Источник

VBA Excel. Переменная диапазона ячеек (As Range)

Присвоение диапазона ячеек объектной переменной в VBA Excel. Адресация ячеек в переменной диапазона и работа с ними. Определение размера диапазона. Примеры.

Присвоение диапазона ячеек переменной

Чтобы переменной присвоить диапазон ячеек, она должна быть объявлена как Variant, Object или Range:

Чтобы было понятнее, для чего переменная создана, объявляйте ее как Range.

Присваивается переменной диапазон ячеек с помощью оператора Set:

В выражении Range(Cells(3, 4), Cells(26, 18)) вместо чисел можно использовать переменные.

Для присвоения диапазона ячеек переменной можно использовать встроенное диалоговое окно Application.InputBox, которое позволяет выбрать диапазон на рабочем листе для дальнейшей работы с ним.

Адресация ячеек в диапазоне

К ячейкам присвоенного диапазона можно обращаться по их индексам, а также по индексам строк и столбцов, на пересечении которых они находятся.

Индексация ячеек в присвоенном диапазоне осуществляется слева направо и сверху вниз, например, для диапазона размерностью 5х5:

1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25

Индексация строк и столбцов начинается с левой верхней ячейки. В диапазоне этого примера содержится 5 строк и 5 столбцов. На пересечении 2 строки и 4 столбца находится ячейка с индексом 9. Обратиться к ней можно так:

Источник

Сводные таблицы Excel

В популярных языках программирования переменная содержит одно значение. Чтобы присвоить значение 4 переменной х, можно использовать выражение х = 4. Рассмотрим отдельную ячейку в Excel. Существует много свойств, описывающих ячейку.

Ячейка может содержать числовое значение, для нее указывается размер и цвет шрифта, строки, столбца, определяется формула, примечание и т.п. В VBA можно создать «суперпеременную», которая будет содержать всю информацию о ячейке или даже целом объекте. Выражение х = Range(«A1») присваивает переменной х текущее значение ячейки A1. Для создания объектной переменной применяется ключевое слово Set.

Вы создали «суперпеременную», которая содержит все свойства ячейки.

Вместо использования переменной с одним значением можно работать с переменной, в которой предоставляется доступ к значениям многих свойств, связанных с этой переменной. Можете использовать выражение х.Formula , чтобы увидеть формулу в ячейке А1, или х.Font.colorlndex , чтобы определить цвет ячейки.

В примерах, приводимых в этом разделе, часто используется объектная переменная PT. Она применяется в тех случаях, когда определяется ссылка на сводную таблицу. Если, например, в коде содержится ссылка ActiveSheet.PivotTables(«PivotTable1») , можно воспользоваться переменной объекта РТ, чтобы уменьшить объем кода.

Использование конструкций with и End with для уменьшения объема кода

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

При выполнении перечисленных выше строк кода интерпретатор VBA должен постоянно расшифровывать, что означает ссылка «РТ». Чтобы ускорить выполнение кода, укажите ссылку РТ один раз. Для каждой строки кода, которая начинается точкой, подразумевается ссылка на объект, указанный с помощью конструкции With. Блок кода завершается конструкцией End With.

Источник

Excel макрос присвоить переменной значение ячейки

Заранее извиняюсь за глупый вопрос. Подскажите, пожалуйста, как присвоить значение формулы переменной. Пример файла во вложении.

Заранее извиняюсь за глупый вопрос. Подскажите, пожалуйста, как присвоить значение формулы переменной. Пример файла во вложении.

Сообщение Добрый день.

Заранее извиняюсь за глупый вопрос. Подскажите, пожалуйста, как присвоить значение формулы переменной. Пример файла во вложении.

Заранее спасибо. Автор — TimosMN15
Дата добавления — 28.03.2015 в 23:23

krosav4ig Дата: Воскресенье, 29.03.2015, 00:06 | Сообщение № 2

email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460

TimosMN15 Дата: Воскресенье, 29.03.2015, 00:08 | Сообщение № 3
TimosMN15 Дата: Пятница, 24.04.2015, 22:13 | Сообщение № 4

Еще раз здравствуйте.

Сейчас появился дополнительный вопрос по этой теме. В предыдущем варианте рассматривалась функция «сумм», на этот раз необходимо присвоить переменной значение формулы:
[code]=—ЛЕВСИМВ(B1;9)
Файл во вложении, просьба подсказать, каким образом это можно реализовать?

Еще раз здравствуйте.

Сейчас появился дополнительный вопрос по этой теме. В предыдущем варианте рассматривалась функция «сумм», на этот раз необходимо присвоить переменной значение формулы:
[code]=—ЛЕВСИМВ(B1;9)
Файл во вложении, просьба подсказать, каким образом это можно реализовать?

Сообщение Еще раз здравствуйте.

Сейчас появился дополнительный вопрос по этой теме. В предыдущем варианте рассматривалась функция «сумм», на этот раз необходимо присвоить переменной значение формулы:
[code]=—ЛЕВСИМВ(B1;9)
Файл во вложении, просьба подсказать, каким образом это можно реализовать?

Заранее спасибо. Автор — TimosMN15
Дата добавления — 24.04.2015 в 22:13

Источник

Adblock
detector

 

xlgrgrc

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

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

Всем доброго времени суток.  
Предистория: хочу автоматизировать повторяющиеся действия.    

  Ввожу первоначальные данные в Excel. (Прикрепленный документ Исходные данные). Нажимаю кнопку «выполнить». Данные вбиваются в 2 документа в соответствующие места, каждый сохраняется под своим именем в нужном месте, оригинал в своей папке. Так же 1 копия документа выделяется и копируется в Word, сохраняется куда нужно.  
Просидел целый день но не смог сделать что бы передать данные в Word не таблицей. Пришел к варианту код —  

  Private Sub Ok_Click()  
With ActiveDocument.Content.Find  
.Execute FindText:=»XXX1″, ReplaceWith:=TextBox1  
.Execute FindText:=»XXX2″, ReplaceWith:=TextBox2  
………………….  
.Execute FindText:=»XXXn», ReplaceWith:=TextBoxN  
End With  
End Sub  

  Тоесть теперь у меня есть уже готовый документ Word (Постановление) и мне нужно прикрепленного документ «Исходные данные» вставить в ворд в определенные места Вместо XXX1 нужные данные.    

  Вопросы.  
1. Как переменной присвоить значение ячейки Excel.  
2. Как открыть из Excel макроса нужный документ Word.  
3. Может кто чего толковое подскажет как можно осуществить то что я пытаюсь сделать…  

  В школе хорошо кодил на бейсике (олимпиады) сейчас занимаюсь AutoIT (скрипты). Нужен совет. Либо ссылка на подробное описание лексики VBa.  

  Заранее спасибо!

 

xlgrgrc

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

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

 

Sub Макрос1()  
‘  
‘ Макрос1 Макрос  
‘  

  ‘  
   Range(«A1»).Select  
   Selection.Copy  
End Sub  

  Range(«A1»).Select — выбрать ячейку A1  
Selection.Copy — копировать  

  Как теперь переключиться на Word?

 

Юрий М

Модератор

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

Контакты см. в профиле

1. Не нужно Select: Range(«A1»).Copy Если переменной, то: Переменная=Range(«A1»).value <BR>2. У нас работает поиск:

http://yandex.ru/sitesearch?text=%EE%F2%EA%F0%FB%F2%FC+%E4%EE%EA%F3%EC%E5%ED%F2+word&searchid=84804&web=0&lr=22

 

Так с переменной ппонял. Получилось. Ошибка была что копировал и получался пробел x = Лист 1.Cells(1, 1) в Лист1.  

  Про поиск в курсе но задавал вопрос Excel в ворд. Прочитал много даже пример открытия чистого Word видел . Щас перечитаю ещё. )))  

  Спасибо что отозвался )))  
Я понимаю что сложно ничего нет но не зная языка и понимаешь что нужно не знаешь какими функциями и приемами…

 

xlgrgrc

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

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

Решил задачу на примере вот этого

http://www.planetaexcel.ru/forum.php?thread_id=19286  

  Юрий М — спасибо большое ) Очень благодарен.  

  Вот код что получился в итоге — может кому пригодиться…    

  Sub Макрос1()  

  Dim sOM As String, sDocNum As String  
Dim WordApp As Object  

     sOM = «G:. ШаблоныПостановление.doc»  
   xData = Range(«A1»).Value  
   xFIO = Range(«A2»).Value  
   xS = Range(«A3»).Value  
   xAdr = Range(«A4»).Value  
   xVidIs = Range(«A5»).Value  

         ‘sOM = Range(«B9»).Value  
   ‘sDocNum = Range(«B11»).Value  
   On Error Resume Next  
   Set WordApp = GetObject(, «word.application»)  
   If WordApp Is Nothing Then  
       Set WordApp = CreateObject(«word.application»)  
   End If  
   On Error GoTo 0  
   With WordApp  
       .Visible = True  
       .Documents.Open Filename:=sOM  
   End With  
   WordApp.ActiveDocument.Bookmarks(«vData»).Range.Text = xData  
   WordApp.ActiveDocument.Bookmarks(«vFIO»).Range.Text = xFIO  
   WordApp.ActiveDocument.Bookmarks(«vS»).Range.Text = xS  
   WordApp.ActiveDocument.Bookmarks(«vAdr»).Range.Text = xAdr  
   WordApp.ActiveDocument.Bookmarks(«vVidIs»).Range.Text = xVidIs  
   Set WordApp = Nothing  

  End Sub  

  Код берет из Excel данные ячеек и вставляет их в закладки в Word. Когда получилось оказалось всё проще чем думал.    

  Если что то вот адрес страницы в контакте —

http://vkontakte.ru/popov_sergey_vladimirovich

 

У меня ещё вопрос возник. Итогом этого макроса является открытый документ Word. Ни как не получается его сохранить и закрыть или макроса Excel/ Пишу .Close закрывается Окно Excel откуда был запущен макрос. А как мне дать команду Ворду что бы он сохранился куда нужно и закрылся ?

 

Hugo

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

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

Могу такую цитату предложить — вроде всё есть:  

    Private Sub start_DblClick(Cancel As Integer)  
Dim wordApp As Word.Application  
Dim wordDoc As Word.Document  
Set wordApp = GetObject(, «Word.Application»)  
Set wordDoc = wordApp.Documents.Open(«D:SashaTestLetterTemplate.doc»)  
wordDoc.CustomDocumentProperties(«Position») = «Начальник отдела»  
ActiveDocument.Fields.Update  
wordDoc.SaveAs FileName:=»D:SashaTest1.doc»  
wordDoc.Close  
Set wordDoc = Nothing  
Set wordApp = Nothing  
End Sub

 

Ага спасибо ) Только что получилось, зашел как раз поделиться тоже )))  

  Sub Макрос1()  
   Dim wd  As New Word.Application  
   Dim dc1 As Word.Document  

     xNp = Range(«B2»).Value  
   xData = Range(«B3»).Value  
   xFIO = Range(«B4»).Value  
   xS = Range(«B5»).Value  
   xAdr = Range(«B6»).Value  
   xVidIs = Range(«B7»).Value  

         sOM = «G:. ШаблоныПостановление.doc»  
       ‘ Создать новый экземпляр приложения Word  
   Set dc1 = wd.Documents.Open(«G:. ШаблоныПостановление.doc»)  
       ‘ Сделать Word видимым глазу  
   wd.Visible = True  

           xxData = xData & » № » & xNp  
   wd.ActiveDocument.Bookmarks(«vData»).Range.Text = xxData  
   wd.ActiveDocument.Bookmarks(«vFIO»).Range.Text = xFIO  
   wd.ActiveDocument.Bookmarks(«vS»).Range.Text = xS  
   wd.ActiveDocument.Bookmarks(«vAdr»).Range.Text = xAdr  
   wd.ActiveDocument.Bookmarks(«vVidIs»).Range.Text = xVidIs  

         dc1.SaveAs «G:. ШаблоныПостановление1.doc»  

         dc1.Close  

       Set dc1 = Nothing  
   Set wd = Nothing  

  End Sub  

  Принцип понял ) И ошибку понял )))

 

Юрий М

Модератор

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

Контакты см. в профиле

В Word есть такая штука, как СЛИЯНИЕ. Может его задействовать?

 

Да Юра читал про неё даже пробовал. Но на сколько я понял — слияние больше подходит для формирование документа из списка: рассылка поздравлений и т.д. где перебирается весь список в цикле и вставляется в нужные места. У меня же это делает 1 раз и трижды пересохраняется документ.    

  Моя ошибка была с переменными. Щас не помню, но есть сообщение на этом форуме в котором расписана структура документа ворд и эксель. Я его читал раз 6 и только к вечеру понял как то реализовано на VBA …    

  Вообщем, очень благодарен всем за помощь ) Форум что наде!!!

 

Как это элементарно, но давно не рабоитала в Exce, многое забыла. Что бы мы делали без инета? Спасибо

 

Guest

Гость

#13

12.12.2012 10:58:20

спасибо, большое. Инфо мне пригодилось

Понравилась статья? Поделить с друзьями:
  • Excel макрос при нажатии гиперссылки
  • Excel макрос при изменении значения ячейки
  • Excel макрос при изменении данных
  • Excel макрос при изменение в ячейке
  • Excel макрос при закрытии файла