Имя файла с переменной макрос excel

I know to run a macro in a module from vbscript it’s as simple as

objexcel.Application.Run "Filename!MacroName"

But, what if the file name is variable—but the directory only contains one file (which has already been opened)?

Could it be as simple as:

objexcel.Application.Run wkbk.path "Macroname"

Community's user avatar

asked Mar 4, 2015 at 14:49

Archaimot's user avatar

1

It works with

objexcel.run "MacroName"

qwerty_so's user avatar

qwerty_so

35.2k8 gold badges62 silver badges85 bronze badges

answered Mar 4, 2015 at 16:24

Archaimot's user avatar

Assuming wkbk is a workbook object, you can use:

objexcel.Application.Run "'" & wkbk.Name & "'!Macroname"

the single quotes are there in case the workbook name contains spaces. Note you don’t need the path since the workbook is open.

answered Mar 4, 2015 at 16:12

Rory's user avatar

RoryRory

32.4k5 gold badges31 silver badges34 bronze badges

 

Irbis_evs

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

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

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

Код
Dim sh 'As Worksheet, i&, lRow
Dim lSpisok, itable, dSpisok, prod, dd
book = ThisWorkbook.Name
' Настройка списка фильтров
Filt = ("XLS Files(*.xl*),*.xl*")
'Получение имени файла
FileName1 = Application.GetOpenFilename(FileFilter:=Filt)
' При отмене выйти иэ окна
If FileName1 = False Then
MsgBox "Файл не выбран."
End If
Set objCloseBook = GetObject(FileName1)
'objCloseBook.Close False


Windows("123.xlsm").Activate

Worksheets("Список").Select
ActiveSheet.Unprotect
' Отображение полного имени и пути
'MsgBox OpenWorkbook(GetObject(FileName1).Name)

Инженер не тот, кто все знает, а тот кто знает где найти ответ.

Открыть макросом файл с переменным именем

emkub

Дата: Воскресенье, 21.06.2015, 15:40 |
Сообщение № 1

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 171


Репутация:

0

±

Замечаний:
0% ±


Excel 2013

Здравствуйте.
Подскажите, возможно ли организовать запуск файла такого рода: C:пользователь21.06.1521.06.15.xlsx
где 21.06.15 — текущая дата. Т.е. файл находится в одноимённой папке.
Необходим ежедневный запуск «вчерашнего» файла.

 

Ответить

_Boroda_

Дата: Воскресенье, 21.06.2015, 15:48 |
Сообщение № 2

Группа: Модераторы

Ранг: Местный житель

Сообщений: 16618


Репутация:

6465

±

Замечаний:
0% ±


2003; 2007; 2010; 2013 RUS

Что-то типа вот этого
[vba]

Код

    d_ = Format(Date, «\DD.MM.YY»)
      Workbooks.Open Filename:=»C:пользователь» & d_ & d_ & «.xlsx»

[/vba]


Скажи мне, кудесник, любимец ба’гов…
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995

 

Ответить

KSV

Дата: Воскресенье, 21.06.2015, 16:03 |
Сообщение № 3

Группа: Друзья

Ранг: Ветеран

Сообщений: 770


Репутация:

255

±

Замечаний:
0% ±


Excel 2013

для вчерашнего
[vba]

Код

d_ = Format(Date — 1, «\DD.MM.YY»)

[/vba]


KSV.VBA@gmail.com
Яндекс.Деньги: 410011921213333

 

Ответить

emkub

Дата: Воскресенье, 21.06.2015, 16:07 |
Сообщение № 4

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 171


Репутация:

0

±

Замечаний:
0% ±


Excel 2013

СПАСИБО!
Работает.
но…
запускаемый файл имеет расширение «csv» и открывается без разделения ячеек (точнее сейчас они разделены как и положено — «;»). Запуская его же просто двойным кликом, он открывается как обычный «excel».
Попробовал выполнить эту же команду не через «Workbooks.Open Filename» а через «Shell».
Ошибка…
D_ = Format(Date, «DD.MM.YY»)
Y_ = Format(Date, «YYYY»)
M_ = Format(Date, «MM»)
Den_ = Format(Date, «DD»)

Shell («D:6_vbn1_Êèåâáàçû» & M_ & «» & Den_ & «» & D_ & «.csv»)
Кракозябры — это русские буквы.

 

Ответить

KSV

Дата: Воскресенье, 21.06.2015, 17:11 |
Сообщение № 5

Группа: Друзья

Ранг: Ветеран

Сообщений: 770


Репутация:

255

±

Замечаний:
0% ±


Excel 2013

если вам нужно просто открыть то можно так:
[vba]

Код

Shell Application.Path & «Excel.exe D:6_vbn1_Киевбазы» & Format$(Date — 1, «yyyy\mm\dd\dd.mm.yy») & «.csv»

[/vba]


KSV.VBA@gmail.com
Яндекс.Деньги: 410011921213333

 

Ответить

emkub

Дата: Воскресенье, 21.06.2015, 17:28 |
Сообщение № 6

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 171


Репутация:

0

±

Замечаний:
0% ±


Excel 2013

Спасибо.
Сейчас работает, как надо. Правда открывается неактивным.

 

Ответить

KSV

Дата: Воскресенье, 21.06.2015, 18:03 |
Сообщение № 7

Группа: Друзья

Ранг: Ветеран

Сообщений: 770


Репутация:

255

±

Замечаний:
0% ±


Excel 2013

[vba]

Код

Shell Application.Path & «Excel.exe D:6_vbn1_Киевбазы» & Format$(Date — 1, «yyyy\mm\dd\dd.mm.yy») & «.csv», vbNormalFocus

[/vba]
или лучше так:
[vba]

Код

Workbooks.OpenText «D:6_vbn1_Киевбазы» & Format$(Date — 1, «yyyy\mm\dd\dd.mm.yy») & «.csv», DataType:=xlDelimited, Semicolon:=True

[/vba]
(подробнее: Workbooks.OpenText Method (Excel))


KSV.VBA@gmail.com
Яндекс.Деньги: 410011921213333

Сообщение отредактировал KSVВоскресенье, 21.06.2015, 18:06

 

Ответить

emkub

Дата: Воскресенье, 21.06.2015, 18:33 |
Сообщение № 8

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 171


Репутация:

0

±

Замечаний:
0% ±


Excel 2013

Первый работает, второй нет.

 

Ответить

KSV

Дата: Воскресенье, 21.06.2015, 19:14 |
Сообщение № 9

Группа: Друзья

Ранг: Ветеран

Сообщений: 770


Репутация:

255

±

Замечаний:
0% ±


Excel 2013


что пишет?
выложите сюда ваш файл csv (оставьте в нем несколько строк, чтоб весил немного)


KSV.VBA@gmail.com
Яндекс.Деньги: 410011921213333

 

Ответить

wild_pig

Дата: Воскресенье, 21.06.2015, 20:35 |
Сообщение № 10

Группа: Проверенные

Ранг: Обитатель

Сообщений: 516


Репутация:

97

±

Замечаний:
0% ±


2003, 2013

[vba]

Код

Workbooks.OpenText «D:6_vbn1_Киевбазы» & Format$(Date — 1, «yyyy\mm\dd\dd.mm.yy») & «.csv», Local:=True

[/vba]

 

Ответить

emkub

Дата: Понедельник, 22.06.2015, 00:29 |
Сообщение № 11

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 171


Репутация:

0

±

Замечаний:
0% ±


Excel 2013

Раз пошла такая пьянка, опишу задачу полностью.
Есть файл ZZZ.xls с несколькими листами. На «листе 2» есть список телефонов. «Лист 1» пустой. Из этого файла макросом запускается файл XXX.csv (как описано выше) и из него нужно скопировать данные с «лист 1» и вставить их на «лист 1» файла ZZZ.
Далее макросом разбить текст по столбцам в столбце «А» и удалить дубликаты в столбце «Б». Потом, также макросом, удалить с «листа 1» номера, которые есть на «листе 2» — этот макрос уже есть :)
Как думаете, выполнимо?
Файлик *.scv прикрепляю.

 

Ответить

KSV

Дата: Понедельник, 22.06.2015, 02:08 |
Сообщение № 12

Группа: Друзья

Ранг: Ветеран

Сообщений: 770


Репутация:

255

±

Замечаний:
0% ±


Excel 2013


Это действительно полная задача? Или потом, все-таки, планируется руками копировать с «Лист 1» оставшиеся после всех манипуляций телефоны (отсутствующие в вашей Базе Данных, на «Лист 2»), затем вставлять в БД («Лист 2» или другой лист), а затем сортировать по номеру тел. или имени абонента?
Буквально, несколькими строками кода. :)
Например, «разбить текст по столбцам» можно сразу, при открытии XXX, а не после копирования на «Лист 1» (который, как я понял, вам нужен только для тех ручных действий, которые вы описали выше, а в реальности — не нужен вообще)
[vba]

Код

Workbooks.OpenText «D:6_vbn1_Киевбазы» & Format$(Date — 1, «yyyy\mm\dd\dd.mm.yy») & «.csv», DataType:=xlDelimited, Semicolon:=True, Local:=True

[/vba]
Поэтому, напишите конечную цель и файлик ZZZ приложите, чтобы видеть структуру хранения данных на «Лист 2», и «не городить огород» из лишнего кода.


KSV.VBA@gmail.com
Яндекс.Деньги: 410011921213333

 

Ответить

emkub

Дата: Понедельник, 22.06.2015, 16:10 |
Сообщение № 13

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 171


Репутация:

0

±

Замечаний:
0% ±


Excel 2013

Прикреплены оба файла.
Необходимо в файле 21.06.15_.csv разделить номера телефонов по столбцам (по символу «#») и удалить дубликаты в столбце «N». — эти задачи сейчас выполняются стандартными функциями.
Конечная цель — удалить из 21.06.15_.csv все строки с телефонами, которые есть в Тест.xls (сравнение только по одному столбцу).
В файле Тест.xls уже есть макрос удаления строк.

 

Ответить

Manyasha

Дата: Понедельник, 22.06.2015, 16:59 |
Сообщение № 14

Группа: Модераторы

Ранг: Старожил

Сообщений: 2198


Репутация:

898

±

Замечаний:
0% ±


Excel 2010, 2016

emkub, я не поняла: начальная задача «открыть файл с переменным именем» решена?
Если нет, то напишите в каком макросе из Ваших должно происходить открытия файла, и что именно не нравится в предложенных Вам способах.
Если да, то для остальных задач создавайте другие темы.


ЯД: 410013299366744 WM: R193491431804

 

Ответить

emkub

Дата: Понедельник, 22.06.2015, 17:03 |
Сообщение № 15

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 171


Репутация:

0

±

Замечаний:
0% ±


Excel 2013

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

 

Ответить

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

Содержание

  1. Исходные данные
  2. Сохранение файла Excel с названием из ячейки — с привязкой к этой ячейке
  3. Добавление кнопки в Excel для запуска макроса
  4. Сохранение файла Excel с названием из ячейки — без привязки к ячейке
  5. Сохранение файла Excel с названием, которое сформировано из значений двух ячеек

Исходные данные

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

Примечание! Я использую Excel 2013.

Скриншот 2

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

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

Заметка! Этапы разработки программы – как создаются и проектируются программы?

Итак, данные у нас есть, теперь необходимо написать процедуру на VBA (макрос), которая брала бы значение из конкретной ячейки, в данном случае это будет ячейка B14, и присваивала бы это значение имени файла.

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

Если нужно сохранять макрос в каждом файле, т.е. файлы с поддержкой макросов (расширение .xlsm), то необходимо просто указать другой тип файла при сохранении, а именно xlOpenXMLWorkbookMacroEnabled, в процедурах в комментариях я это указываю.

Открываем в Excel редактор Visual Basic, и вставляем код следующей процедуры в исходный код этой книги (ЭтаКнига, открыть двойным кликом) или в модуль, который Вы предварительно должны создать.

Примечание! Для того чтобы открыть редактор Visual Basic в Excel, необходимо перейти на вкладку «Разработчик» и нажать на кнопку «Visual Basic». Файл Excel с кодом процедуры необходимо сохранить с типом «Книга Excel с поддержкой макросов».

Код процедуры

   
   Sub SaveFile()

   'Объявление переменных
   Dim CellValue As String
   Dim Path As String
   Dim FinalFileName As String

   'Временно отключаем показ вспомогательных сообщений
   Application.DisplayAlerts = False

   'Задаём каталог сохранения файла (в данном случае текущий каталог)
   Path = ThisWorkbook.Path & ""

   'Получаем значение ячейки
   CellValue = Range("B14")

   'Формируем итоговый путь и название файла
   FinalFileName = Path & CellValue

   'Сохраняем файл
   ActiveWorkbook.SaveAs FileName:=FinalFileName, _
                      FileFormat:=xlOpenXMLWorkbook
                      'FileFormat:=xlOpenXMLWorkbookMacroEnabled 'Для сохранения файла с макросом

   'Включаем вывод сообщений
   Application.DisplayAlerts = True

   'Сообщение с результатом выполнения процедуры
   MsgBox "Файл успешно сохранен с названием - " & CellValue, vbInformation, "Результат"

  End Sub

После сохранения файла запустите макрос («Макросы -> Выполнить -> SaveFile»).

В результате в моем случае процедура успешно выполнилась, файл сохранился с названием «Марка Авто 1», данное значение взято из ячейки B14, о чем будет свидетельствовать сообщение в конце процедуры. Файл сохранен в каталоге, где и исходный файл (во всех примерах ниже прописано то же самое, т.е. сохранение рядом с исходником, но это Вы можете изменить).

Скриншот 3

Заметка! Статический анализ кода в теории и на практике.

Добавление кнопки в Excel для запуска макроса

Каждый раз открывать окно с макросами и выбирать нужный макрос не очень удобно, поэтому можно легко добавить кнопку где-нибудь рядом с данными и просто нажимать ее. Это делается следующим образом «Вкладка Разработчик -> Вставить -> Кнопка (элемент управления формы)».

Скриншот 4

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

Скриншот 5

Курс по SQL для начинающих

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

Скриншот 6

Заметка! ТОП 7 популярных языков программирования.

Сохранение файла Excel с названием из ячейки — без привязки к ячейке

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

Замените код процедуры следующим кодом, который совсем немного, но изменен.

  
   Sub SaveFile()

  'Объявление переменных
   Dim CellValue As String
   Dim Path As String
   Dim FinalFileName As String

   'Временно отключаем показ вспомогательных сообщений
   Application.DisplayAlerts = False

   'Задаём каталог сохранения файла (в данном случае текущий каталог)
   Path = ThisWorkbook.Path & ""

   'Проверка значения ячейки
   If ActiveCell.Value = "" Then
     MsgBox "В ячейке отсутствует значение", vbCritical, "Ошибка!"
     Exit Sub
   End If

   'Получаем значение активной ячейки
   CellValue = ActiveCell.Value

   'Формируем итоговый путь и название файла
   FinalFileName = Path & CellValue

   'Сохраняем файл
   ActiveWorkbook.SaveAs FileName:=FinalFileName, _
                      FileFormat:=xlOpenXMLWorkbook
                      'FileFormat:=xlOpenXMLWorkbookMacroEnabled 'Для сохранения файла с макросом

   'Включаем вывод сообщений
   Application.DisplayAlerts = True

   MsgBox "Файл успешно сохранен с названием - " & CellValue, vbInformation, "Результат"

   End Sub

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

Скриншот 7

Как видим, все отработало.

Сохранение файла Excel с названием, которое сформировано из значений двух ячеек

Теперь представим, что нам нужно сформировать файл с названием из значений двух ячеек. Например, в нашем случае это может быть «Марка Авто – VIN Номер», в качестве разделителя я указал символ – (дефис), но им может выступать любой символ или вовсе отсутствовать.

В этом примере я покажу, как можно это реализовать с привязкой к конкретным ячейкам, в нашем случае B14 и D14.

Код процедуры в данном случае будет выглядеть следующим образом.

   
   Sub SaveFile()

   'Объявление переменных
   Dim CellValue As String
   Dim Path As String
   Dim FinalFileName As String

   'Временно отключаем показ вспомогательных сообщений
   Application.DisplayAlerts = False

   'Задаём каталог сохранения файла (в данном случае текущий каталог)
   Path = ThisWorkbook.Path & ""

   'Проверка значения ячеек B14 и D14
   If Range("B14").Value = "" Or Range("D14").Value = "" Then
     MsgBox "В ячейке отсутствует значение", vbCritical, "Ошибка!"
     Exit Sub
   End If

   'Складываем значения из двух ячеек B14 и D14
   CellValue = Range("B14").Value & " - " & Range("D14").Value

   'Формируем итоговый путь и название файла
   FinalFileName = Path & CellValue

   'Сохраняем файл
   ActiveWorkbook.SaveAs FileName:=FinalFileName, _
                      FileFormat:=xlOpenXMLWorkbook
                      'FileFormat:=xlOpenXMLWorkbookMacroEnabled 'Для сохранения файла с макросом

   'Включаем вывод сообщений
   Application.DisplayAlerts = True

   MsgBox "Файл успешно сохранен с названием - " & CellValue, vbInformation, "Результат"

   End Sub

Запускаем макрос.

Скриншот 8

Все ОК, файл создан.

Заметка! Как измерить сложность кода программы при программировании?

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

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

Код процедуры

   
   Sub SaveFile()

   'Объявление переменных
   Dim CellValue As String
   Dim Path As String
   Dim FinalFileName As String

   'Временно отключаем показ вспомогательных сообщений
   Application.DisplayAlerts = False

   'Задаём каталог сохранения файла (в данном случае текущий каталог)
   Path = ThisWorkbook.Path & ""

   'Проверка номера столбца
   If ActiveCell.Column <> 2 Then
     MsgBox "Указан некорректный столбец", vbCritical, "Ошибка!"
     Exit Sub
   End If

  'Проверка значения ячейки
   If ActiveCell.Value = "" Then
     MsgBox "В ячейке отсутствует значение", vbCritical, "Ошибка!"
     Exit Sub
   End If

   'Получаем значение активной ячейки
   CellValue = ActiveCell.Value

   'Смещаемся на 2 столбца, относительно активной ячейки
   ActiveCell.Offset(0, 2).Select

   'Складываем значения из двух ячеек
   CellValue = CellValue & " - " & ActiveCell.Value

   'Формируем итоговый путь и название файла
   FinalFileName = Path & CellValue

   'Сохраняем файл
   ActiveWorkbook.SaveAs FileName:=FinalFileName, _
                      FileFormat:=xlOpenXMLWorkbook
                      'FileFormat:=xlOpenXMLWorkbookMacroEnabled 'Для сохранения файла с макросом

   'Включаем вывод сообщений
   Application.DisplayAlerts = True

   MsgBox "Файл успешно сохранен с названием - " & CellValue, vbInformation, "Результат"

   End Sub

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

Заметка! Опрос. Какой операционной системой Вы пользуетесь?

У меня на этом все, надеюсь, материал был Вам полезен, пока!

5 / 5 / 2

Регистрация: 21.07.2013

Сообщений: 362

1

Присвоение переменной имени книги и листа

17.11.2013, 19:04. Показов 52469. Ответов 34


Студворк — интернет-сервис помощи студентам

Есть файл (Расчет.xls). В нем 3 листа(Лист1, Лист2, Лист3). Как при открытии файла присвоить переменной (F) имя файла и имя нужного листа для использования в range(F.cells(….))



0



Alex77755

11482 / 3773 / 677

Регистрация: 13.02.2009

Сообщений: 11,145

17.11.2013, 19:09

2

вариантов несколько. Некоторые из них?

Visual Basic
1
2
3
4
Dim F As Worksheet
Set F = Worksheets("Отчёт") '
Set F = Worksheets(1) '
Set F = Лист1 '



0



ali_vlad

5 / 5 / 2

Регистрация: 21.07.2013

Сообщений: 362

17.11.2013, 19:11

 [ТС]

3

Цитата
Сообщение от Alex77755
Посмотреть сообщение

вариантов несколько. Некоторые из них?

Visual Basic
1
2
3
4
Dim F As Worksheet
Set F = Worksheets("Отчёт") '
Set F = Worksheets(1) '
Set F = Лист1 '

Мне надо F=Файл(«Расчет»)+Worksheets(«Лист1»)’ так можно?
На случай если открыты несколько файлов



0



Hugo121

6875 / 2807 / 533

Регистрация: 19.10.2012

Сообщений: 8,562

17.11.2013, 19:17

4

Так нельзя.
Так можно:

Visual Basic
1
set F=activeworkbook.Worksheets("Лист1")



1



ali_vlad

5 / 5 / 2

Регистрация: 21.07.2013

Сообщений: 362

17.11.2013, 19:23

 [ТС]

5

Цитата
Сообщение от Hugo121
Посмотреть сообщение

Так нельзя.
Так можно:

Visual Basic
1
set F=activeworkbook.Worksheets("Лист1")

А VBA не перепутает книги, например если открыто 2 файла и в каждом есть свой код на VBA

Добавлено через 4 минуты
Я хочу при открытии Расчет.xls через код присвоить переменной F=имя_файла+имя_листа



0



Hugo121

6875 / 2807 / 533

Регистрация: 19.10.2012

Сообщений: 8,562

17.11.2013, 19:23

6

Вопрос был «Как при открытии файла присвоить переменной» — так что смотрите сами не перепутайте
А вообще обычно делают так — при открытии присваивают переменной открываемую книгу. И в общем этой одной переменной далее можно и обойтись.
Но чтоб сократить код — можно например лист тоже загнать в переменную:

Visual Basic
1
2
Set wb = Workbooks.Open(filename, False, True)
set sh=wb.sheets("очень длинное название из 32 символов")



1



5 / 5 / 2

Регистрация: 21.07.2013

Сообщений: 362

17.11.2013, 19:59

 [ТС]

7

Цитата
Сообщение от Hugo121
Посмотреть сообщение

Set wb = Workbooks.Open(filename, False, True)

По моему это не совсем то, что я хотел. Я хотел, чтобы при открытии книги переменной присваивалось имя этой же книги: wb=имя_книги.xls

Добавлено через 18 минут
Сам разобрался
Set wb = Application.ActiveWorkbook



0



Hugo121

6875 / 2807 / 533

Регистрация: 19.10.2012

Сообщений: 8,562

17.11.2013, 20:16

8

Ещё за час до того, как Вы разобрались, было написано:

Visual Basic
1
set F=activeworkbook.Worksheets("Лист1")



0



5 / 5 / 2

Регистрация: 21.07.2013

Сообщений: 362

17.11.2013, 20:22

 [ТС]

9

В Вашем примере указывается непосредственно «Лист1». Я же хотел, чтобы VBA сам получал имя файла и имя листа и присваивал это переменной. Set F = Application.ActiveWorkbook.Sheets(1)



0



6875 / 2807 / 533

Регистрация: 19.10.2012

Сообщений: 8,562

17.11.2013, 20:34

10

В чём принципиальная разница? Лист могут переименовать? Так могут же и передвинуть!



0



5 / 5 / 2

Регистрация: 21.07.2013

Сообщений: 362

17.11.2013, 20:45

 [ТС]

11

Цитата
Сообщение от Hugo121
Посмотреть сообщение

В чём принципиальная разница? Лист могут переименовать? Так могут же и передвинуть!

В таком случае можно ли при загрузке книги запретить переименование и перемещение листов?



0



6875 / 2807 / 533

Регистрация: 19.10.2012

Сообщений: 8,562

17.11.2013, 20:50

12

При загрузке? Вы им запретите это делать до сохранения!
Ну раз там такие тупые сотрудники, что просто сказать — не работает, то используйте кодовое имя листа — такой пример тоже выше уже упоминался.
Только вот я бы не использовал Лист1 — это имя у меня на работе например превратится в Sheets1. Я бы дал листу своё имя, т.е. изменил родное на другое.



0



5 / 5 / 2

Регистрация: 21.07.2013

Сообщений: 362

17.11.2013, 21:02

 [ТС]

13

Цитата
Сообщение от Hugo121
Посмотреть сообщение

При загрузке? Вы им запретите это делать до сохранения!
Ну раз там такие тупые сотрудники, что просто сказать — не работает, то используйте кодовое имя листа — такой пример тоже выше уже упоминался.
Только вот я бы не использовал Лист1 — это имя у меня на работе например превратится в Sheets1. Я бы дал листу своё имя, т.е. изменил родное на другое.

В моей книге идет «онлайн» расчет, При работе на 1м листе идет выборка данных со 2-го и наоборот. Если в процессе работы переименовать или переместить листы, то это вызовет «kernel panic» . Вот бы запретить переименование и перемещение сразу после открытия. Как бы «защита от дурака». А как они называются — это не важно. Да и еще как запретить открывать другие книги при открытой этой?



0



6875 / 2807 / 533

Регистрация: 19.10.2012

Сообщений: 8,562

17.11.2013, 21:11

14

Линейкой по пальцам. Думаю самое простое и надёжное
Вот это «сразу после открытия» как понимать? «Сразу» это сколько?
Вообще запретить можно защитой книги.
Запретить открывать другие думаю можно макросом — при открытии книг проверять — если открыта «эта», то новые закрывать. Но Ведь они могут быть открыты уже ранее…
В общем, я бы решал всё комплексно и как-то иначе что-ли… Увеличил например зарплату и уровень сотрудников

P.S. Вообще правильно написанному макросу другие книги не помеха.



0



5 / 5 / 2

Регистрация: 21.07.2013

Сообщений: 362

17.11.2013, 21:19

 [ТС]

15

Сразу это Workbook_Open()
Мне до ПРАВИЛЬНОГО — как до Марса пешком



0



6875 / 2807 / 533

Регистрация: 19.10.2012

Сообщений: 8,562

17.11.2013, 21:22

16

Ну просто старайтесь нигде не использовать selection и activate — и уже будет намного надёжнее. И быстрее.
И вот эти объектные переменные — тоже хорошо.



0



5 / 5 / 2

Регистрация: 21.07.2013

Сообщений: 362

17.11.2013, 21:25

 [ТС]

17

Как это правильно оформить
If IsNumeric(ячейка_в_которую_вводится_значение.Value ) = False Then ячейка_в_которую_вводится_значение.Value = 0



0



Hugo121

6875 / 2807 / 533

Регистрация: 19.10.2012

Сообщений: 8,562

17.11.2013, 21:29

18

Visual Basic
1
If not IsNumeric(ячейка_в_которую_вводится_значение.Value) Then ячейка_в_которую_вводится_значение.Value = 0

Хотя и Ваш вариант рабочий, но я обычно пишу Not.



0



ali_vlad

5 / 5 / 2

Регистрация: 21.07.2013

Сообщений: 362

17.11.2013, 21:38

 [ТС]

19

Цитата
Сообщение от Hugo121
Посмотреть сообщение

Visual Basic
1
If not IsNumeric(ячейка_в_которую_вводится_значение.Value) Then ячейка_в_которую_вводится_значение.Value = 0

Хотя и Ваш вариант рабочий, но я обычно пишу Not.

Так на что заменить (ячейка_в_которую_вводится_значение)



0



Hugo121

6875 / 2807 / 533

Регистрация: 19.10.2012

Сообщений: 8,562

17.11.2013, 21:43

20

Я например так сделал:

Visual Basic
1
Set ячейка_в_которую_вводится_значение = [a1]

Хотя конечно сомнительно, что тут нужна переменная, но бывает что и нужна…



0



Понравилась статья? Поделить с друзьями:
  • Инвентаризационная опись основных средств бланк скачать excel
  • Имя файла рисунка в word
  • Инвентаризационная опись нематериальных активов бланк скачать word
  • Имя файла книги excel
  • Инвентаризационная опись инв 1 бланк скачать word