Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Глобальные переменные (Модификаторы доступа)
 
Добрый вечер.
У меня есть процедуры для открытия книг по пути

Option Explicit
Dim iPath As String

Private Sub SELECT_DIR_NSI()
   iPath = ActiveWorkbook.Path & "\REQ_NSI"
   Set Wb = Workbooks.Open(Filename:=iPath)
End Sub

Sub SELECT_DIR_PRICE()
   iPath = ActiveWorkbook.Path & "\DIR_PRICE"
   Set Wb = Workbooks.Open(Filename:=iPath)
End Sub

Sub SELECT_DIR_ADDRESS()
   iPath = ActiveWorkbook.Path & "\DIR_ADDRESS"
   Set Wb = Workbooks.Open(Filename:=iPath)
End Sub

1. Можно ли как-нибудь вынести объектную переменную отдельно для оптимизации кода?
2. Как сделать iPath = ActiveWorkbook.Path доступную для использования во всех открытых книгах?

Я немного разбираюсь в JAVA и там это решается модификаторами доступа, а в VBA не понимаю как это предусмотрено.
Автоинкремент
 
Добрый день.
Подскажите как исправить дебаг.
Я использую классический макрос для автоинкремента.
При активации ячейки в колонке 2, происходит проверка на пусто и если ячейка слева пустая,
то ищем максимальное значение, далее к нему делаем +1.
Проблема возникает если в колонке 2, я протягиваю несколько значений.
Дебажит.

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

<Private Sub Worksheet_Change(ByVal Target As Range)

   If Target.Column = 2 Then
       If Target.Offset(0, -1).Value = "" Then
           Target.Offset(0, -1).Value = Application.WorksheetFunction.Max(Columns("A")) + 1
       End If
   End If
   
End Sub>
Изменено: Andreybukh - 17.09.2023 17:21:19
Конструктор объектов, Создать объект в классе
 
Добрый вечер. У меня есть простенькая объектная модель на JAVA. Суть ее в том что бы через конструктор присваивать параметры объектам.
Как на VBA реализовать такой же аналог? По каким ключевым словам искать на форуме аналогичные решения?

public class ПАРАМЕТРЫ
{    String Вид_линовки; String Вид_товара; String Вид_фиксирующего_элемента; float Длина; String Количество_листов;
   String Материал_обложки; int Плотность_бумаги = 180;
}

    class Канцтовары {public static void main(String[] args) {

       ПАРАМЕТРЫ Блокнот = new ПАРАМЕТРЫ(); - // Конструктор для нового объекта (Блокнот) типа данных Параметры использует;
Блокнот.Вид_линовки = "Без линовки, Клетка, Линейка";
       Блокнот.Вид_товара = "Блокнот";
       Блокнот.Длина = 210;

       ПАРАМЕТРЫ Тетрадь = new ПАРАМЕТРЫ(); - // Конструктор для нового объекта (Тетрадь) типа данных Параметры
       Тетрадь.Вид_линовки = "Без линовки, Клетка, Линейка, Для свободной записи";
       Тетрадь.Вид_товара = "Тетрадь";
       Тетрадь.Количество_листов = ">=10, >=20, >=30";

       System.out.println(Блокнот.Вид_линовки);
       System.out.println(Тетрадь.Вид_линовки);
       System.out.println(Блокнот.Плотность_бумаги);
   }
}
Использование Target.Column
 
Добрый день.
В инете нашел макрос который при наступлении события проставляет дату этого события в соседнюю ячейку.

<For Each cell In Target                                    
   If Target.Column = 17 Then
         With cell.Offset(0, 1)                    
            .Value = Now
            .EntireColumn.AutoFit                            
          End With
  End If
Next cell>

мне необходимо вместо колонки 17, подставить название столбца умной таблицы.
попытался так, но ничего не работает
<a = Sheets("SH_DIR_CATALOG").ListObjects("DIR_CATALOG").ListColumns("PRICE").Range.Value
If Target.Column = a Then>
как такие вещи правильно писать?
Изменено: Andreybukh - 29.10.2022 23:40:55
Удаление множества листов макросом
 
Добрый день.
У меня в книге реализовано удаление листов по (CODENAME)
Код
Application.DisplayAlerts = False
  Sheet02.Delete
  Sheet04.Delete
  Sheet05.Delete
Application.DisplayAlerts = True

1. Если лист по какой то причине не находится в книге или изменен Codename, то марос останавливается. Как это избежать?
2. Можно упростить код что бы не писать для каждого листа .Delete? Например все листы загнать в переменную и один раз прописать для нее удаление.

Заранее спасибо!
Изменено: vikttur - 18.08.2021 23:05:07
Номер для каждого уникального значения
 
Добрый день.
Подскажите как пронумеровать каждое уникальное значение в таблице?
Перенос данных из одного листа в другой с последующим объединением, Перенос и копирование
 
Добрый день.
Подскажите решение для переноса данных из одного листа на другой в объединенные ячейки.
Файл с данными во вложении.
Необходимо что бы данные из листа ("ЛИСТ1") попали на лист ("ЛИСТ2").
При этом
часть данных из ("ЛИСТ1") (выделил желтым) попала в ("ЛИСТ2) в диапазон (выделил желтым)
часть данных из ("ЛИСТ1") (выделил синим) попала в ("ЛИСТ2) в объединенную ячейку (выделил синим)
часть данных из ("ЛИСТ1") (выделил розовым) попала в ("ЛИСТ2) в объединенную ячейку (выделил розовым)

так же перенос должен быть ограничен данными на ("лист1")
Страницы: 1
Наверх