Vba excel код активации: Инструкция по активации надстройки

Содержание

Лист активации VBA — voxt

При работе в VBA мы иногда ссылаемся на другой лист или используем свойства другого листа, предположим, что мы работаем на листе 1, но нам нужно значение из ячейки A2 на листе 2, если мы обратимся к значению листа 2, не активируя сначала лист, мы будем не иметь доступа к значению, поэтому для активации листа в VBA мы используем свойство листа как Рабочие листы («Лист2»).

В Excel мы всегда работаем с таблицами. Рабочие листы имеют собственное название, чтобы их можно было лучше идентифицировать. При обычной работе с электронными таблицами мы напрямую перемещаемся по горячие клавишиГорячие клавишиЯрлык Excel — это способ более быстрого выполнения ручной задачи.читать далее, или мы напрямую выбираем лист, щелкая по ним. Однако в VBA это не так просто; нам нужно указать имя листа, на который мы ссылаемся, затем мы можем использовать метод «Выбрать», чтобы выбрать лист.

Вы можете свободно использовать это изображение на своем веб-сайте, в шаблонах и т. Д. Пожалуйста, предоставьте нам ссылку с указанием авторстваКак указать авторство?Ссылка на статью должна содержать гиперссылку
Например:
Источник: VBA Activate Sheet (wallstreetmojo.com)

Что такое метод активации VBA?

Как следует из названия, он активирует указанный рабочий лист. Чтобы активировать лист, нам нужно указать точное имя рабочего листа, используя объект worksheets. Например, если вы хотите активировать лист под названием «Продажи», вы можете использовать приведенный ниже код.

Программы для Windows, мобильные приложения, игры — ВСЁ БЕСПЛАТНО, в нашем закрытом телеграмм канале — Подписывайтесь:)

Worksheets(“Sales”).Activate

Синтаксис

Итак, синтаксис метода Activate следующий.

Worksheet (“Name of the Sheet”).Activate

Здесь рабочий лист — это объект, а активируемые — это метод.

Вы можете скачать этот шаблон VBA Activate Sheet Excel здесь — VBA активировать шаблон листа Excel

Пример # 1 — Активировать лист по его порядковому номеру

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

Например, я создал три листа с названиями «Продажи 2015», «Продажи 2016» и «Продажи 2017».

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

Теперь, если я хочу выбрать 2nd лист, я буду использовать объект Worksheet и указывать порядковый номер листа как 2.

Код:

Sub Activate_Example1()
   Worksheets(2).Activate
End Sub

Когда вы запускаете код с помощью клавиши F5 или вручную, это активирует второй лист, то есть «Продажи 2016».

Если я хочу активировать 3rd лист, я буду использовать 3 в качестве порядкового номера листа.

Код:

Sub Activate_Example1()
    Worksheets(3).Activate
End Sub

Это активирует третий лист, то есть «Продажи 2017».

Сейчас поменяю местами 2nd и третьи листы.

Технически, «Продажи 2017» — это мой третий лист, а «Продажи 2016» — мой второй лист. Теперь я буду использовать порядковый номер листа как 3 и посмотрю, что произойдет.

Код:

Sub Activate_Example1()
    Worksheets(3).Activate
End Sub

На мой взгляд, он должен выбрать лист «Продажи 2017», но он выберет лист «Продажи 2016», потому что в заказе «Продажи 2016» является третьим листом.

Таким образом, всегда можно активировать лист по его имени.

Пример # 2 — Активировать лист по его имени

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

Код:

Sub Activate_Example2()
    Worksheets("Sales 2016").Activate
End Sub

Когда вы запускаете код вручную или с помощью сочетания клавиш F5, это активирует лист «Продажи 2016» независимо от положения в книге.

Не только объект Worksheets, но мы также можем использовать объект «Sheets» для активации листа.

Ниже приведен код.

Код:

Sub Activate_Example2()
    Sheets("Sales 2016").Activate
End Sub

Рабочие листы могут получить доступ только к объекту «Рабочие листы» и не могут получить доступ к листам «Диаграммы». Если вы используете Таблицы объект, мы можем получить доступ ко всем листам в книге.

Пример # 3 — Активировать лист из другой книги

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

Код:

Sub Activate_Example3()
    Workbooks("Sales File.xlsx").Sheets("Sales 2016").Activate
End Sub

Это активирует лист «Продажи 2016» из книги «Файл продаж.xlsx».

Активировать лист или выбрать метод листа

Мы можем использовать методы для выполнения одного и того же действия, то есть методы Activate и Select. Между этими двумя методами есть небольшая разница.

# 1 — Активировать метод

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

Например, посмотрите на приведенный ниже код.

Код:

Sub Activate_Example()
    Worksheets("Sales 2016").Activate
End Sub

Как мы знаем, этот код выберет рабочий лист «Продажи 2016».

# 2 — Выбрать метод

Используя метод Select, мы можем выполнять и другие задачи.

Теперь посмотрите на приведенный ниже код.

Код:

Этот код не только активирует лист «Продажи 2016», но также выбирает диапазон ячеек от A1 до A10.

Программы для Windows, мобильные приложения, игры — ВСЁ БЕСПЛАТНО, в нашем закрытом телеграмм канале — Подписывайтесь:)

Как получить ключ установки MS Office

Ключ установки Microsoft Office после активации продукта продолжает хранится в реестре системы. Для защиты ключ продукта хранится не в открытом, а в шифрованном с помощью кодировки Base64 виде. Этот метод кодировки не является стойким, поэтому не составляет труда извлечь его с помощью простого скрипта (аналогичную методику мы рассматривали в статье, описывающей извлечения ключа установки Windows 8). В этой статье мы приведем как с помощью PowerShell и vbs скриптов без использования сторонних утилит получить код активации уже установленной копии MS Office.

Данные скрипты удобно использовать при утрате документов или наклеек с ключами установки Microsoft Office.

Сначала рассмотрим скрипт получения ключа на PowerShell

  1. Создайте новый текстовый файл (в том же notepad.exe)
  2. Скопируйте в него следующий код:
    function Get-MSOfficeProductKey { param( [string[]]$computerName = "." ) $product = @() $hklm = 2147483650 $path = "SOFTWARE\Microsoft\Office"  
    foreach ($computer in $computerName) { $wmi = [WMIClass]"\\$computer\root\default:stdRegProv" $subkeys1 = $wmi.EnumKey($hklm,$path) foreach ($subkey1 in $subkeys1.snames) { $subkeys2 = $wmi. EnumKey($hklm,"$path\$subkey1") foreach ($subkey2 in $subkeys2.snames) { $subkeys3 = $wmi.EnumKey($hklm,"$path\$subkey1\$subkey2") foreach ($subkey3 in $subkeys3.snames) { $subkeys4 = $wmi.EnumValues($hklm,"$path\$subkey1\$subkey2\$subkey3") foreach ($subkey4 in $subkeys4.snames) { if ($subkey4 -eq "digitalproductid") { $temp = "" | select ComputerName,ProductName,ProductKey $temp.ComputerName = $computer $productName = $wmi.GetStringValue($hklm,"$path\$subkey1\$subkey2\$subkey3","productname") $temp.ProductName = $productName.sValue $data = $wmi.GetBinaryValue($hklm,"$path\$subkey1\$subkey2\$subkey3","digitalproductid") $valueData = ($data.uValue)[52..66] # decrypt base24 encoded binary data $productKey = "" $chars = "BCDFGHJKMPQRTVWXY2346789" for ($i = 24; $i -ge 0; $i--) { $r = 0 for ($j = 14; $j -ge 0; $j--) { $r = ($r * 256) -bxor $valueData[$j] $valueData[$j] = [math]::Truncate($r / 24) $r = $r % 24 } $productKey = $chars[$r] + $productKey if (($i % 5) -eq 0 -and $i -ne 0) { $productKey = "-" + $productKey } } $temp. ProductKey = $productKey $product += $temp } } }   } } } $product } 
  3. Сохраните файл с расширением .ps1
  4. В зависимости от версии MS Office: если используется 32 битная версия Office, запустите с правами администратора 32-битную консоль PowerShell. В случае использования 64 битного Office, запускайте 64 битную консоль PowerShell.

    Советы. Office 2007 и ниже бывают только 32 разрядные. Office 2010, 2013 и 2016 – бывают как 32 так и 64 разрядные. На 32 разрядной Windows нельзя установить 64 битную версию Office.

  5. В нашем примере на 64 битной Windows установлена 32 битная версия Office, поэтому запускаем Windows PoweShell (x86).
  6. Разрешим локальный запуск неподписанных скриптов:
    Set-ExecutionPolicy RemoteSigned
    На запрос жмем Y и Enter.
  7. Импортируем ранее сохраненный скрипт командой и вызовем функцию из него:
    Import-Module C:\Tools\getmsofficekey.ps1; Get-MSOfficeProductKey
  8. На экран должны быть выведена табличка, содержащая информацию о всех установленных версиях Office. В поле ProductName будет содержаться имя установленного продукта, а в поле ProductKey – ключ активации.

Готовый Powershell скрипт можно скачать тут: getmsofficekey-posh.zip

Аналогичный скрипт для получения ProducId и ключей MS Office на Vbscript

Const HKLM = &H80000002

Computer = "."
Set objWMIService = GetObject("winmgmts:\\" & Computer & "\root\cimv2")
Set Obj = objWMIService.ExecQuery ("Select * from Win32_OperatingSystem")

dim InsDate

For Each item in Obj
  InsDate = item.InstallDate
  ' Gather Operating System Information
  Caption = Item.Caption
  OSArchitecture = Item.OSArchitecture
  CSDVersion = Item.CSDVersion
  Version = Item.Version
  Next

dim NewDate

NewDate = mid(InsDate,9,2) & ":" & mid(InsDate,11,2) & ":" & mid(InsDate,13,2)
NewDate = NewDate & " " & mid(InsDate,7,2) & "/" & mid(InsDate,5,2) & "/" & mid(InsDate,1,4)

wscript. echo 'vbCrLf & "Office Keys" & vbCrLf

QueryOfficeProductKeys()

Function DecodeProductKey(arrKey, intKeyOffset)
  If Not IsArray(arrKey) Then Exit Function
    intIsWin8 = BitShiftRight(arrKey(intKeyOffset + 14),3) And 1    
    arrKey(intKeyOffset + 14) = arrKey(intKeyOffset + 14) And 247 Or BitShiftLeft(intIsWin8 And 2,2)
    i = 24
    strChars = "BCDFGHJKMPQRTVWXY2346789"
    strKeyOutput = ""
    While i > -1
        intCur = 0
        intX = 14
        While intX > -1
            intCur = BitShiftLeft(intCur,8)
            intCur = arrKey(intX + intKeyOffset) + intCur
            arrKey(intX + intKeyOffset) = Int(intCur / 24) 
            intCur = intCur Mod 24
            intX = intX - 1
        Wend
        i = i - 1
        strKeyOutput = Mid(strChars,intCur + 1,1) & strKeyOutput
        intLast = intCur
    Wend
    If intIsWin8 = 1 Then
        strKeyOutput = Mid(strKeyOutput,2,intLast) & "N" & Right(strKeyOutput,Len(strKeyOutput) - (intLast + 1))    
    End If
    strKeyGUIDOutput = Mid(strKeyOutput,1,5) & "-" & Mid(strKeyOutput,6,5) & "-" & Mid(strKeyOutput,11,5) & "-" & Mid(strKeyOutput,16,5) & "-" & Mid(strKeyOutput,21,5)
    DecodeProductKey = strKeyGUIDOutput
End Function

Function RegReadBinary(strRegPath,strRegValue)
    Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.  intShift))
End Function

Function QueryOfficeProductKeys()

        strBaseKey = "SOFTWARE\"

        strOfficeKey = strBaseKey & "Microsoft\Office"
        Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")
        objReg.EnumKey HKLM, strOfficeKey, arrOfficeVersionSubKeys
        intProductCount = 1
        If IsArray(arrOfficeVersionSubKeys) Then

            For Each strOfficeVersionKey In arrOfficeVersionSubKeys
                Select Case strOfficeVersionKey
                    Case "11.0"
                        CheckOfficeKey strOfficeKey & "\11.0\Registration",52,intProductCount
                    Case "12.0"
                        CheckOfficeKey strOfficeKey & "\12.0\Registration",52,intProductCount
                    Case "14.0"
                        CheckOfficeKey strOfficeKey & "\14.0\Registration",808,intProductCount
                    Case "15. 0"
                        CheckOfficeKey strOfficeKey & "\15.0\Registration",808,intProductCount
                End Select
            Next
        End If

        strBaseKey = "SOFTWARE\Wow6432Node\"

        strOfficeKey = strBaseKey & "Microsoft\Office"
        Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")
        objReg.EnumKey HKLM, strOfficeKey, arrOfficeVersionSubKeys
        intProductCount = 1

        If IsArray(arrOfficeVersionSubKeys) Then

            For Each strOfficeVersionKey In arrOfficeVersionSubKeys

                Select Case strOfficeVersionKey
                    Case "11.0"
                        CheckOfficeKey strOfficeKey & "\11.0\Registration",52,intProductCount
                    Case "12.0"
                        CheckOfficeKey strOfficeKey & "\12.0\Registration",52,intProductCount
                    Case "14. 0"
                        CheckOfficeKey strOfficeKey & "\14.0\Registration",808,intProductCount
                    Case "15.0"
                        CheckOfficeKey strOfficeKey & "\15.0\Registration",808,intProductCount
                End Select
            Next
        End If
End Function

'Office Product Key
Sub CheckOfficeKey(strRegPath,intKeyOffset,intProductCount)

    Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")
    objReg.EnumKey HKLM, strRegPath, arrOfficeRegistrations
    If IsArray(arrOfficeRegistrations) Then
        For Each strOfficeRegistration In arrOfficeRegistrations

            objReg.GetStringValue HKLM,strRegPath & "\" & strOfficeRegistration,"ConvertToEdition",strOfficeEdition
            objReg.GetBinaryValue HKLM,strRegPath & "\" & strOfficeRegistration,"DigitalProductID",arrProductID
            If strOfficeEdition <> "" And IsArray(arrProductID) Then
                WriteData "Product", strOfficeEdition
                WriteData "Key", DecodeProductKey(arrProductID,intKeyOffset) & vbCrLf
                intProductCount = intProductCount + 1
            End If
        Next
    End If
End Sub

Function RegReadBinary(strRegPath,strRegValue)
    Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\. \root\default:StdRegProv")
    objReg.GetBinaryValue HKLM,strRegPath,strRegValue,arrRegBinaryData
    RegReadBinary = arrRegBinaryData
    Set objReg = Nothing
End Function

Function OsArch()
    Set objShell = WScript.CreateObject("WScript.Shell")
    If objShell.ExpandEnvironmentStrings("%ProgramFiles(x86)%") = "%ProgramFiles(x86)%" Then
        OsArch = "x86" 
    Else
        OsArch = "x64"
    End If
    Set objShell = Nothing
End Function

Sub WriteData(strProperty,strValue)

    WScript.Echo strProperty & ": " & Trim(strValue)

End Sub


Готовый файл *.vbs файл: get-office-keys-vbs.zip

Проверим полученный ключ с помощью стандартной функции, позволяющей отобразить последние 5 символов ключа. Для 32 битного Офиса на 64 битной Windows команда такая:

cscript "C:\Program Files (x86)\Microsoft Office\Office14\OSPP.VBS" /dstatus

Часть ключа должна совпадать с полученными ранее данными.

Примечание. На скриншоте Office 2010, активированный KMS ключом).

SKU ID: 6f327760-8c5c-417c-9b61-836a98287e0c
LICENSE NAME: Office 14, OfficeProPlus-KMS_Client edition
LICENSE DESCRIPTION: Office 14, VOLUME_KMSCLIENT channel
LICENSE STATUS: ---LICENSED---
ERROR CODE: 0 as licensed
Last 5 characters of installed product key: h4GVB
REMAINING GRACE: 178 days (255897 minute(s) before expiring)

Работа с ячейками в Excel-VBA

Всё о работе с ячейками в Excel-VBA: обращение, перебор, удаление, вставка, скрытие, смена имени.

Содержание:

Table of Contents:

  • Что такое ячейка Excel?
  • Способы обращения к ячейкам
    • Выбор и активация
    • Получение и изменение значений ячеек
      • Ячейки открытой книги
      • Ячейки закрытой книги 
    • Перебор ячеек
    • Перебор в произвольном диапазоне
  • Свойства и методы ячеек
    • Имя ячейки
    • Адрес ячейки
    • Размеры ячейки
  • Запуск макроса активацией ячейки

2 нюанса:

  1. Я почти везде стараюсь использовать ThisWorkbook (а не, например, ActiveWorkbook) для обращения к текущей книге, в которой написан этот код (считаю это наиболее безопасным для новичков способом обращения к книгам, чтобы случайно не внести изменения в другие книги). Для экспериментов можете вставлять этот код в модули, коды книги, либо листа, и он будет работать только в пределах этой книги. 
  2. Я использую английский эксель и у меня по стандарту листы называются Sheet1, Sheet2 и т.д. Если вы работаете в русском экселе, то замените Thisworkbook.Sheets(«Sheet1») на Thisworkbook.Sheets(«Лист1»). Если этого не сделать, то вы получите ошибку в связи с тем, что пытаетесь обратиться к несуществующему объекту. Можно также заменить на Thisworkbook.Sheets(1), но это менее безопасно.

Что такое ячейка Excel?

В большинстве мест пишут: «элемент, образованный пересечением столбца и строки». Это определение полезно для людей, которые не знакомы с понятием «таблица». Для того, чтобы понять чем на самом деле является ячейка Excel, необходимо заглянуть в объектную модель Excel. При этом определения объектов «ряд», «столбец» и «ячейка» будут отличаться в зависимости от того, как мы работаем с файлом.

Объекты в Excel-VBA. Пока мы работаем в Excel без углубления в VBA определение ячейки как «пересечения» строк и столбцов нам вполне хватает, но если мы решаем как-то автоматизировать процесс в VBA, то о нём лучше забыть и просто воспринимать лист как «мешок» ячеек, с каждой из которых VBA позволяет работать как минимум тремя способами:

  1. по цифровым координатам (ряд, столбец),
  2. по адресам формата А1, B2 и т.д. (сценарий целесообразности данного способа обращения в VBA мне сложно представить)
  3. по уникальному имени (во втором и третьем вариантах мы будем иметь дело не совсем с ячейкой, а с объектом VBA range, который может состоять из одной или нескольких ячеек). Функции и методы объектов Cells и Range отличаются. Новичкам я бы порекомендовал работать с ячейками VBA только с помощью Cells и по их цифровым координатам и использовать Range только по необходимости.

Все три способа обращения описаны далее

Как это хранится на диске и как с этим работать вне Excel? С точки зрения хранения и обработки вне Excel и VBA. Сделать это можно, например, сменив расширение файла с .xls(x) на .zip и открыв этот архив.

Пример содержимого файла Excel:

Далее xl -> worksheets и мы видим файл листа

Содержимое файла:

 То же, но более наглядно:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="x14ac xr xr2 xr3" xmlns:x14ac="http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac" xmlns:xr="http://schemas.microsoft.com/office/spreadsheetml/2014/revision" xmlns:xr2="http://schemas.microsoft.com/office/spreadsheetml/2015/revision2" xmlns:xr3="http://schemas.microsoft.com/office/spreadsheetml/2016/revision3" xr:uid="{00000000-0001-0000-0000-000000000000}">
	<dimension ref="B2:F6"/>
	<sheetViews>
		<sheetView tabSelected="1" workbookViewId="0">
			<selection activeCell="D12" sqref="D12"/>
		</sheetView>
	</sheetViews>
	<sheetFormatPr defaultRowHeight="14. 4" x14ac:dyDescent="0.3"/>
	<sheetData>
		<row r="2" spans="2:6" x14ac:dyDescent="0.3">
			<c r="B2" t="s">
				<v>0</v>
			</c>
		</row>
		<row r="3" spans="2:6" x14ac:dyDescent="0.3">
			<c r="C3" t="s">
				<v>1</v>
			</c>
		</row>
		<row r="4" spans="2:6" x14ac:dyDescent="0.3">
			<c r="D4" t="s">
				<v>2</v>
			</c>
		</row>
		<row r="5" spans="2:6" x14ac:dyDescent="0.3">
			<c r="E5" t="s">
				<v>0</v></c>
		</row>
		<row r="6" spans="2:6" x14ac:dyDescent="0.3">
			<c r="F6" t="s"><v>3</v>
		</c></row>
	</sheetData>
	<pageMargins left="0.7" right="0.7" top="0.75" bottom="0.75" header="0.3" footer="0.3"/>
</worksheet>

Как мы видим, в структуре объектной модели нет никаких «пересечений». Строго говоря рабочая книга — это архив структурированных данных в формате XML. При этом в каждую «строку» входит «столбец», и в нём в свою очередь прописан номер значения данного столбца, по которому оно подтягивается из другого XML файла при открытии книги для экономии места за счёт отсутствия повторяющихся значений. Почему это важно. Если мы захотим написать какой-то обработчик таких файлов, который будет напрямую редактировать данные в этих XML, то ориентироваться надо на такую модель и структуру данных. И правильное определение будет примерно таким: ячейка — это объект внутри столбца, который в свою очередь находится внутри строки в файле xml, в котором хранятся данные о содержимом листа.

Способы обращения к ячейкам

Выбор и активация

Почти во всех случаях можно и стоит избегать использования методов Select и Activate. На это есть две причины:

  1. Это лишь имитация действий пользователя, которая замедляет выполнение программы. Работать с объектами книги можно напрямую без использования методов Select и Activate.
  2. Это усложняет код и может приводить к неожиданным последствиям. Каждый раз перед использованием Select необходимо помнить, какие ещё объекты были выбраны до этого и не забывать при необходимости снимать выбор. Либо, например, в случае использования метода Select в самом начале программы может быть выбрано два листа вместо одного потому что пользователь запустил программу, выбрав другой лист.

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

Отменить выбор  ячеек можно методом Unselect:

Selection.Unselect

Отличие выбора от активации — активировать можно только один объект из раннее выбранных. Выбрать можно несколько объектов.

Если вы записали и редактируете код макроса, то лучше всего заменить Select и Activate на конструкцию With … End With. Например, предположим, что мы записали вот такой макрос:

Sub Macro1()
' Macro1 Macro
    Range("F4:F10,H6:h20"). Select 'выбрали два несмежных диапазона зажав ctrl
    Range("H6").Activate          'показывает только то, что я начал выбирать второй диапазон с этой ячейки (она осталась белой). Это действие ни на что не влияет
    With Selection.Interior       
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .Color = 65535            'залили желтым цветом, нажав на кнопку заливки на верхней панели
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
End Sub

Почему макрос записался таким неэффективным образом? Потому что в каждый момент времени (в каждой строке) программа не знает, что вы будете делать дальше. Поэтому в записи выбор ячеек и действия с ними — это два отдельных действия. Этот код лучше всего оптимизировать (особенно если вы хотите скопировать его внутрь какого-нибудь цикла, который должен будет исполняться много раз и перебирать много объектов). Например, так:

Sub Macro11()
'
' Macro1 Macro
    Range("F4:F10,H6:h20"). Select '1. смотрим, что за объект выбран (что идёт до .Select)
    Range("H6").Activate
    With Selection.Interior       '2. понимаем, что у выбранного объекта есть свойство interior, с которым далее идёт работа
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .Color = 65535
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
End Sub



Sub Optimized_Macro()
    With Range("F4:F10,H6:h20").Interior '3. переносим объект напрямую в конструкцию With вместо Selection
' ////// Здесь я для надёжности прописал бы ещё Thisworkbook.Sheet("ИмяЛиста") перед Range,
' ////// чтобы минимизировать риск любых случайных изменений других листов и книг
' ////// With Thisworkbook.Sheet("ИмяЛиста").Range("F4:F10,H6:h20").Interior
        .Pattern = xlSolid               '4. полностью копируем всё, что было записано рекордером внутрь блока with
        .PatternColorIndex = xlAutomatic
        . Color = 55555                   '5. здесь я поменял цвет на зеленый, чтобы было видно, работает ли код при поочерёдном запуске двух макросов
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
End Sub

Пример сценария, когда использование Select и Activate оправдано:

Допустим, мы хотим, чтобы во время исполнения программы мы одновременно изменяли несколько листов одним действием и пользователь видел какой-то определённый лист. Это можно сделать примерно так:

Sub Select_Activate_is_OK()
Thisworkbook.Worksheets(Array("Sheet1", "Sheet3")).Select 'Выбираем несколько листов по именам
Thisworkbook.Worksheets("Sheet3").Activate 'Показываем пользователю третий лист
'Далее все действия с выбранными ячейками через Select будут одновременно вносить изменения в оба выбранных листа

'Допустим, что тут мы решили покрасить те же два диапазона:
Range("F4:F10,H6:h20").Select
    Range("H6").Activate
    With Selection. Interior       
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .Color = 65535
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With

End Sub

Единственной причиной использовать этот код по моему мнению может быть желание зачем-то показать пользователю определённую страницу книги в какой-то момент исполнения программы. С точки зрения обработки объектов, опять же, эти действия лишние.

Получение и изменение значений ячеек

Значение ячеек можно получать/изменять с помощью свойства value. 

'Если нужно прочитать / записать значение ячейки, то используется свойство Value
a = ThisWorkbook.Sheets("Sheet1").Cells (1,1).Value 'записать значение ячейки А1 листа "Sheet1" в переменную "a"
ThisWorkbook.Sheets("Sheet1").Cells (1,1).Value = 1  'задать значение ячейки А1 (первый ряд, первый столбец) листа "Sheet1"

'Если нужно прочитать текст как есть (с форматированием), то можно использовать свойство . text:
ThisWorkbook.Sheets("Sheet1").Cells (1,1).Text = "1" 
a = ThisWorkbook.Sheets("Sheet1").Cells (1,1).Text

'Когда проявится разница:
'Например, если мы считываем дату в формате "31 декабря 2021 г.", хранящуюся как дата
a = ThisWorkbook.Sheets("Sheet1").Cells (1,1).Value 'эапишет как "31.12.2021"
a = ThisWorkbook.Sheets("Sheet1").Cells (1,1).Text  'запишет как "31 декабря 2021 г."
Ячейки открытой книги

К ячейкам можно обращаться:

'В книге, в которой хранится макрос (на каком-то из листов, либо в отдельном модуле или форме)
ThisWorkbook.Sheets("Sheet1").Cells(1,1).Value        'По номерам строки и столбца
ThisWorkbook.Sheets("Sheet1").Cells(1,"A").Value      'По номерам строки и букве столбца
ThisWorkbook.Sheets("Sheet1").Range("A1").Value       'По адресу - вариант 1
ThisWorkbook.Sheets("Sheet1").[A1].Value              'По адресу - вариант 2
ThisWorkbook.Sheets("Sheet1").Range("CellName").Value 'По имени ячейки (для этого ей предварительно нужно его присвоить)

'Те же действия, но с использованием полного названия рабочей книги (книга должна быть открыта)
Workbooks("workbook. xlsm").Sheets("Sheet1").Cells(1,1).Value 'По номерам строки и столбца
Workbooks("workbook.xlsm").Sheets("Sheet1").Cells(1,"A").Value                'По номерам строки и букве столбца
Workbooks("workbook.xlsm").Sheets("Sheet1").Range("A1").Value                 'По адресу - вариант 1
Workbooks("workbook.xlsm").Sheets("Sheet1").[A1].Value                        'По адресу - вариант 2
Workbooks("workbook.xlsm").Sheets("Sheet1").Range("CellName").Value           'По имени ячейки (для этого ей предварительно нужно его присвоить)
Ячейки закрытой книги

Если нужно достать или изменить данные в другой закрытой книге, то необходимо прописать открытие и закрытие книги. Непосредственно работать с закрытой книгой не получится, потому что данные в ней хранятся отдельно от структуры и при открытии Excel каждый раз производит расстановку значений по соответствующим «слотам» в структуре. Подробнее о том, как хранятся данные в xlsx см выше.

Workbooks.Open Filename:="С:\closed_workbook. xlsx"    'открыть книгу (она становится активной)
a = ActiveWorkbook.Sheets("Sheet1").Cells(1,1).Value  'достать значение ячейки 1,1
ActiveWorkbook.Close False                            'закрыть книгу (False => без сохранения)

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

Код из файла:

Option Explicit
Sub get_value_from_closed_wb() 'достать значение из закрытой книги
Dim a, wb_path, wsh As String
wb_path = ThisWorkbook.Sheets("Sheet1").Cells(2, 3).Value 'get path to workbook from sheet1
wsh = ThisWorkbook.Sheets("Sheet1").Cells(3, 3).Value
Workbooks.Open Filename:=wb_path
a = ActiveWorkbook.Sheets(wsh).Cells(3, 3).Value
ActiveWorkbook.Close False
ThisWorkbook.Sheets("Sheet1").Cells(4, 3).Value = a
End Sub

Sub record_value_to_closed_wb() 'записать значение в закрытую книгу
Dim wb_path, b, wsh As String
wsh = ThisWorkbook.Sheets("Sheet1"). Cells(3, 3).Value
wb_path = ThisWorkbook.Sheets("Sheet1").Cells(2, 3).Value 'get path to workbook from sheet1
b = ThisWorkbook.Sheets("Sheet1").Cells(5, 3).Value 'get value to record in the target workbook
Workbooks.Open Filename:=wb_path
ActiveWorkbook.Sheets(wsh).Cells(4, 4).Value = b 'add new value to cell D4 of the target workbook
ActiveWorkbook.Close True
End Sub

 

Перебор ячеек

Перебор в произвольном диапазоне

Скачать файл со всеми примерами

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

  1. Цикл For Each. Пример:
    Sub iterate_over_cells()
    
    For Each c In ThisWorkbook.Sheets("Sheet1").Range("B2:D4").Cells
    MsgBox (c)
    Next c
    
    End Sub​

    Этот цикл выведет в виде сообщений значения ячеек в диапазоне B2:D4 по порядку по строкам слева направо и по столбцам — сверху вниз. Данный способ можно использовать для действий, в который вам не важны номера ячеек (закрашивание, изменение форматирования, пересчёт чего-то и т. д.).

  2. Ту же задачу можно решить с помощью двух вложенных циклов — внешний будет перебирать ряды, а вложенный — ячейки в рядах. Этот способ я использую чаще всего, потому что он позволяет получить больше контроля над исполнением: на каждой итерации цикла нам доступны координаты ячеек. Для перебора всех ячеек на листе этим методом потребуется найти последнюю заполненную ячейку. Пример кода:
    Sub iterate_over_cells()
    
    Dim cl, rw As Integer
    Dim x As Variant
    
    'перебор области 3x3
    For rw = 1 To 3 ' цикл для перебора рядов 1-3
    
        For cl = 1 To 3 'цикл для перебора столбцов 1-3
            x = ThisWorkbook.Sheets("Sheet1").Cells(rw + 1, cl + 1).Value
            MsgBox (x)
        Next cl
    Next rw
    
    
    
    'перебор всех ячеек на листе. Последняя ячейка определена с помощью UsedRange
    'LastRow = ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count - 1
    'LastCol = ActiveSheet.UsedRange.Column + ActiveSheet. UsedRange.Columns.Count - 1
    'For rw = 1 To LastRow 'цикл перебора всех рядов
    '    For cl = 1 To LastCol 'цикл для перебора всех столбцов
    '        Действия 
    '    Next cl
    'Next rw
    
    
    End Sub​

  3. Если нужно перебрать все ячейки в выделенном диапазоне на активном листе, то код будет выглядеть так:
    Sub iterate_cell_by_cell_over_selection()
        Dim ActSheet As Worksheet
        Dim SelRange As Range
        Dim cell As Range
        
     
        Set ActSheet = ActiveSheet
        Set SelRange = Selection
        
        'if we want to do it in every cell of the selected range
        For Each cell In Selection
        MsgBox (cell.Value)
        
        Next cell
    
    End Sub​


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

  4. Перебор ячеек в ряду
    Sub iterate_cells_in_row()
        Dim i, RowNum, StartCell As Long
        
        RowNum = 3 'какой ряд
        StartCell = 0 ' номер начальной ячейки (минус 1, т. к. в цикле мы прибавляем i)
        
        For i = 1 To 10 ' 10 ячеек в выбранном ряду
        ThisWorkbook.Sheets("Sheet1").Cells(RowNum, i + StartCell).Value = i '(i + StartCell) добавляет 1 к номеру столбца при каждом повторении
        Next i
    
    End Sub

  5. Перебор ячеек в столбце
    Sub iterate_cells_in_column()
        Dim i, ColNum, StartCell As Long
        
        ColNum = 3 'какой столбец
        StartCell = 0 ' номер начальной ячейки (минус 1, т.к. в цикле мы прибавляем i)
        
        For i = 1 To 10 ' 10 ячеек
        ThisWorkbook.Sheets("Sheet1").Cells(i + StartCell, ColNum).Value = i ' (i + StartCell) добавляет 1 к номеру ряда при каждом повторении
        Next i
    
    End Sub​

Свойства и методы ячеек

Имя ячейки

Присвоить новое имя можно так:

Thisworkbook.Sheets(1).Cells(1,1).name = "Новое_Имя"

Для того, чтобы сменить имя ячейки нужно сначала удалить существующее имя, а затем присвоить новое. Удалить имя можно так:

ActiveWorkbook.Names("Старое_Имя").Delete

Пример кода для переименования ячеек:

Sub rename_cell()

old_name = "Cell_Old_Name"
new_name = "Cell_New_Name"

ActiveWorkbook.Names(old_name).Delete
ThisWorkbook.Sheets(1).Cells(2, 1).Name = new_name
End Sub

Sub rename_cell_reverse()

old_name = "Cell_New_Name"
new_name = "Cell_Old_Name"

ActiveWorkbook.Names(old_name).Delete
ThisWorkbook.Sheets(1).Cells(2, 1).Name = new_name
End Sub

Адрес ячейки

Sub get_cell_address() ' вывести адрес ячейки в формате буква столбца, номер ряда
  '$A$1 style
  txt_address = ThisWorkbook.Sheets(1).Cells(3, 2).Address
  MsgBox (txt_address)
End Sub

Sub get_cell_address_R1C1()' получить адрес столбца в формате номер ряда, номер столбца
  'R1C1 style
  txt_address = ThisWorkbook.Sheets(1).Cells(3, 2).Address(ReferenceStyle:=xlR1C1)
  MsgBox (txt_address)
End Sub

  'пример функции, которая принимает 2 аргумента: название именованного диапазона и тип желаемого адреса 
  '(1- тип $A$1 2- R1C1 - номер ряда, столбца)
Function get_cell_address_by_name(str As String, address_type As Integer)
  '$A$1 style
  Select Case address_type
    Case 1
      txt_address = Range(str). Address
    Case 2
      txt_address = Range(str).Address(ReferenceStyle:=xlR1C1)
    Case Else
      txt_address = "Wrong address type selected. 1,2 available"
    End Select
  get_cell_address_by_name = txt_address
End Function

'перед запуском нужно убедиться, что в книге есть диапазон с названием, 
'адрес которого мы хотим получить, иначе будет ошибка
Sub test_function() 'запустите эту программу, чтобы увидеть, как работает функция
  x = get_cell_address_by_name("MyValue", 2)
  MsgBox (x)
End Sub

Размеры ячейки

Ширина и длина ячейки в VBA меняется, например, так:

Sub change_size()
Dim x, y As Integer
Dim w, h As Double

'получить координаты целевой ячейки
x = ThisWorkbook.Sheets("Sheet1").Cells(2, 2).Value
y = ThisWorkbook.Sheets("Sheet1").Cells(3, 2).Value

'получить желаемую ширину и высоту ячейки
w = ThisWorkbook.Sheets("Sheet1").Cells(6, 2).Value
h = ThisWorkbook. Sheets("Sheet1").Cells(7, 2).Value

'сменить высоту и ширину ячейки с координатами x,y
ThisWorkbook.Sheets("Sheet1").Cells(x, y).RowHeight = h
ThisWorkbook.Sheets("Sheet1").Cells(x, y).ColumnWidth = w


End Sub

Прочитать значения ширины и высоты ячеек можно двумя способами (однако результаты будут в разных единицах измерения). Если написать просто Cells(x,y).Width или Cells(x,y).Height, то будет получен результат в pt (привязка к размеру шрифта). 

Sub get_size()
Dim x, y As Integer
'получить координаты ячейки, с которой мы будем работать
x = ThisWorkbook.Sheets("Sheet1").Cells(2, 2).Value
y = ThisWorkbook.Sheets("Sheet1").Cells(3, 2).Value

'получить длину и ширину выбранной ячейки в тех же единицах измерения, в которых мы их задавали
ThisWorkbook.Sheets("Sheet1").Cells(2, 6).Value = ThisWorkbook.Sheets("Sheet1").Cells(x, y).ColumnWidth
ThisWorkbook.Sheets("Sheet1").Cells(3, 6).Value = ThisWorkbook. Sheets("Sheet1").Cells(x, y).RowHeight

'получить длину и ширину с помощью свойств ячейки (только для чтения) в поинтах (pt)
ThisWorkbook.Sheets("Sheet1").Cells(7, 9).Value = ThisWorkbook.Sheets("Sheet1").Cells(x, y).Width
ThisWorkbook.Sheets("Sheet1").Cells(8, 9).Value = ThisWorkbook.Sheets("Sheet1").Cells(x, y).Height

End Sub

Скачать файл с примерами изменения и чтения размера ячеек

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

Для запуска кода VBA при активации ячейки необходимо вставить в код листа нечто подобное:

3 важных момента, чтобы это работало:

1. Этот код должен быть вставлен в код листа (здесь контролируется диапазон D4)

2-3. Программа, ответственная за запуск кода при выборе ячейки, должна называться Worksheet_SelectionChange и должна принимать значение переменной Target, относящейся к триггеру SelectionChange. Другие доступные триггеры можно посмотреть в правом верхнем углу (2).

Скачать файл с базовым примером (как на картинке)

Скачать файл с расширенным примером (код ниже)

Option Explicit

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

        ' имеем в виду, что триггер SelectionChange будет запускать эту Sub после каждого клика мышью (после каждого клика будет проверяться:
          '1. количество выделенных ячеек и 
          '2. не пересекается ли выбранный диапазон с заданным в этой программе диапазоном.
        ' поэтому в эту программу не стоит без необходимости писать никаких других тяжелых операций

    If Selection.Count = 1 Then 'запускаем программу только если выбрано не более 1 ячейки


    'вариант модификации - брать адрес ячейки из другой ячейки:
    'Dim CellName as String
    'CellName = Activesheet.Cells(1,1).value 'брать текстовое имя контролируемой ячейки из A1 (должно быть в формате Буква столбца + номер строки)
    'If Not Intersect(Range(CellName), Target) Is Nothing Then
    'для работы этой модификации следующую строку надо закомментировать/удалить



        If Not Intersect(Range("D4"), Target) Is Nothing Then 
        'если заданный (D4) и выбранный диапазон пересекаются 
        '(пересечение диапазонов НЕ равно Nothing)

        'можно прописать диапазон из нескольких ячеек:
        'If Not Intersect(Range("D4:E10"), Target) Is Nothing Then
        'можно прописать несколько диапазонов:
        'If Not Intersect(Range("D4:E10"), Target) Is Nothing or Not Intersect(Range("A4:A10"), Target) Is Nothing Then

            Call program 'выполняем программу
        End If
    End If
End Sub

Sub program()

MsgBox ("Program Is running") 'здесь пишем код того, что произойдёт при выборе нужной ячейки


End Sub

 

Как сделать ссылку активной в Microsoft Excel – База знаний Timeweb Community

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

Вариант 1: Вставка ссылки из браузера

Excel работает таким образом, что при копировании ссылки из адресной строки веб-обозревателя она сразу же становится активной. Используйте этот метод, если нужно вставить новые строки в таблицу, а не редактировать уже существующие. Найдите требуемую страницу в браузере и скопируйте ее, выделив и используя комбинацию клавиш Ctrl + C.

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

Прочитайте текст на всплывающей подсказке, появляющейся при наведении курсора на саму ссылку: в ней есть информация о том, что переход происходит при одинарном нажатии, а для выделения необходимо кликнуть и удерживать кнопку мыши. Это поможет разобраться с редактированием, если ранее вы с ним не работали. 

Комьюнити теперь в Телеграм

Подпишитесь и будьте в курсе последних IT-новостей

Подписаться

Вариант 2: Самостоятельная активация ссылки

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

  1. Выделите ячейку со ссылкой или надписью, после чего нажмите по ней ПКМ.

  2. Из появившегося контекстного меню выберите пункт «Ссылка», открыв соответствующее окно с настройками.

  3. Если сейчас ссылка представлена в поле «Текст», ее необходимо скопировать и перенести в поле «Адрес».

  4. Вместо ссылки в поле «Текст» вы можете вписать любую надпись, нажатие по которой отвечает за переход по ссылке, вставленной в поле «Адрес».

  5. Примените изменения и вернитесь к таблице. На следующем скриншоте вы видите результат активации ссылки с заменой ее текста на более уместный.

Думаю, принцип использования окна «Ссылка» вам понятен, и проблем с переименованием возникнуть не должно. Используйте такой метод, когда нужно заменить громоздкую ссылку на лаконичную надпись, которая не будет нарушать внешний вид таблицы, но при этом останется функционально полезной.

Вариант 3: Использование макроса

Последний вариант самый необычный и подходит в редких случаях. Чаще всего он применим, когда в таблице уже есть перечень ссылок, находящихся в рамках одного столбца, но при этом они неактивны. Активировать каждую при помощи представленных выше инструкций можно, но это займет много времени. Проще сделать это при помощи специального макроса.

  1. Для начала через главное окно перейдите в меню «Параметры».

  2. Выберите раздел «Настроить ленту» и поставьте галочку возле основной вкладки «Разработчик». Так вы обеспечите ее отображение в верхней панели программы, что нам сейчас и пригодится.

  3. Примените изменения, вернитесь к таблице, перейдите на соответствующую вкладку и запустите оснастку «Visual Basic».

  4. Дважды щелкните по файлу книги, чтобы справа отобразилось окно редактирования кода.

  5. Вставьте туда оставленный ниже код, заменив значения «a2» на номер ячейки, с которой начинается активация ссылок, а «а» – на букву столбца.


    
    Sub HyperSsylka()
    Dim cell As Range, ra As Range: Application.ScreenUpdating = False
    Set ra = Range([a2], Range("a" & Rows.Count).End(xlUp))
    For Each cell In ra.Cells
    If Len(cell) Then cell.Hyperlinks.Add cell, cell
    Next cell
    End Sub
    
    Sub HyperSsylkaSelect()
    Dim cell As Range: Application.ScreenUpdating = False
    For Each cell In Selection
    If Len(cell) Then cell. Hyperlinks.Add cell, cell
    Next cell
    End Sub


    Строку для редактирования вы видите на следующем изображении. 

  6. Сохраните результат, нажав по соответствующей кнопке на панели сверху или используя сочетание клавиш Ctrl + S.

  7. Закройте редактор кода и запустите окно «Макрос». Дважды щелкните по строке с созданным макросом для активации ссылок.

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

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

почему не удается выполнить и не активны – WindowsTips.Ru. Новости и советы

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

Причины

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

  1. Функция отключена.
  2. Отключение отслеживания событий.
  3. Устаревшая операционная система.
  4. Несоответствие разработчика пакета офисных приложений.
  5. Устаревшая версия Майкрософт Офис.
  6. Неактивированная версия Excel.
  7. Заблокированный файл.
  8. Неправильные настройки безопасности.
  9. Отсутствие необходимой библиотеки и т. д.

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

Что делать

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

Включите опцию

Первое, что необходимо сделать — включить функцию для обеспечения ее работоспособности. Здесь многое зависит от версии Эксель.

Если не работают макросы в Excel 2003, сделайте следующие шаги:

  1. Войдите в «Сервис».
  2. Перейдите в раздел «Безопасность».
  3. Кликните «Уровень макросов «Низкий».

В случае, когда не работают макросы в Excel 2007, включите их следующим образом:

  1. Жмите на кнопку «Офис».
  2. Войдите в параметры Excel.
  3. Кликните на «Центр управления безопасности».
  4. Войдите в «Параметры центра управления безопасностью».
  5. Жмите на «Параметры макросов».
  6. Кликните на «Разрешить все …».

В ситуации, когда не работают макросы в Excel 2016, сделайте следующие шаги:

  1. Войдите в раздел «Файл».
  2. Кликните на кнопку «Параметры».
  3. Зайдите в «Центр управления безопасностью».
  4. Войдите в «Параметры центра управления безопасностью».
  5. Кликните на «Параметры …».
  6. Жмите на «Разрешить все …».

После внесения изменений параметра безопасности перезапустите приложение Excel, а именно закройте его полностью и откройте снова. Лишь после этого изменения вступают в силу.

Добавьте нужный модуль в книгу

Бывают ситуации, когда макросы включены, но не работают в Excel из-за отключения каким-либо элементом отслеживания событий. В таком случае сделайте следующее:

  1. Перейдите в редактор VBA с помощью клавиш Alt+F11.
  2. Вставьте указанный ниже код.

Sub Reset_Events()

Application.EnableEvents = True

End Sub

  1. Для выполнения кода поставьте курсор в любой точке между началом и концом.
  2. Кликните F5.

Проверьте операционную систему

В ситуации, когда не отображаются макросы в Excel, обратите внимание на тип операционной системы. К примеру, Майкрософт Офис, который подходит для Виндовс, на Мак ОС уже работать не будет. Причина в том, что в приложении используются разные библиотеки. Даже если надстройки и функционируют, могут быть сбои в работе. Вот почему при появлении проблем нужно проверить ОС на соответствие.

Обратите внимание на разработчика

Если в Экселе не работают макросы, причиной может быть другой разработчик. Так, пользователи Excel часто применяют OpenOffice или LibreOffice. Эти пакеты созданы на разных языках программирования, которые имеют индивидуальные особенности. Так, если надстройки написаны на Visual Basic for Application, он может не работать в указанных выше офисных приложениях. Вот почему необходимо уточнять, для какого пакета создан макрос / надстройка.

Проверьте версию Майкрософт Офис

В Макрософт Офис 2003 применяются надстройки xla для Excel. В современных версиях расширение поменялось на xlam. Если ставить макросы старого типа в приложения Офис 2007 и больше, никаких трудностей не происходит. Если же вы попытаетесь поставить новую надстройку на старую версию Excel, она зачастую не работает. Вот почему важно обратить внимание на этот параметр при выборе.

Убедитесь в наличии пакета VBA

Одной из причин, почему не запускается макрос в Excel, может быть отсутствие пакета VBA. Для успешного запуска надстройки необходимо, чтобы этот пакет был установлен. Иногда он уже установлен в Офис, но так происходит не всегда. Для проверки жмите комбинацию на Alt+F11. Если после этого появляется Visual Basic, компонент можно считать установленным. В ином случае его нужно поставить. Для этого:

  • Зайдите в «Пуск», а далее «Панель управления / Программы и компоненты».
  • Выберите программу Майкрософт Офис.
  • Жмите на кнопку «Изменить».
  • Запустить файл установки Setup.exe.
  • Кликните на «Добавить или удалить компоненты».
  • Выберите в списке Visual Basic и установите его.

Активируйте Офис

Если в Excel 2007 не работает кнопка «макросы», причиной может быть отсутствие активации приложения. Для этого жмите на кнопку «Активировать» и следуйте инструкции. В большинстве случаев такая опция является платной.

Снимите блокировку файла

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

 Проверьте библиотеки

В случае, когда параметры макросов не активны в Excel, причиной может быть появление ошибки «Can’t find project or library». При этом, надстройка работает на другом ПК / ноутбуке, а здесь возникают проблемы. Ошибку легко устранить, если в окне, которое идет за сообщением об ошибке, снять отметки в полях Missing. Для вызова окна можно выбрать пункт меню Tools / References.

Проверьте настройки безопасности

В ситуации, когда не работают макросы в Excel, можно добавить надежные расположения или настроить доступ к объектной модели VBA. Для этого в Офис 2007 необходимо сделать следующее:

  1. Войдите в Меню
  2. Кликните на пункт «Параметры».
  3. Жмите на «Центр управления безопасностью».
  4. Войдите в «Параметры центра управления безопасностью».
  5. Кликните на «Параметры макросов» и «Доверять доступ к объектной модели проектов».

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

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

Excel, VBA, использование словаря (Dictionary)

Время прочтения: 5 мин.

Довольно часто, чтобы связать две таблицы Excel по уникальному значению (ключу) в одном из столбцов, мы применяем простую и удобную функцию ВПР(). Но в случаях, когда поиск надо выполнить в большой таблице (например более 500 тыс. строк) и еще для нескольких столбцов, мы можем не дождаться вычисления ВПР, Excel просто «зависнет».

Для таких случаев в арсенале VBA есть объект Dictionary, предназначенный для записи, хранения и использования пар, состоящих из ключа и элемента данных. Скорость поиска элемента данных по ключу в разы превышает возможности ВПР().

Перед тем как искать значение по ключу необходимо создать и заполнить словарь, все вычисления происходят в оперативной памяти компьютера без использования листа/ячеек Excel, поэтому вычисления происходят гораздо быстрее. Для примера я взял лог-файл автоматизированной системы по управлению очередями в офисах (для одного филиала организации за два месяца это составило 570 тыс. записей). Формат лог-файла на картинке:

Время обработки с использованием Dictionary составило около 3 минут.

Для визуализации процесса обработки был использован простой ProgressBar, не требующий подключения дополнительных библиотек. Для этого процедура Обработка() запущена из кода процедуры активации формы UserForm1.

Sub UserForm_Activate()
    UserForm1.Label1.Width = 1
    UserForm1.Label2.Width = 1
    Call Обработка
End Sub

Ниже я представил  код из модуля книги

Sub Начало() 'запускает форму для отображение процесса обработки
    UserForm1.Show
End Sub
-----------------------------------------------------
Sub Обработка() 'главная процедура обработки данных
    Dim НашСловарь As New Dictionary 'создадим пустой словарь
    Dim Источник() As Variant 'объявим массив для хранения строк таблицы-источника
    
    'перед заполнением очистим лист с результатом
    КолСтрокРез = Worksheets("результат").UsedRange.Rows.Count 'кол-во строк таблицы-результата
    If КолСтрокРез > 1 Then Worksheets("результат").Range(Rows(3), Rows(КолСтрокРез)).ClearContents
    
    КолСтрок = Worksheets("источник").UsedRange.Rows.Count 'кол-во строк таблицы-источника
    t1 = Format(Now, "Long Time")
    '======= 1 ЭТАП "Подготовка данных и формирование словаря" ========
    'строки из источника в массив для дальнейшей обработки
    Источник = Worksheets("источник"). Range(Worksheets("Источник").Cells(3, 1), Worksheets("Источник").Cells(КолСтрок, 7)).Value
    
    'выведем на лист "результат" приход клиента в офис (тип события - 1, Получение талона)
    'и заполним словарь для последующего поиска
    n = 2
    ШагПрогресса = Int(КолСтрок / 50)
    Прогресс = 0
    For i = 1 To UBound(Источник)
        ТипСобытия = Источник(i, 5)
        If ТипСобытия = 1 Then
            n = n + 1
            Worksheets("результат").Cells(n, 1) = Источник(i, 1) 'офис
            Worksheets("результат").Cells(n, 2) = Источник(i, 2) 'дата
            Worksheets("результат").Cells(n, 3) = Источник(i, 4) 'талон
            Worksheets("результат").Cells(n, 4) = Источник(i, 3) 'время
        Else
            'вычислим ID для каждого события (офис+дата+талон+тип события)
            'запишем в словарь, где ключом будет ID, а значением одномерный массив (время события; окно)
            ID = CStr(Источник(i, 1)) + CStr(Источник(i, 2)) + CStr(Источник(i, 4)) + CStr(ТипСобытия)
            If Not НашСловарь. Exists(ID) Then 'если в словаре нет такого ID, то запишем в словарь
               НашСловарь.Add ID, Array(Источник(i, 3), Источник(i, 7))
            End If
        End If
        Прогресс = ПрогрессПоказать1(i, ШагПрогресса, Прогресс, КолСтрок)
    Next i
    t2 = Format(Now, "Long Time")
    
    '======= 2 ЭТАП "Поиск в словаре времени изменения состояний талонов" ========
    'на листе "результат" заполним состояния от 2 до 7
    ШагПрогресса = Int(n / 50)
    Прогресс = 0
    For k = 3 To n
        With Worksheets("результат")
            For j = 2 To 7
                IDj = CStr(.Cells(k, 1)) + CStr(.Cells(k, 2)) + CStr(.Cells(k, 3)) + CStr(j)
                If НашСловарь.Exists(IDj) Then 'ищем в словаре
                    .Cells(k, j + 4) = НашСловарь(IDj)(0)
                    'для события "2-вызов клиента" заполним поле "номер окна"
                    If j = 2 Then .Cells(k, 5) = НашСловарь(IDj)(1)
                End If
            Next j
            'вычислим время ожидания клиента
            . Cells(k, 12) = .Cells(k, 6) - .Cells(k, 4)
            'вычислим время обслуживания клиента
            If .Cells(k, 7) > 0 Then
                .Cells(k, 13) = .Cells(k, 7) - .Cells(k, 6)
            End If
        End With
        Прогресс = ПрогрессПоказать2(k, ШагПрогресса, Прогресс, n)
    Next k
    t3 = Format(Now, "Long Time")
    
    'очистим массив и словарь
    Erase Источник
    НашСловарь.RemoveAll
    Worksheets("результат").Cells(2, 14) = t1
    Worksheets("результат").Cells(2, 15) = t2
    Worksheets("результат").Cells(2, 16) = t3
    Unload UserForm1
    MsgBox ("Обработка завершена")
End Sub
-----------------------------------------------------
‘Далее дополнительные функции для отрисовки процесса обработки
Function ПрогрессПоказать1(a, b, c, d)
    If c = 0 Then
       c = c + b
    ElseIf a >= c Then
       UserForm1.Label1.Width = Int(300 * c / d)
       UserForm1.Label5.Caption = CStr(Int(c / d * 100)) + "%"
       UserForm1.Repaint
       c = c + b
    End If
    ПрогрессПоказать1 = c
End Function
---------------------------------------------------
Function ПрогрессПоказать2(a, b, c, d)
    If c = 0 Then
       c = c + b
    ElseIf a >= c Then
       UserForm1. Label2.Width = Int(300 * c / d)
       UserForm1.Repaint
       c = c + b
    End If
    ПрогрессПоказать2 = c
End Function

Обратите внимание, что перед использованием макроса следует проверить, включен ли у вас в Настройках VBA параметр MicrosoftScripting Runtime (см. рисунки ниже)

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

Защита от копирования Excel VBA — VbaCompiler

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

Вот демонстрация того, насколько плоха исходная защита Excel VBA:

https://stackoverflow. com/questions/17246101/anti-piracy-procedure-for-excel-workbook/17251593#17251593

DoneEx VbaCompiler для Excel предлагает простой и удобный механизм защиты от копирования кода VBA с уникальный подход к защите кода VBA. Это самый надежный подход, поскольку он включает компиляцию кода VBA в DLL вместе с дополнительной защитой от копирования с помощью ключа регистрации/активации.

После компиляции VBA в DLL никто не может копировать, отслеживать или наблюдать ваш код или алгоритмы VBA.

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

Первым и наиболее важным требованием для хорошей защиты от копирования VBA является полная недоступность кода VBA для всех. Это требование гарантируется компиляцией кода VBA в формат двоичного файла DLL. Второе требование — это возможность автора VBA-программы контролировать распространение скомпилированного продукта — это обеспечивается механизмом регистрационного ключа VbaCompiler.

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

Как работает защита от копирования VBA — шаг за шагом

  1. Скомпилируйте код VBA с помощью VbaCompiler for Excel с включенными параметрами «Защита от копирования с регистрационным ключом» и «Аппаратная блокировка».
  2. Предоставьте клиенту скомпилированную книгу или надстройку.
  3. Клиент запускает книгу или активирует надстройку на своем компьютере и видит предупреждение о том, что регистрационный ключ не найден. Это сообщение содержит информацию об идентификаторе компьютера клиента и кнопку «Копировать идентификатор компьютера».
  4. Клиент копирует идентификатор своего компьютера, нажав кнопку «Копировать идентификатор компьютера», вставляет его в текст сообщения электронной почты или в другую систему обмена сообщениями, которая может связаться с вами, и передает вам идентификатор компьютера.
  5. Когда вы получаете идентификатор компьютера, относящийся к компьютеру клиента, вы генерируете регистрационный ключ с использованием этого идентификатора компьютера в соответствующем поле «Инструмента ключа регистрации».
  6. Отправьте клиенту файл регистрационного ключа.
  7. Клиент копирует файл регистрационного ключа в папку, в которой находится скомпилированная рабочая книга или надстройка. Теперь эта копия вашего продукта может запускаться только на компьютере этого клиента.

Инструмент ключа регистрации

Инструмент ключа регистрации является важной частью решения защиты от копирования VBA.

Инструмент «Ключ регистрации» позволяет создать ключ регистрации/активации для книги Excel или надстройки, скомпилированной с опцией «Защита от копирования с ключом регистрации».

Главное меню компилятора VBA содержит пункт меню «RegKey Tool». Если вы нажмете этот элемент, вы увидите окно «Инструмент ключа регистрации», в котором содержатся все параметры, связанные с генерацией ключа активации.

Путь к скомпилированной DLL – в этом поле необходимо ввести полный путь (путь и имя файла) DLL-файла, скомпилированного с опцией «Защита от копирования регистрационным ключом». Если вы введете имя DLL, которая была скомпилирована без этой опции, вы получите сообщение, в котором говорится: «Файл DLL не был скомпилирован с включенной опцией лицензии». Вы можете выбрать файл DLL в окне просмотра файлов, нажав кнопку […] в правой части поля редактирования.

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

Имя клиента – в этом поле необходимо ввести имя клиента и/или название компании клиента.

Электронная почта клиента – в этом поле необходимо ввести адрес электронной почты вашего клиента.

Идентификатор компьютера клиента — это поле доступно только в том случае, если вы скомпилировали код Excel VBA с включенной опцией «Аппаратная блокировка». Вам необходимо получить значение идентификатора компьютера с компьютера клиента. Он будет отображаться в окне сообщения, когда клиент запускает защищенную книгу или надстройку без регистрационного ключа.

Вот пример того, как это сообщение может выглядеть для клиента:

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

Ограничить период использования приложения — этот флажок включает поля «дата от» и «дата до». Эти поля определяют начало и конец периода, когда ваше приложение сможет работать на компьютере клиента.

Кнопка Create RegKey – Эта кнопка запускает создание файла ключа регистрации/активации для DLL, выбранной в поле «Путь к скомпилированной DLL». Вновь сгенерированный регистрационный ключ будет находиться в той же папке, что и скомпилированная DLL. Файл ключа регистрации/активации создается с именем скомпилированной книги или надстройки, но с расширением «.dat».

Кнопка View RegKey — Эта кнопка позволяет загрузить в форму информацию из существующего файла регистрационного ключа. Вы можете использовать эту кнопку для чтения информации из файла регистрационного ключа, который вы уже создали.

Пример использования средства регистрации ключа

В данном случае мы рассмотрим пример компиляции ApproxPi.xls с опцией защиты от копирования, опцией «Аппаратная блокировка» и использованием средства регистрации ключа для создания RegKey для защищенная рабочая тетрадь.

1. Скомпилируйте свой код VBA с опцией «Защита от копирования с регистрационным ключом» и опцией «Аппаратная блокировка» на:

После успешной компиляции вы увидите следующие файлы в выходной папке:

2. Отправьте скомпилированный файл «ApproxPi.xls» и скомпилированный файл «ApproxPi_xls_32.dll» вашему клиенту.

Когда они попытаются открыть книгу, они получат следующее сообщение:

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

3. После получения идентификатора компьютера клиента откройте инструмент «Регистрационный ключ», нажав кнопку «RegKey Tool» в главном меню компилятора VBA. Когда форма инструмента «Регистрационный ключ» открыта, заполните поля формы следующими значениями:

— нажмите кнопку […] и выберите «ApproxPi_xls_32.dll» в папке «VbaCompiledFiles»

— введите клиентский имя, адрес электронной почты клиента и идентификатор компьютера, предоставленный вам вашим клиентом, как в следующем примере:

4. Теперь вы можете нажать кнопку «Создать RegKey», чтобы сгенерировать ключ регистрации/активации.

После того, как ключ будет успешно сгенерирован, вы получите следующее сообщение:

, и вы сможете найти сгенерированный регистрационный ключ, который был создан в папке «VbaCompiledFiles»

5. Вы отправляете файл регистрационного ключа вашему клиенту (в данном случае это будет файл регистрационного ключа «ApproxPi.rkey»). Как только ваш клиент получит файл регистрационного ключа, он должен поместить его в ту же папку, где находится их файл ApproxPi.xls (это очень важно, поскольку скомпилированная рабочая книга не запустится, если сгенерированный RegKey не находится в той же папке). Когда RegKey находится в правильном месте, скомпилированная книга запустится как обычно.

Когда вы создали регистрационный ключ для одного клиента, мы рекомендуем вам переместить этот файл RegKey в другую папку, например, с именем электронной почты вашего клиента. Мы рекомендуем это, потому что, когда вы создадите новый RegKey для другого клиента, текущий «ApproxPi. rkey» будет перезаписан вновь созданным файлом.

Разница между методами Select и Activate в VBA

Итог: Узнайте разницу между этими двумя широко используемыми методами в VBA.

Уровень навыка: Средний

Выбрать или активировать

Один вопрос, который я часто слышу от новых участников нашего курса VBA Pro: «В чем разница между «Выбрать» и «Активировать»? Похоже, они делают одно и то же?»

Краткий ответ заключается в том, что Выбрать и активировать могут выполнять одно и то же действие, но различия заключаются в следующем:

  • Выбрать можно использовать для одновременного выбора нескольких объектов (листов, диапазонов, фигур и т. д.). .
  • Активировать можно использовать для активации одного объекта в пределах выделения.

Давайте рассмотрим пример, чтобы понять, как это работает.

Какой метод следует использовать?

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

Вариант использования каждого метода зависит от сценария. И, как я объясню ниже, обычно лучше использовать ни . 😲

Когда использовать метод Select

Метод Select обычно наиболее знаком нам, поскольку средство записи макросов использует его при создании кода.

Выбор позволяет выбрать один объект ИЛИ несколько объектов.

Следующая строка кода VBA выбирает один рабочий лист .

   Рабочие листы("Лист2").Выбрать 

Мы также можем использовать Выбрать для выбора нескольких объектов. Вот пример выбора нескольких диапазонов.

 Диапазон("A1:B10,D1:F10,J1:K10").Выбрать 

Вот пример выбора нескольких листов. Функция Array используется для ссылки на листы. Эту же технику можно использовать для фигур.

   Рабочие листы(Массив("Лист2", "Лист3", "Лист5")). Выбрать
 

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

Что, если мы хотим оставить выбранными три листа, но вместо этого предоставить пользователю возможность просматривать Лист3? Здесь в игру вступает метод Activate.

Когда использовать метод Activate

Метод Activate позволяет выбрать один объект. Это может быть один объект в выделении, если уже выбрано несколько объектов.

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

 Рабочие листы(Массив("Лист2", "Лист3", "Лист5")).Выберите 

Рабочие листы("Лист3").Активировать

Если вы сделаете , а не , у вас будет выбрана группа объектов, то активация будет просто выбрать один объект. Он НЕ добавляется к текущему выбору и будет работать так же, как работает Select.

Будьте осторожны с Activate

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

Допустим, у вас есть строка кода в макросе для активации Sheet1.

Если пользователь выбрал Лист1-Лист3 до запуска макроса, все три листа останутся выбранными . Возможно, вам это не понадобится, если ваша следующая строка кода изменяет ячейку на Листе1. В зависимости от того, как написан код, все три листа могут быть изменены , что приведет к нежелательным результатам. 😬

Если вы активируете объект, который НЕ находится в выделении, то будет выбран этот единственный объект, а ранее выбранные объекты больше не будут выделяться. Например, если пользователь выбрал Лист1-Лист3, а ваш код активирует Лист4, то будет выбран только Лист4.

Главный вывод здесь заключается в том, что существует множество потенциальных нежелательных результатов при использовании Activate для выбора одного объекта. Итак, лучше всего использовать Select для выбора отдельных объектов .

Активировать для рабочих книг

Метод активации также используется при активации рабочих книг и Windows . Для этих объектов нет метода Select.

 ThisWorkbook.Активировать 

Workbooks("Book3.xlsx").Активировать

Windows("Book3.xlsx").Активировать

Избегайте выбора и активируйте, когда это возможно

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

Код средства записи макросов содержит много строк с методом Select, поскольку он генерирует код для каждого выполняемого нами действия. Однако нам НЕ нужно выбирать объект перед выполнением над ним действий . Это может замедлить наш код и сделать его более подверженным ошибкам.

Вот статья о том, как избежать метода выбора в VBA и почему это объясняет больше.

Заключение

Лучше всего использовать Выбрать, когда вы хотите выбрать один объект или несколько объектов. Активировать следует использовать, когда вы хотите активировать (просмотреть/выбрать) объект в пределах существующего выбора. Activate также используется для выбора рабочих книг, поскольку для этого объекта нет метода Select.

Я что-то пропустил? Пожалуйста, оставьте комментарий ниже с вопросами или предложениями. Спасибо! 🙂

Создание регистрационного ключа для защищенной книги Excel

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

 

При использовании программного инструмента XCell Compiler Registration Key можно получить следующие преимущества:

  • Аппаратная блокировка! Привяжите свое приложение Excel к конкретному компьютеру клиента без каких-либо аппаратных ключей.
  • Блокировать нелегальное копирование с одного компьютера на другой. Вы можете выбрать, на каком компьютере или компьютерах будет запускаться ваша защищенная книга.
  • Простая и эффективная процедура защиты, все уже сделано за вас!
  • Защитите свое приложение Excel от реконструирования и анализа другими пользователями.
  • Создайте ознакомительную (пробную) версию вашей защищенной книги! Вы можете легко создать пробную/демонстрационную версию своего приложения Excel с регулируемым пробным периодом и возможностью обновить книгу из пробного режима в полнофункциональную зарегистрированную, отправив файл ключа активации/регистрации своему клиенту по электронной почте. .
  • Гибкая лицензия. Вы сможете установить дату истечения срока действия лицензии.
  • Расширение лицензии. Вы можете легко продлить лицензию вашего клиента после истечения срока действия без необходимости перекомпилировать приложение.

 

Рассмотрим пример процесса аппаратной блокировки и использования инструмента регистрационного ключа.

 

1. Откройте книгу в Excel. В этом примере мы будем использовать книгу Sample.xls.

 

2. Скомпилируйте книгу с установленными флажками «Защита от копирования с регистрационным ключом» и «Аппаратная блокировка», как показано ниже.

 

Если вы нажмете кнопку Параметры , появится новое окно, как показано на рисунке ниже. После изменения этого поля скомпилированный exe попытается найти регистрационный ключ только с этим именем.
Если это поле будет пустым, то имя файла регистрационного ключа по умолчанию будет присвоено как имя исполняемого файла с расширением «.rkey».

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

Вы можете ввести как абсолютный путь, т. е. «C:\Program Files\DoneEx», как относительный путь, т.е. «..\какая-то папка» («..» — означает родительскую папку)
Относительный путь будет преобразован в полный путь относительно стартовой папки скомпилированного исполняемого файла.

Вы можете использовать шаблон в качестве пути к regkey. Этот шаблон будет заменен полным путем к папке «Мои документы».
Если вы хотите использовать подпапку «MySubFolderName» в папке «MyDocuments», вам необходимо ввести следующий путь: \MySubFolderName

 

Обратите внимание: выбран, то опция «Ограничить период использования приложения» недоступна. Ограничение по дате может быть установлено в процессе генерации regkey (см. ниже). После компиляции будет создан файл Sample.exe в целевой папке.

 

 

3. Когда вы или ваш клиент попытаетесь запустить файл Sample.exe без ключа регистрации (активации), появится сообщение «Регистрационный ключ не найден», как показано ниже.

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

4.   Щелкните пункт меню «Инструмент ключа регистрации» по следующему пути: Главное меню Excel «DoneEx >> XCell Compiler >> Инструмент ключа регистрации».

Откроется окно средства регистрации ключа.

5. Заполните поля следующим образом:

  • Поле «Путь к скомпилированному Exe». Просматривайте, пока не найдете файл Sample.exe, созданный на предыдущих шагах.
  • Поле «Имя приложения» заполняется автоматически из EXE-файла.
  • Введите имя клиента и адрес электронной почты клиента в соответствующие поля формы.
  • Теперь наиболее важной информацией является идентификатор компьютера. Скопируйте/введите идентификатор компьютера в поле «Идентификатор компьютера клиента».
  • Вы также можете установить ограничение по дате в регистрационном файле, установив флажок «Ограничить период использования приложения».
  • Когда вы нажимаете кнопку «Создать RegKey», инструмент Regkey создает «sample.rkey» (если вы используете свою книгу с другим именем, тогда имя regkey будет: <имя вашей книги>.rkey) в том же каталог, в котором находится ваш скомпилированный файл.
  • Вы можете отправить сгенерированный файл regkey своему клиенту, чтобы скомпилированный Sample.exe запускался только на его/ее компьютере.

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

 

См. также

Защита книг Excel от копирования

Бесплатный и действительный ключ продукта Microsoft Office 2013 в 2023 году

Microsoft Office 2013 предлагает все программы Office, которые вы найдете в пакете Microsoft Office 2010. Программа содержит Word, Excel, PowerPoint, Access и Outlook, и все они получают серьезные обновления с этой версией Office. Единственная более обновленная версия этих программ, которую можно найти, — это Microsoft Office 2016. Для активации Microsoft Office 2013 вам потребуется ключ активации Microsoft Office 2013, также известный как ключ продукта.

В большинстве случаев вы получаете этот ключ продукта Microsoft Office 2013 только при покупке пакета. Это единственный способ, с помощью которого Microsoft может убедиться, что вы используете подлинный продукт. Вы можете загрузить Microsoft Office 2013 и установить его на свой компьютер, но в какой-то момент вам потребуется ключ активации, прежде чем вы сможете использовать программы. В этой статье мы рассмотрим все, что вам нужно знать о ключе продукта Microsoft Office 2013.

1. Что делает Microsoft Office 2013 лучше

2. Зачем нужны ключи продукта MS Office 2013?

3. Системные требования для Microsoft Office 2013

4. Список ключей продуктов MS Office 2013

5. Где взять Microsoft Office 2013

6. Как активировать Microsoft Office 2013

Обзор

7. Серийный ключ Microsoft Office 2013

1. Что делает Microsoft Office 2013 лучше

MS Office 2013 намного лучше, чем любой из его предшественников, благодаря тому факту, что большинство программ Office в пакете получили серьезное обновление. Теперь пользоваться такими программами, как Word и Excel, намного проще, чем когда-либо прежде, а интерфейс стал намного удобнее и имеет больше функций. MS Office 2013 делает создание документов, совместное использование и управление ими еще проще, чем когда-либо в MS Office 2010.

2. Зачем нужны ключи продукта MS Office 2013?

Как мы упоминали ранее, ключ продукта MS Office требуется для активации набора инструментов в пакете. Хотя вы можете загрузить MS Office 2013 бесплатно, вы не сможете активировать и использовать его без ключа продукта. Таким образом Microsoft гарантирует, что вы используете подлинный продукт и что вы приобрели используемую программу.

3. Системные требования для Microsoft Office 2013

Существуют определенные системные требования, которым должен соответствовать ваш компьютер, прежде чем вы сможете запускать MS Office 2013 на своем компьютере. Но не беспокойтесь слишком сильно, так как большинство ПК часто соответствуют этим требованиям. Они включают следующее;

  • Процессор с частотой 1 ГГц, который может быть 32-разрядным или 64-разрядным.

  • 1 ГБ ОЗУ для 32-разрядных и 2 ГБ ОЗУ для 64-разрядных систем.

  • 3 ГБ дискового пространства.

  • Соотношение сторон 1024 x 576.

  • Видеокарта, совместимая с DirectX 9.

4. Список ключей продуктов MS Office 2013

Ниже приведены последние ключи MS Office, которые нам удалось найти. Эти ключи продуктов полностью функциональны, хотя они предоставляются в порядке живой очереди. Выберите один из них, чтобы активировать свой офис 2013;

Продукт Microsoft Office 2013

Ключ

Продукт Microsoft Office 2013

6KTFN-PQH9H-T8MMB-YG8K4-367TX

Продукт Microsoft Office 2013

B9GN2-DXXQC-9DHKT-GGWCR-4X6XK

Продукт Microsoft Office 2013

ДЖ484И-4НКБФ-В2ХМГ-ДБМДЖК-ПГВР7

Продукт Microsoft Office 2013

FCMXC-RDWMP-RFGVD-8TGPD-VQQ2X

Продукт Microsoft Office 2013

C2FG9-N6J68-H8BTJ-BW3QX-RM3B3

Продукт Microsoft Office 2013

MT7YN-TMV9C-7DDX9-64W77-B7R4D

Microsoft Office 2013 Продукт

6PMNJ-Q33T3-VJQFJ-23D3H-6XVTX

Продукт Microsoft Office 2013

PGD67-JN23K-JGVWW-KTHP4-GXR9G

Продукт Microsoft Office 2013

КБДНМ-Р8КД9-РК366-ВФМ3С-К7ГКСК

Продукт Microsoft Office 2013

4HNBK-863MH-6CR6P-GQ6WP-J42C9

Ключ продукта Microsoft Office 2013 Professional Plus

GHJFU-DFJKDI-DFJKD-GJKDI3-FDJKD

Microsoft Office 2013 Professional Plus Ключ продукта

2XKYR-THNHY-4M9D4-9YG2X-M96XV

Microsoft Office 2013 Professional Plus Ключ продукта

4TBVN-9C666-DJDIEJ-FM3HX-DFJEH

Ключ продукта Microsoft Office 2013 Professional Plus

MT7NR-6GWBK-QGHBV-2FJKI4-72V28

Microsoft Office 2013 Professional Plus Ключ продукта

2MNJP-QY9KX-DFHJ84-9VFJ2-CJ9KK

Microsoft Office 2013 Professional Plus Ключ продукта

Y89N6-KWWJX-YHFVP-DWMGK-XKR

Microsoft Office 2013 профессиональный плюс ключ продукта

6QD6N-J7FQ2-HBMW2-KFJ29-JW728

Общие ключи MS Office 2013 бесплатно:

Ключ

MS Office 2013 Professional Plus

ИК7ДК-Г2НП3-2ККК3-ДЖ6Х88-ГВГСТ

MS Office 2013 Стандарт

KBKQT-2NMXY-JJWGP-M62JB-92CD4

Проект 2013 Professional

ФН8ТТ-7ВМХ6-2Д4С9-М337Т-2342К

Проект 2013 Стандарт

6NTh4-CW976-3G3Y2-JK3TX-8QHTT

MS Visio 2013 Professional

C2FG9-N6J68-H8BTJ-BW3QX-RM3B3

Visio 2013 Стандартный

ДЖ484И-4НКБФ-В2ХМГ-ДБМДЖК-ПГВР7

MS Access 2013

NG2JY-h5JBT-HQXYP-78QH9-4JM2D

MS Excel 2013

ВГПНГ-Y7HQW-9RHP7-TKPV3-BG7GB

MS InfoPath 2013

DKT8B-N7VXH-D963P-Q4PHY-F8894

MS Lync 2013

2MG3G-3BNTT-3MFW9-KDQW3-TCK7R

MS OneNote 2013

ТГН6П-8ММБК-37П2Ф-СХХХК-П34ВВ

MS Outlook 2013

КПН8К-БДЖБТЖ-334К3-93ТГЙ-2ПМБТ

MS PowerPoint 2013

4NT99-8RJFH-Q2VDH-KYG2C-4RD4F

Издатель MS 2013

ПН2ВФ-29XG2-T9HJ7-JQPJR-FCXK4

MS Word 2013

6Q7VD-NX8JD-WJ2VH-88V73-4GBJ7

Серийный ключ MS Office 2013

  • 2XKYR-THNHY-4M9D4-9YG2X-M96XV
  • 366NX-BQ62X-PQT9G-GPX4H-VT7TX
  • ИК7ДК-Г2НП3-2ККК3-ДЖ6Х88-ГВГСТ
  • KDVQM-HMNFJ-P9PJX-96HDF-DJYGX

5.

Где взять Microsoft Office 2013

Как только Microsoft выпустила Office 2013, они также выпустили новые версии набора программ с обновленными и расширенными функциями. Одним из основных изменений, внесенных Microsoft, является то, как работает активация. Если вы хотите получить Office 2013, у вас также должна быть подписка на Office 365 для версий программного обеспечения Home и Professional (ранее Ultimate).

Эта новая форма подписки также предоставляет вам место в облачном хранилище объемом до 1 ТБ вместе со всеми программами, включенными в пакет Microsoft Office 2013. Пакет можно загрузить с веб-сайта офиса Microsoft, а последующие обновления программы также можно загрузить на веб-сайте.

Вы можете скачать Microsoft Office 2013 с веб-сайта бесплатно, хотя важно убедиться, что вы загружаете программу с официального веб-сайта Microsoft, поскольку файлы, загружаемые онлайн, могут представлять угрозу безопасности для вашего компьютера. Независимо от того, где вы получаете Microsoft Office 2013, вам все равно нужно будет предоставить подлинный ключ продукта для активации программы.

6. Как активировать Microsoft Office 2013

Активацию Microsoft Office 2013 можно легко выполнить через Интернет. Вот как;

Шаг 1: Откройте Microsoft Office 2013 и, когда появится мастер активации, нажмите «Я хочу активировать через Интернет (рекомендуется)».

Шаг 2: Введите ключ продукта Microsoft Office 2013 (вы можете выбрать один из приведенного выше списка) и нажмите «Продолжить».

Если у вас нет надежного подключения к Интернету, вы все равно сможете активировать Microsoft Office 2013 по телефону. Вот как:

Шаг 1: Установите Office 2013 и отключите компьютер от Интернета.

Шаг 2: Запустите программу и введите ключ продукта в мастере активации, когда это произойдет (опять же, вы можете выбрать любой из ключей продукта на этой странице).

Шаг 3: Выберите «Я хочу активировать программу по телефону».

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

Шаг 5: Введите идентификатор подтверждения в поле, предоставленное в мастере, и нажмите «Активировать», и ваш Microsoft Office 2013 будет активирован.

7. Обзор серийного ключа Microsoft Office 2013

Несмотря на то, что уже существует новая версия Microsoft Office, пакет MS Office 2013 по-прежнему остается весьма полезным, и многие люди предпочитают использовать его вместо обновления до пакета MS Office 2016. Это делает создание, редактирование и обмен документами простыми и профессиональными. Некоторые из функций, которыми вы можете наслаждаться после активации своей копии, включают следующее:

  • Вы можете просматривать, создавать и редактировать различные форматы файлов Microsoft Office.

  • Поддерживает использование PDF-файлов — удобная функция, устраняющая необходимость в отдельной программе для чтения PDF-файлов.

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

  • Стартовый экран для всех связанных приложений легко настраивается.

  • Теперь вы можете интегрировать MS Office с OneDrive и получить 1 ТБ бесплатного хранилища.

  • Microsoft Office 2013 позволяет легко синхронизировать документы на всех устройствах, предоставляя вам доступ к документу в любом месте на любом устройстве, тем самым способствуя подключению и удаленному доступу.

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

Заключение

Одним из наиболее важных факторов, которые следует помнить о Microsoft Office 2013, является его надежность. Он прост в использовании, что упрощает создание документов. Единственная проблема, с которой может столкнуться большинство пользователей MS Office 2013, — отсутствие ключей активации, которые можно найти в сети. Часто это означает, что, хотя вы сможете загрузить программу, вы, скорее всего, не сможете ее использовать. Вот почему мы попытались предоставить вам несколько ключей активации для Microsoft Office 2013, чтобы вы могли пользоваться всеми преимуществами, которые предлагает пакет.

Мастер активации MS Office | Доска сообщений MrExcel

моль999
Известный член
  • #2

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

 

Голосовать за
0

азизрасул
Известный член