Как да създам контроли в екселски файл, така че да се ограничи разпространяването на файла??

3 одобрения 0 неодобрения
попитан 2017 февруари 8 в VBA от M.R. начинаещ (20 точки)
Възможно ли е да се създаде брояч, чрез който да се ограничи достъпа до файла, ако същият се изтегли от друг компютър? Например задаваме лимит= 1 и когато броячът отчете 2, да се появява диалогов прозорец с надпис "Достъпът е ограничен!" Или нещо подобно.
Благодаря предварително!

2 отговори

2 одобрения 0 неодобрения
отговорени 2017 февруари 8 от BgExcelAdmin цар (646 точки)
избран 2017 февруари 15 от M.R.
 
Най-добър отговор

Следния код ограничава броя отваряния за всеки компютър до 1 път максимум:

Private Sub Workbook_Open()
N = GetSetting("Demo", "Demo", "Demo", 0) + 1
If N > 1 Then
   MsgBox "This file has reached its maximum usage", vbCritical
   Application.Quit
End If
SaveSetting "Demo", "Demo", "Demo", N
End Sub

Кодът трябва да се сложи в Microsoft Excel Objects -> This Workbook. Преди да го инсталираш го тествай на празен файл, за да не си заключиш важна информация.

6 коментари

коментиран 2017 февруари 14 от M.R. начинаещ (20 точки)
Здравейте! Благодаря за отговора! С този код автоматично ли се въвежда името на компютъра? И изобщо има ли как това да се случи и да се контролира, така че, да бъде еднократно. Тоест след като файлът е качен на даден компютър и е въведено името на същият компютър, в случай, че бъде разпространяван- името на компютъра да не се заменя...Съжалява за сложните обяснения, но съм начинаеща и ми е за първи път. Благодаря за съдействието! :)
коментиран 2017 февруари 14 от Tormozko
За съжаление, поради съображения за сигурност, не може да се изпълняват макроси автоматично на нов компютър без потребителят да ги е активирал изрично. Това прави автоматичното пускане на код който да прави това което искаш невъзможно. Решението на проблема трябва да се търси извън възможностите на Ексел според мен, или да се измисли заобикаляне с други средства :)
коментиран 2017 февруари 15 от BgExcelAdmin цар (646 точки)
Редактирах си отговора. Tormozko е прав, потребителят трябва да е активирал изпълнението на макроси, за да се изпълнява какъвто и да е код на vba. Ако това не те устройва, може да помислиш за други варианти като предложението на vbafreak, да скриеш екселската страница.
коментиран 2017 февруари 15 от M.R. начинаещ (20 точки)
Благодаря за отговора! Току-що тествах кода! Работи отлично и мисля, че ще ми свърши работа.
коментиран 2017 февруари 26 от M.R. начинаещ (20 точки)
Здравейте! Сложих кода, който ограничава броя на отварянията на файла до 1 път. Проблемът е, че когато се отвори веднага се извежда съобщението и се затваря- без да е използван. Кое трябва да се промени от кода, за да работи файла поне веднъж? Благодаря предварително!
коментиран 2017 март 6 от BgExcelAdmin цар (646 точки)
Ред 4 "n>1" определя броя на отваряния преди да се задейства макроса. В случая е зададено числото 1, т.е един път. Може да променяш стойността на n, както пожелаеш.
3 одобрения 0 неодобрения
отговорени 2017 февруари 9 от vbafreak експерт (203 точки)

Здравей,

Не се сещам за вариант, който да засича колко пъти даден файл e отварян или изтеглян на различни компютри. Може да се ограничат броя на отваряния на един компютър, но доколкото разбирам, не е това целта ти. Мога да предложа следния вариант, при който екселският файл може да се отваря от теб като администратор и от още един човек по твое желание. Може да update-ваш информацията във файла, според това дали искаш да променяш човека, който има достъп до файла. За целта отваряш vba едитора в ексел (alt + F11). После от лявата страна избираш Microsoft Excel Objects -> This Workbook и пействаш  следния код:

Private Sub Workbook_Open()
Dim MacroOwner As String
Dim User As String
MacroOwner = Environ("username")
'Please add the username of the person who you want to use the file below
User = "......;" 'do not remove the ";"  at the end
   If CBool(InStr(1, User, Environ("username") & ";")) Then
      Else
      'Please add your own username here
      If MacroOwner = "" Then
         Else
         MsgBox "You are trying to access restricted panel.", vbCritical, "Access Denied"
         Application.Quit
      End If
   End If
End Sub

Накратко: 

Макрото се задейства автоматично, при отваряне на екселския файл. За да работи трябва да запазиш файла не като обикновен екселски файл, а macro-enabled (File -save as), с разширение xlsm. "Macroowner" променливата взима името (username) на твоя компютър. "User" взима името на компютъра на колегата ти, на когото ще дадеш достъп до файла. 

Трябва да направиш следната промяна в кода: да сложиш имената на компютрите (usernames) в кода, вътре в кавичките под зеления текст. Можеш да ги видиш от C:\Users папката. Сложи имената в скобите под зеления текст. Това е всичко. Успех! Кажи ако нещо не е ясно.

2 коментари

коментиран 2017 февруари 14 от M.R. начинаещ (20 точки)
Здравейте! Следвах внимателно инструкциите Ви, но нещо не ми се получава: След като запиша файла и се опитам да го отворя наново, се извежда следното съобщение: "Compile error in hidden module thisworkbook. This error commonly occurs when code is incompatible with the version, platform, or architecture of this application".
коментиран 2017 февруари 14 от vbafreak експерт (203 точки)
Здравей, при мен работи. Предполагам, че причината е локална, т.е. от някакъв бъг в операционната система на компютъра. Това, което би могло да реши проблема е да отвориш папката XlStart ( C:\Program Files (x86)\Microsoft Office\Office12\XLSTART ) и да изтриеш всички .exd файлове там. (Според версията на MS Office папката може да е Office12, Office14, и т.н.).
Съветвам те първо да пробваш да го инсталираш на друг компютър и да кажеш дали ще работи там . Когато отвориш файла, трябва да ти се появи предупреждение "enable macros" и да натиснеш "ok", за да работи. Съгласен съм с мнението ан Тормозко, че потребителят трябва да даде enable macros, за да се изпълнява кода и друг начин затова не ми е известен.

Алтернативно решение, което можеш да опиташ, е просто да скриеш шийта, така потребителите няма да го виждат. Има опция дори да се направи very hidden, т.е потребителите да не могат да го unhide-ват. Тук има повече инфо по темата: http://www.excel-university.com/make-an-excel-worksheet-very-hidden/
Добре дошли в българския форум за Ексел и Майкрософт офис! Тук можете да питате хора със знания и опит, както и да споделите знанията и опита си с другите.
...