Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Excel.ActiveWorkbook.Save в режиме редактирования/записи - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Excel.ActiveWorkbook.Save в режиме редактирования/записи (Макросы/Sub)
Excel.ActiveWorkbook.Save в режиме редактирования/записи
managerauto Дата: Четверг, 08.12.2016, 18:28 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 15
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
[vba]
Код
Private Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long

Sub test()
Dim scomp As String
scomp = Space(255)
h = GetComputerName(scomp, 255)
Range("A1").Value = Trim(scomp)
Excel.ActiveWorkbook.Save
End Sub
[/vba]

Как сделать, что бы при открытии книги в режиме записи/редактирования запускалось автоматом, а в режиме чтения нет?


Сообщение отредактировал managerauto - Четверг, 08.12.2016, 19:30
 
Ответить
Сообщение[vba]
Код
Private Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long

Sub test()
Dim scomp As String
scomp = Space(255)
h = GetComputerName(scomp, 255)
Range("A1").Value = Trim(scomp)
Excel.ActiveWorkbook.Save
End Sub
[/vba]

Как сделать, что бы при открытии книги в режиме записи/редактирования запускалось автоматом, а в режиме чтения нет?

Автор - managerauto
Дата добавления - 08.12.2016 в 18:28
Pelena Дата: Четверг, 08.12.2016, 18:33 | Сообщение № 2
Группа: Админы
Ранг: Местный житель
Сообщений: 19146
Репутация: 4410 ±
Замечаний: ±

Excel 365 & Mac Excel
managerauto, оформите код тегами (кнопка #), иначе второе замечание повлечет бан


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
Сообщениеmanagerauto, оформите код тегами (кнопка #), иначе второе замечание повлечет бан

Автор - Pelena
Дата добавления - 08.12.2016 в 18:33
Alex_ST Дата: Четверг, 08.12.2016, 21:50 | Сообщение № 3
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3197
Репутация: 606 ±
Замечаний: 0% ±

2003
На счёт того, как определить режим открытия файла (Read Only/Read-Write), я помню, что это как-то не сложно, но что-то не нашёл пока в своей копилке.
А вот использование WinAPI для получения сетевого имени компа - это уже явный перебор.
Проще всего его можно получить из переменных окружения, чтение которых производит функция Environ [vba]
Код
Function ThisComputerName$(): ThisComputerName$ = Split(Environ(6), "=")(1): End Function
[/vba]Под спойлером примеры чтения переменных среды и ещё несколько простых способов получения имени компьютера



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
СообщениеНа счёт того, как определить режим открытия файла (Read Only/Read-Write), я помню, что это как-то не сложно, но что-то не нашёл пока в своей копилке.
А вот использование WinAPI для получения сетевого имени компа - это уже явный перебор.
Проще всего его можно получить из переменных окружения, чтение которых производит функция Environ [vba]
Код
Function ThisComputerName$(): ThisComputerName$ = Split(Environ(6), "=")(1): End Function
[/vba]Под спойлером примеры чтения переменных среды и ещё несколько простых способов получения имени компьютера

Автор - Alex_ST
Дата добавления - 08.12.2016 в 21:50
krosav4ig Дата: Четверг, 08.12.2016, 22:26 | Сообщение № 4
Группа: Друзья
Ранг: Старожил
Сообщений: 2346
Репутация: 989 ±
Замечаний: 0% ±

Excel 2007,2010,2013
первой строкой пишем[vba]
Код
If GetAttr(ThisWorkbook.FullName) And 1 Then Exit Sub
[/vba]


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

Сообщение отредактировал krosav4ig - Четверг, 08.12.2016, 22:27
 
Ответить
Сообщениепервой строкой пишем[vba]
Код
If GetAttr(ThisWorkbook.FullName) And 1 Then Exit Sub
[/vba]

Автор - krosav4ig
Дата добавления - 08.12.2016 в 22:26
managerauto Дата: Суббота, 10.12.2016, 17:47 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 15
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
первой строкой пишем
[vba]
Код
If GetAttr(ThisWorkbook.FullName) And 1 Then Exit Sub
[/vba]

что то не работает, при открытии в чтении всё равно обращается к Excel.ActiveWorkbook.Save.

Может я как то криво вопрос задал, есть файл.xls который лежит в локальной сети, при открытии кем либо этого файла в режиме записи Например USER1, срабатывает автоматический запуск:
[vba]
Код
Private Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long

Sub test()
Dim scomp As String
scomp = Space(255)
h = GetComputerName(scomp, 255)
Range("C2").Value = Trim(scomp)
Excel.ActiveWorkbook.Save
End Sub
[/vba]
То-есть записывает имя пользователя компьютера в ячейку ("C2") и сохраняет файл.

Надо что бы при открытии другим пользователем, уже в режиме чтения, например USER2 не происходило автоматическое срабатывание:
[vba]
Код
Private Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long

Sub test()
Dim scomp As String
scomp = Space(255)
h = GetComputerName(scomp, 255)
Range("C2").Value = Trim(scomp)
Excel.ActiveWorkbook.Save
End Sub
[/vba]

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


Сообщение отредактировал managerauto - Суббота, 10.12.2016, 18:03
 
Ответить
Сообщение
первой строкой пишем
[vba]
Код
If GetAttr(ThisWorkbook.FullName) And 1 Then Exit Sub
[/vba]

что то не работает, при открытии в чтении всё равно обращается к Excel.ActiveWorkbook.Save.

Может я как то криво вопрос задал, есть файл.xls который лежит в локальной сети, при открытии кем либо этого файла в режиме записи Например USER1, срабатывает автоматический запуск:
[vba]
Код
Private Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long

Sub test()
Dim scomp As String
scomp = Space(255)
h = GetComputerName(scomp, 255)
Range("C2").Value = Trim(scomp)
Excel.ActiveWorkbook.Save
End Sub
[/vba]
То-есть записывает имя пользователя компьютера в ячейку ("C2") и сохраняет файл.

Надо что бы при открытии другим пользователем, уже в режиме чтения, например USER2 не происходило автоматическое срабатывание:
[vba]
Код
Private Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long

Sub test()
Dim scomp As String
scomp = Space(255)
h = GetComputerName(scomp, 255)
Range("C2").Value = Trim(scomp)
Excel.ActiveWorkbook.Save
End Sub
[/vba]

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

Автор - managerauto
Дата добавления - 10.12.2016 в 17:47
managerauto Дата: Четверг, 15.12.2016, 16:30 | Сообщение № 6
Группа: Пользователи
Ранг: Новичок
Сообщений: 15
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Вопрос решен:
[vba]
Код
Private Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long

Private Sub Workbook_Open()
If ActiveWorkbook.ReadOnly Then Exit Sub
Dim scomp As String
scomp = Space(255)
h = GetComputerName(scomp, 255)
Range("C2").Value = Trim(scomp)
Excel.ActiveWorkbook.Save
End Sub
[/vba]

User1 открывает книгу в режиме записи, в ячейку (например ("C2") записывается имя компьютера и сохраняется, User2 открывает в режиме чтения, видит имя компьютера у кого открыт файл в режиме записи.
Может кому нибудь пригодится.


Сообщение отредактировал managerauto - Четверг, 15.12.2016, 16:42
 
Ответить
СообщениеВопрос решен:
[vba]
Код
Private Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long

Private Sub Workbook_Open()
If ActiveWorkbook.ReadOnly Then Exit Sub
Dim scomp As String
scomp = Space(255)
h = GetComputerName(scomp, 255)
Range("C2").Value = Trim(scomp)
Excel.ActiveWorkbook.Save
End Sub
[/vba]

User1 открывает книгу в режиме записи, в ячейку (например ("C2") записывается имя компьютера и сохраняется, User2 открывает в режиме чтения, видит имя компьютера у кого открыт файл в режиме записи.
Может кому нибудь пригодится.

Автор - managerauto
Дата добавления - 15.12.2016 в 16:30
Alex_ST Дата: Четверг, 15.12.2016, 20:27 | Сообщение № 7
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3197
Репутация: 606 ±
Замечаний: 0% ±

2003
Может кому нибудь пригодится.
Это всё, конечно, здорово, но только при одном листе в книге. Потому что только в таком случае один и тот же лист всегда будет при открытии ActiveSheet, на который без указания имени листа можно записать данные из процедуры Workbook_Open, размещённой в модуле ЭтаКнига :)
Ну и, конечно, если Вы предпочитаете использовать WinAPI для того, чтобы узнать имя компьютера, то никто запретить это не может. Каждый извращается так, как он хочет



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
Сообщение
Может кому нибудь пригодится.
Это всё, конечно, здорово, но только при одном листе в книге. Потому что только в таком случае один и тот же лист всегда будет при открытии ActiveSheet, на который без указания имени листа можно записать данные из процедуры Workbook_Open, размещённой в модуле ЭтаКнига :)
Ну и, конечно, если Вы предпочитаете использовать WinAPI для того, чтобы узнать имя компьютера, то никто запретить это не может. Каждый извращается так, как он хочет

Автор - Alex_ST
Дата добавления - 15.12.2016 в 20:27
dim34rus Дата: Пятница, 16.12.2016, 14:32 | Сообщение № 8
Группа: Пользователи
Ранг: Участник
Сообщений: 66
Репутация: 10 ±
Замечаний: 0% ±

Excel 2007 - 2013
Может кому нибудь пригодится.

проблема в другом:
1. Гарантировано в книге есть только первый лист, следовательно метки надо писать на первом листе.
2. User1 может смутить некая информация на его "любимом" первом листе и он может удалить метку, а потом сохранить.
3. Кроме того, User1 может удалить лист с меткой целиком и после этого записать файл в таком случае User2 не узнает кто открыл файлик

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

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


Извращение - это писать формулы в Word'овских таблицах.
ЯД 410014340958327


Сообщение отредактировал dim34rus - Пятница, 16.12.2016, 14:34
 
Ответить
Сообщение
Может кому нибудь пригодится.

проблема в другом:
1. Гарантировано в книге есть только первый лист, следовательно метки надо писать на первом листе.
2. User1 может смутить некая информация на его "любимом" первом листе и он может удалить метку, а потом сохранить.
3. Кроме того, User1 может удалить лист с меткой целиком и после этого записать файл в таком случае User2 не узнает кто открыл файлик

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

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

Автор - dim34rus
Дата добавления - 16.12.2016 в 14:32
Alex_ST Дата: Пятница, 16.12.2016, 15:12 | Сообщение № 9
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3197
Репутация: 606 ±
Замечаний: 0% ±

2003
разве файловый сервер/домен не могут проинформировать о том кто открыл файл
К сожалению, хоть это и возможно в принципе, но доступно далеко не любому пользователю файла, расшаренного на серваке.
Для этого нужно чтобы сисадмины, имеющие соответствующие права доступа, хоть чуть-чуть напрягли извилины с целью облегчить жизнь юзвергам и написали общедоступный скриптик, который получив имя файла, ответит, какой из компов его держит открытым.
Но наши замечания и конструктивные предложения топик-стартеру, похоже, не интересны.
Поэтому он выложил "труды своих плодов" в таком виде, в каком считает нужным и который его удовлетворяет.
У нас свобода мнений. И если ему так удобно, то никто не может запретить юзать сырую процедуру.



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
Сообщение
разве файловый сервер/домен не могут проинформировать о том кто открыл файл
К сожалению, хоть это и возможно в принципе, но доступно далеко не любому пользователю файла, расшаренного на серваке.
Для этого нужно чтобы сисадмины, имеющие соответствующие права доступа, хоть чуть-чуть напрягли извилины с целью облегчить жизнь юзвергам и написали общедоступный скриптик, который получив имя файла, ответит, какой из компов его держит открытым.
Но наши замечания и конструктивные предложения топик-стартеру, похоже, не интересны.
Поэтому он выложил "труды своих плодов" в таком виде, в каком считает нужным и который его удовлетворяет.
У нас свобода мнений. И если ему так удобно, то никто не может запретить юзать сырую процедуру.

Автор - Alex_ST
Дата добавления - 16.12.2016 в 15:12
managerauto Дата: Пятница, 16.12.2016, 17:56 | Сообщение № 10
Группа: Пользователи
Ранг: Новичок
Сообщений: 15
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Каждый человек, обратившийся на данный ресурс для помощи в решении его задачи, само собой не на столько силён в решении таких вопрос(ибо смысл обращаться) и каждый пытается донести её так как он сам это видит, если рассматривать решение задачи со стороны подготовленных людей, понятно дело видно, что можно это было сделать 10 разными способами(в зависимости от преследуемых целей) и посмотреть на перспективы работы в дальнейшем.
А по мне, то что мне надо было, вроде работает, будем в дальнейшем решать проблемы по мере их поступления :D
в каком считает нужным и который его удовлетворяет.

тут вы правы :D


Сообщение отредактировал managerauto - Пятница, 16.12.2016, 17:58
 
Ответить
СообщениеКаждый человек, обратившийся на данный ресурс для помощи в решении его задачи, само собой не на столько силён в решении таких вопрос(ибо смысл обращаться) и каждый пытается донести её так как он сам это видит, если рассматривать решение задачи со стороны подготовленных людей, понятно дело видно, что можно это было сделать 10 разными способами(в зависимости от преследуемых целей) и посмотреть на перспективы работы в дальнейшем.
А по мне, то что мне надо было, вроде работает, будем в дальнейшем решать проблемы по мере их поступления :D
в каком считает нужным и который его удовлетворяет.

тут вы правы :D

Автор - managerauto
Дата добавления - 16.12.2016 в 17:56
Alex_ST Дата: Пятница, 16.12.2016, 21:37 | Сообщение № 11
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3197
Репутация: 606 ±
Замечаний: 0% ±

2003
managerauto, спасибо, что не сильно обиделись и сдержали эмоции.
Просто странно видеть человека, которому вместо примерённого им сложного решения предлагают простой аналог из одной команды, а он продолжает настаивать на своём.
К тому же Ваше решение мало того, что длиннее, но ещё и использует мощнейший аппарат WinAPI, который, к сожалению, практически не запоминаем и потому с ним можно работать только со справочником.
Да и способ хранения имени пользователя в ячейке единственного листа, согласитесь, чреват последствиями в процессе эксплуатации. О чём Вам говорил не только я.
Мест для хранения в файле масса. И ячейка открытого листа - одно из не самых удобных.
Самое простое решение - задайте Public-переменную. При открытии файла проверяйте её на пустоту (""). Если она ="", то пользователь первый открыл и процедура запишет в неё имя пользователя. Второй открывший может получить MsgBox с этим именем. А при закрытии файла переменные сбрасываются автоматически.
Если так не пройдёт (я не могу сам проверить работу с разных компов в режиме общего доступа), то записывайте имя пользователя в какую-нибудь из коллекций книги (например, в Names или в Properties) но тогда имя при закрытии книги нужно удалять.
Если же всё-таки хранить на листе, то на шибко спрятанном (VeryHidden). Такой лист нельзя будет отобразить никак кроме как из VBE и никто о нем просто не будет знать. Но программно обращаться к нему так же просто как и к обычному листу.



С уважением,
Алексей
MS Excel 2003 - the best!!!


Сообщение отредактировал Alex_ST - Пятница, 16.12.2016, 21:39
 
Ответить
Сообщениеmanagerauto, спасибо, что не сильно обиделись и сдержали эмоции.
Просто странно видеть человека, которому вместо примерённого им сложного решения предлагают простой аналог из одной команды, а он продолжает настаивать на своём.
К тому же Ваше решение мало того, что длиннее, но ещё и использует мощнейший аппарат WinAPI, который, к сожалению, практически не запоминаем и потому с ним можно работать только со справочником.
Да и способ хранения имени пользователя в ячейке единственного листа, согласитесь, чреват последствиями в процессе эксплуатации. О чём Вам говорил не только я.
Мест для хранения в файле масса. И ячейка открытого листа - одно из не самых удобных.
Самое простое решение - задайте Public-переменную. При открытии файла проверяйте её на пустоту (""). Если она ="", то пользователь первый открыл и процедура запишет в неё имя пользователя. Второй открывший может получить MsgBox с этим именем. А при закрытии файла переменные сбрасываются автоматически.
Если так не пройдёт (я не могу сам проверить работу с разных компов в режиме общего доступа), то записывайте имя пользователя в какую-нибудь из коллекций книги (например, в Names или в Properties) но тогда имя при закрытии книги нужно удалять.
Если же всё-таки хранить на листе, то на шибко спрятанном (VeryHidden). Такой лист нельзя будет отобразить никак кроме как из VBE и никто о нем просто не будет знать. Но программно обращаться к нему так же просто как и к обычному листу.

Автор - Alex_ST
Дата добавления - 16.12.2016 в 21:37
managerauto Дата: Суббота, 17.12.2016, 10:31 | Сообщение № 12
Группа: Пользователи
Ранг: Новичок
Сообщений: 15
Репутация: 0 ±
Замечаний: 20% ±

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

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

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

Так мне надо просто видеть, что бы можно было индивидуально попросить закрыть.
Самое простое решение - задайте Public-переменную. При открытии файла проверяйте её на пустоту (""). Если она ="", то пользователь первый открыл и процедура запишет в неё имя пользователя.

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

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

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

Так мне надо просто видеть, что бы можно было индивидуально попросить закрыть.
Самое простое решение - задайте Public-переменную. При открытии файла проверяйте её на пустоту (""). Если она ="", то пользователь первый открыл и процедура запишет в неё имя пользователя.

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

Автор - managerauto
Дата добавления - 17.12.2016 в 10:31
Alex_ST Дата: Суббота, 17.12.2016, 11:10 | Сообщение № 13
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3197
Репутация: 606 ±
Замечаний: 0% ±

2003
Например?

Function ThisComputerName$(): ThisComputerName$ = Split(Environ(6), "=")(1): End Function



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
Сообщение
Например?

Function ThisComputerName$(): ThisComputerName$ = Split(Environ(6), "=")(1): End Function

Автор - Alex_ST
Дата добавления - 17.12.2016 в 11:10
al-Ex Дата: Суббота, 17.12.2016, 12:06 | Сообщение № 14
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 190
Репутация: 59 ±
Замечаний: 0% ±

Excel 2010
использование WinAPI для получения сетевого имени компа - это уже явный перебор.
Часто сталкиваюсь с подобными суждениями, и всегда удивляюсь, ведь функции WinAPI не "священная корова" и даже не "Святой Грааль", это просто один из универсальных инструментов встроенных в само ядро системы. Тут, думаю, на усмотрение писателя, - какими метафорами пользоваться? Конечно теми какими уверенно владеешь. А такое "настороженное" отношение к ним вызвано просто незнанием предмета. Не помешало-бы тут на форуме замутить статью о том как можно использовать функции WinAPI в приложениях VBA, c хорошими примерами. Возможно кто-нибудь из писателей сподвигнется на это.


Сообщение отредактировал al-Ex - Суббота, 17.12.2016, 12:11
 
Ответить
Сообщение
использование WinAPI для получения сетевого имени компа - это уже явный перебор.
Часто сталкиваюсь с подобными суждениями, и всегда удивляюсь, ведь функции WinAPI не "священная корова" и даже не "Святой Грааль", это просто один из универсальных инструментов встроенных в само ядро системы. Тут, думаю, на усмотрение писателя, - какими метафорами пользоваться? Конечно теми какими уверенно владеешь. А такое "настороженное" отношение к ним вызвано просто незнанием предмета. Не помешало-бы тут на форуме замутить статью о том как можно использовать функции WinAPI в приложениях VBA, c хорошими примерами. Возможно кто-нибудь из писателей сподвигнется на это.

Автор - al-Ex
Дата добавления - 17.12.2016 в 12:06
Alex_ST Дата: Суббота, 17.12.2016, 13:01 | Сообщение № 15
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3197
Репутация: 606 ±
Замечаний: 0% ±

2003
Я же писАл:
мощнейший аппарат WinAPI … к сожалению, практически не запоминаем и потому с ним можно работать только со справочником.
или Вы серьёзно думаете, что хоть кто-нибудь помнит хотя бы 25% ПЕРЕЧНЯ из этого Краткого справочника по функциям WinAPI, не говоря уж об передаваемых аргументах и возвращаемых значениях?
Конечно, есть общие правила обращения к этим функциям из VB. Но сначала нужно узнать, что функция, выполняющая нужное Вам действие, есть в WinAPI, потом слазить в справочник по её использованию и уж после этого, объявив функцию в декларациях модуля (а это, согласитесь, лишние "мышкодвижения" при переносе процедур в другие проекты), можно использовать функцию в своей процедуре.
Поэтому функции WinAPI и редко используются, что к ним обращаются только в случаях, когда решение с функциями VB оказывается намного сложнее.
[offtop]Я, к стати, именно исходя из критерия лёгкости переноса в другие проекты, стараюсь ограничивать свои макросы одной процедурой, максимум - с вызовом подпрограмм. И всеми силами стараюсь не использовать переменные в декларациях модуля (особенно - Public)
Примером тому служит моя Функция LstBox - аналог MsgBox но с выбором как в ListBox, просто скопировав текст которой в стандартный модуль любого своего проекта, можно получить достаточно удобный инструмент для ввода данных[/offtop]



С уважением,
Алексей
MS Excel 2003 - the best!!!


Сообщение отредактировал Alex_ST - Суббота, 17.12.2016, 13:02
 
Ответить
СообщениеЯ же писАл:
мощнейший аппарат WinAPI … к сожалению, практически не запоминаем и потому с ним можно работать только со справочником.
или Вы серьёзно думаете, что хоть кто-нибудь помнит хотя бы 25% ПЕРЕЧНЯ из этого Краткого справочника по функциям WinAPI, не говоря уж об передаваемых аргументах и возвращаемых значениях?
Конечно, есть общие правила обращения к этим функциям из VB. Но сначала нужно узнать, что функция, выполняющая нужное Вам действие, есть в WinAPI, потом слазить в справочник по её использованию и уж после этого, объявив функцию в декларациях модуля (а это, согласитесь, лишние "мышкодвижения" при переносе процедур в другие проекты), можно использовать функцию в своей процедуре.
Поэтому функции WinAPI и редко используются, что к ним обращаются только в случаях, когда решение с функциями VB оказывается намного сложнее.
[offtop]Я, к стати, именно исходя из критерия лёгкости переноса в другие проекты, стараюсь ограничивать свои макросы одной процедурой, максимум - с вызовом подпрограмм. И всеми силами стараюсь не использовать переменные в декларациях модуля (особенно - Public)
Примером тому служит моя Функция LstBox - аналог MsgBox но с выбором как в ListBox, просто скопировав текст которой в стандартный модуль любого своего проекта, можно получить достаточно удобный инструмент для ввода данных[/offtop]

Автор - Alex_ST
Дата добавления - 17.12.2016 в 13:01
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Excel.ActiveWorkbook.Save в режиме редактирования/записи (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!