Добрый день! Как можно сделать гиперссылки при совместном доступе к файлу? Если через Рецензирование - Доступ к книге включить возможность нескольким пользователям изменять файл, то пропадает возможность вставлять гиперссылки (хотя старые, созданные когда доступ был единоличный, работают). Есть простая таблица - в ней список объектов и гиперссылки на файл имеющий отношение к объекту (например заказ материалов). Суть в том что с этим файлом должны работать одновременно несколько конструкторов и прочих начальников отделов (цех, снабжение, пто и т.д.).
Добрый день! Как можно сделать гиперссылки при совместном доступе к файлу? Если через Рецензирование - Доступ к книге включить возможность нескольким пользователям изменять файл, то пропадает возможность вставлять гиперссылки (хотя старые, созданные когда доступ был единоличный, работают). Есть простая таблица - в ней список объектов и гиперссылки на файл имеющий отношение к объекту (например заказ материалов). Суть в том что с этим файлом должны работать одновременно несколько конструкторов и прочих начальников отделов (цех, снабжение, пто и т.д.).fairylive
Подскажите а нормально ли то что теперь данный файл безбожно тормозит. Медленно открывается и закрывается. Там пока не больше 25 строк. В одной из колонок есть гиперссылки. Это из за них или из-за общего доступа?
Есть ли что-то чем проверить файл на ошибки если он вдруг глючный какой-то? Или с excel такого не бывает? Дело в том что вчера один из сотрудников выключил свой комп, а данный файл на сервере считал что пользователь всё ещё использует этот файл. При этом файл тормозил даже когда я удалил подобных пользователей и открывал его в одиночку. Но днём его открывают одновременно 5-6 человек или может даже больше.
Подскажите а нормально ли то что теперь данный файл безбожно тормозит. Медленно открывается и закрывается. Там пока не больше 25 строк. В одной из колонок есть гиперссылки. Это из за них или из-за общего доступа?
Есть ли что-то чем проверить файл на ошибки если он вдруг глючный какой-то? Или с excel такого не бывает? Дело в том что вчера один из сотрудников выключил свой комп, а данный файл на сервере считал что пользователь всё ещё использует этот файл. При этом файл тормозил даже когда я удалил подобных пользователей и открывал его в одиночку. Но днём его открывают одновременно 5-6 человек или может даже больше.fairylive
fairylive, а если удалить гиперссылки быстрее будет работать? Можно еще макросом попробовать: если ссылки только в одном столбце (у меня в примере в 3-м), можно повесить событие, например на 2-й щелчок [vba]
Код
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Target.Count > 1 Then Exit Sub If Not Intersect(Target, Columns(3)) Is Nothing Then If Target.Value <> "" Then Shell "explorer.exe " & Target.Value, vbNormalFocus: Cancel = True End If End Sub
[/vba]
fairylive, а если удалить гиперссылки быстрее будет работать? Можно еще макросом попробовать: если ссылки только в одном столбце (у меня в примере в 3-м), можно повесить событие, например на 2-й щелчок [vba]
Код
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Target.Count > 1 Then Exit Sub If Not Intersect(Target, Columns(3)) Is Nothing Then If Target.Value <> "" Then Shell "explorer.exe " & Target.Value, vbNormalFocus: Cancel = True End If End Sub
Так Вы скопируйте то, что я написала в модуль листа
Скопировал. Теперь по двойному щелчку открывается проводник Мой компьютер - Мои документы. А как сделать чтобы открывался сразу сам файл? Я так понимаю это можно сделать. Решение очень крутое, за что вам большое спасибо!
PS Сейчас мы в этом файле с общим доступом вставляем гиперссылку через функцию. Это не сложно но немного долго (и многие сотрудники забивают на вторую часть формулы - на имя ссылки). По идее если в ячейке будет лежать просто адрес файла то с помощью макроса по двойному щелчку можно будет открыть сам файл. Так будет чуточку проще работать с этим файлом. И возможно он будет меньше тормозить.
PPS Вообще по поводу тормозов. Если файл скопировать с сервера к себе на локальный компьютер он будет открываться быстро. Если ещё вдобавок отключить общий доступ то ещё и размер файла в три раза уменьшится. Я думаю дело в журнале изменений. Сейчас там в настройках стоит хранить журнал 300 дней. Но по сути нам он не нужен вообще. Ну максимум неделю. Сейчас уже столкнулись с тем что при совместной работе постоянно возникают конфликты и некоторые строчки уже были перезаписаны и потеряны. По этому поводу договорились что тот кто хочет сделать изменения в новой строке сначала пишет резерв и свою фамилию и выходит с сохранением. Если есть конфликт то принимаются изменения которые вносились раньше, а данный человек резервирует строку снова. Пока это самое логичное что нам пришло в голову.
Но мне ещё сдаётся что надо бы замутить всё это дело в Access. Чтобы не трогать таблицу с данными вообще. Те кто должны внести изменения они сделают это через форму. Те кто должен открыть таблицу для просмотра они это тоже сделают независимо.
Прикрепил файл без заполненных данных. Просто чттобы было понимание о чём речь. До красной линии - то что надо заполнить тем кто составляет заявку. После разного рода контроль - пишется фамилия принявшего и ответственного и дата.
Судя по объёму файла за неделю (150кб) через месяц это будет многомегабайтный эксель. А через полгода боюсь представить. А тормозит он уже сейчас.
Так Вы скопируйте то, что я написала в модуль листа
Скопировал. Теперь по двойному щелчку открывается проводник Мой компьютер - Мои документы. А как сделать чтобы открывался сразу сам файл? Я так понимаю это можно сделать. Решение очень крутое, за что вам большое спасибо!
PS Сейчас мы в этом файле с общим доступом вставляем гиперссылку через функцию. Это не сложно но немного долго (и многие сотрудники забивают на вторую часть формулы - на имя ссылки). По идее если в ячейке будет лежать просто адрес файла то с помощью макроса по двойному щелчку можно будет открыть сам файл. Так будет чуточку проще работать с этим файлом. И возможно он будет меньше тормозить.
PPS Вообще по поводу тормозов. Если файл скопировать с сервера к себе на локальный компьютер он будет открываться быстро. Если ещё вдобавок отключить общий доступ то ещё и размер файла в три раза уменьшится. Я думаю дело в журнале изменений. Сейчас там в настройках стоит хранить журнал 300 дней. Но по сути нам он не нужен вообще. Ну максимум неделю. Сейчас уже столкнулись с тем что при совместной работе постоянно возникают конфликты и некоторые строчки уже были перезаписаны и потеряны. По этому поводу договорились что тот кто хочет сделать изменения в новой строке сначала пишет резерв и свою фамилию и выходит с сохранением. Если есть конфликт то принимаются изменения которые вносились раньше, а данный человек резервирует строку снова. Пока это самое логичное что нам пришло в голову.
Но мне ещё сдаётся что надо бы замутить всё это дело в Access. Чтобы не трогать таблицу с данными вообще. Те кто должны внести изменения они сделают это через форму. Те кто должен открыть таблицу для просмотра они это тоже сделают независимо.
Прикрепил файл без заполненных данных. Просто чттобы было понимание о чём речь. До красной линии - то что надо заполнить тем кто составляет заявку. После разного рода контроль - пишется фамилия принявшего и ответственного и дата.
Судя по объёму файла за неделю (150кб) через месяц это будет многомегабайтный эксель. А через полгода боюсь представить. А тормозит он уже сейчас.fairylive
У меня вроде и так все открывается... Только спрашивает сначала открыть или сохранить.
Если вот так написать, не будет спрашивать [vba]
Код
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Target.Count > 1 Then Exit Sub If Not Intersect(Target, Columns(5)) Is Nothing Then If Target.Value <> "" Then fPath = "start " & """"" " & """" & Target.Value & """""" Shell "cmd /c" & fPath, vbHide: Cancel = True End If End If End Sub
[/vba] Только имейте ввиду, если у кого-то сетевой диск не подключен или называется не так, как у Вас, Ваши ссылки могут не открыться. Так что лучше написать проверку для сетевых дисков, или ставить путь к файлу не "Z:\папка\файл", а "\\xxx.xxx.xxx.xxx\Share\папка\файл"
У меня вроде и так все открывается... Только спрашивает сначала открыть или сохранить.
Если вот так написать, не будет спрашивать [vba]
Код
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Target.Count > 1 Then Exit Sub If Not Intersect(Target, Columns(5)) Is Nothing Then If Target.Value <> "" Then fPath = "start " & """"" " & """" & Target.Value & """""" Shell "cmd /c" & fPath, vbHide: Cancel = True End If End If End Sub
[/vba] Только имейте ввиду, если у кого-то сетевой диск не подключен или называется не так, как у Вас, Ваши ссылки могут не открыться. Так что лучше написать проверку для сетевых дисков, или ставить путь к файлу не "Z:\папка\файл", а "\\xxx.xxx.xxx.xxx\Share\папка\файл"Manyasha
Private Sub Worksheet_Change(ByVal Target As Range) Dim l As String Set rLinks = Intersect(Target, Columns(5)) If rLinks Is Nothing Then Exit Sub Application.EnableEvents = False For Each cell In rLinks If InStr(cell.Value, ":") Then l = Mid$(cell.Value, 1, InStr(cell.Value, ":") - 1) cell.Value = Replace(cell.Value, l & ":", GetNetworkDriveAddress(l)) End If Next cell Application.EnableEvents = True End Sub
[/vba][vba]
Код
Function GetNetworkDriveAddress(drLetter As String) Dim fso, d Set fso = CreateObject("Scripting.FileSystemObject") For Each d In fso.Drives If d.DriveType = 3 And drLetter = d.DriveLetter Then GetNetworkDriveAddress = d.ShareName: Exit Function End If Next d GetNetworkDriveAddress = drLetter & ":" End Function
Private Sub Worksheet_Change(ByVal Target As Range) Dim l As String Set rLinks = Intersect(Target, Columns(5)) If rLinks Is Nothing Then Exit Sub Application.EnableEvents = False For Each cell In rLinks If InStr(cell.Value, ":") Then l = Mid$(cell.Value, 1, InStr(cell.Value, ":") - 1) cell.Value = Replace(cell.Value, l & ":", GetNetworkDriveAddress(l)) End If Next cell Application.EnableEvents = True End Sub
[/vba][vba]
Код
Function GetNetworkDriveAddress(drLetter As String) Dim fso, d Set fso = CreateObject("Scripting.FileSystemObject") For Each d In fso.Drives If d.DriveType = 3 And drLetter = d.DriveLetter Then GetNetworkDriveAddress = d.ShareName: Exit Function End If Next d GetNetworkDriveAddress = drLetter & ":" End Function
Магия какая-то))) Спасибо! Теперь открывается. Сетевых дисков нет. Есть просто сеть от куда заходим на сервер ссылки что-то типа \\server\doc\proect\file.xls
Магия какая-то))) Спасибо! Теперь открывается. Сетевых дисков нет. Есть просто сеть от куда заходим на сервер ссылки что-то типа \\server\doc\proect\file.xls
ЗЫ Кажется пришла пора учиться программировать)))fairylive
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Target.Count > 1 Then Exit Sub If Not Intersect(Target, Columns(5)) Is Nothing Then If Target.Value <> "" Then fPath = "start " & """"" " & """" & Target.Value & """""" Shell "cmd /c" & fPath, vbHide: Cancel = True End If End If End Sub
[/vba]
А как дописать данный код чтобы в ячейке отображалось только имя файла без пути до него. Но по двойному щелчку надо бы чтобы открывался сам файл. Можно как-то сделать видимым не весь текст в ячейке, а избирательно. В данном случае из всего пути файла хотелось бы видеть только имя файла. [moder]К данной теме это не относится, создайте новую.[/moder]
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Target.Count > 1 Then Exit Sub If Not Intersect(Target, Columns(5)) Is Nothing Then If Target.Value <> "" Then fPath = "start " & """"" " & """" & Target.Value & """""" Shell "cmd /c" & fPath, vbHide: Cancel = True End If End If End Sub
[/vba]
А как дописать данный код чтобы в ячейке отображалось только имя файла без пути до него. Но по двойному щелчку надо бы чтобы открывался сам файл. Можно как-то сделать видимым не весь текст в ячейке, а избирательно. В данном случае из всего пути файла хотелось бы видеть только имя файла. [moder]К данной теме это не относится, создайте новую.[/moder]fairylive
Сообщение отредактировал Manyasha - Пятница, 29.01.2016, 17:53
Может кому ещё такой способ подойдёт. Нашёл вот здесь. Сначала отключаются сообщения с предупреждениями и удаляется общий доступ к книге. Затем добавляется гиперссылка и возвращается доступ к книге. Конечно, при таком спососбе удаляется история изменений книги, да и в больших книгах может сохранять долго.
[vba]
Код
Sub AddHyperlink() Dim cell As Range
Application.DisplayAlerts = False
' Unshare the Workbook If ActiveWorkbook.MultiUserEditing Then ActiveWorkbook.ExclusiveAccess End If
' Change address in cell to a hyperlink. If ActiveCell = "" Then ActiveCell.Hyperlinks.Delete Else For Each cell In Intersect(Selection, _ Selection.SpecialCells(xlConstants, xlTextValues)) With Worksheets(1) .Hyperlinks.Add Anchor:=cell, _ Address:=cell.Value, _ ScreenTip:=cell.Value, _ TextToDisplay:=cell.Value End With Next cell End If
' Reshare the Workbook If Not ActiveWorkbook.MultiUserEditing Then ActiveWorkbook.SaveAs _ Filename:=ActiveWorkbook.FullName, _ AccessMode:=xlShared End If End Sub
[/vba]
Может кому ещё такой способ подойдёт. Нашёл вот здесь. Сначала отключаются сообщения с предупреждениями и удаляется общий доступ к книге. Затем добавляется гиперссылка и возвращается доступ к книге. Конечно, при таком спососбе удаляется история изменений книги, да и в больших книгах может сохранять долго.
[vba]
Код
Sub AddHyperlink() Dim cell As Range
Application.DisplayAlerts = False
' Unshare the Workbook If ActiveWorkbook.MultiUserEditing Then ActiveWorkbook.ExclusiveAccess End If
' Change address in cell to a hyperlink. If ActiveCell = "" Then ActiveCell.Hyperlinks.Delete Else For Each cell In Intersect(Selection, _ Selection.SpecialCells(xlConstants, xlTextValues)) With Worksheets(1) .Hyperlinks.Add Anchor:=cell, _ Address:=cell.Value, _ ScreenTip:=cell.Value, _ TextToDisplay:=cell.Value End With Next cell End If
' Reshare the Workbook If Not ActiveWorkbook.MultiUserEditing Then ActiveWorkbook.SaveAs _ Filename:=ActiveWorkbook.FullName, _ AccessMode:=xlShared End If End Sub