Страницы: 1 2 След.
RSS
Ссылка в макросе на другой лист из текущей книги
 
Добрый день!
Подскажите, как сделать ссылку в макросе на другой лист из текущей книги :
Код
  ActiveWorkbook.SaveAs path & Application.PathSeparator & ActiveSheet.Name & " " & Range("B10") & ".xlsx"

Вместо ячейки "B10" нужно указать "Лист1, ячейка B10"
Изменено: HYPNO - 22.11.2022 11:16:50
 
Sheets("Лист1").Range("B10")
 
Роман Петров, ошибка, выделяет строку желтым цветом
 
формат файла сделайте .xlsm
 
Роман Петров, у меня книга в двоичном формате xlsb, макрос работает, нужно только ссылку привязать к другому листу
 
формат .xlsm поддерживает макросы. Как вы хотите сохранить файл с макросом без соответствующего разрешения?
Знак вопроса указан в коде в вашем первом сообщении.
Изменено: Роман Петров - 22.11.2022 11:25:01
 
Цитата
написал:
выделяет строку желтым цветом
1. Какую строку?
2. Какую ошибку пишет?
3. B10 точно английскими буквами записана? Лист "Лист1" точно есть в текущей книге?
4. Если указываете сохранение файла из одного формата в другой(в Вашем случае возможно это из xlsb в xlsx) - обязательно указание параметра FileFormat с соответствующим форматом.
Изменено: Дмитрий(The_Prist) Щербаков - 22.11.2022 11:27:19
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Worksheets(XXX) ссылка на лист ХХХ
где ХХХ
- номер листа (число 1,2,3... 100)
- имя листа ("Итоги". "Данные", "Лист1" и т.д. и т.п.)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Роман Петров, смотрите:
есть книга в формате *.xlsb , в которой данный макрос с сохранением отдельного листа в файл с разрешением *.xlsx
формат *.xlsb поддерживает макросы,у меня их там целый десяток и все работают
в книгу, которая формируется и сохраняется данным макросом - не нужно менять разрешение, это ни к чему.

но при замене "& Range("B10") &" на "& Sheets("Лист1").Range("B10") &" - макрос не запускается, выделяя строку желтым.
Если оставить "& Range("B10") &" - все работает, но име не то, которое я хочу присвоить файлу
 
Цитата
HYPNO написал:
но при замене "& Range("B10") &" на "& Sheets("Лист1").Range("B10")
угадайте, в чем причина? Может в имени листа, которое записано неверно? Других вариантов нет. Может быть в активной книге "Лист1" записан с пробелом в начале или в конце или еще где-то. Не пробовали взять и скопировать имя из ярлыка листа и вставить в код как есть?
Цитата
HYPNO написал:
есть книга в формате *.xlsb , в которой данный макрос с сохранением отдельного листа в файл с разрешением *.xlsx
не нужно менять разрешение, это ни к чему.
прочтите мое предыдущее сообщение, чтобы было понимание происходящего. Меня xlsx на другой не надо - а вот добавить параметр FileFormat - надо.
Изменено: Дмитрий(The_Prist) Щербаков - 22.11.2022 11:34:15
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Ігор Гончаренко, вот так?
Код
ActiveWorkbook.SaveAs path & Application.PathSeparator & ActiveSheet.Name & " " & Worksheets("Лист1").Range("B10") & ".xlsx"
 
Дмитрий(The_Prist) Щербаков, при сохранении в xlsx работает без FileFormat, если менять на xlsm - то нужно указывать FileFormat.
Но, повторяю третий раз, книга должна сохраняться в xlsx, нужно только поменять ссылку, все, не более.

Имена листов проверял, даже переименовывал, чтобы исключить ошибку.
просто останавливается макрос с выделением данной строки желтым цветом.
 
ActiveWorkbook.SaveAs Filename:=" " & " " & Worksheets("Лист1").Range("B10"), FileFormat:=xlOpenXMLWorkbookMacroEnabled

Выделил жирным сам формат. Какой вам надо, исправите сами.
Кстати, Worksheets или sheets одинаково работают в этом случае)
Изменено: Роман Петров - 22.11.2022 11:45:01
 
Цитата
HYPNO написал:
Но, повторяю третий раз
да хоть пятый. Дело Ваше. Поверьте, я насохранял кодами файлов куда больше Вашего и знаю, о чем пишу. Вы можете делать как угодно.
Что до ошибки - Вы явно чего-то не учитываете. Скиньте хотя бы скрин экрана в момент ошибки и скрин книги, которая активная на данный момент. есть подозрение, что в активной на данный момент книге нет листа с именем "Лист1".
Да, и текст с номером ошибки тоже не помешает - а то может проблема вообще в пути к файлу...
Изменено: Дмитрий(The_Prist) Щербаков - 22.11.2022 11:57:52
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
полагаю можно приостановить конкурс на лучшего отгадывателя причины
подождать пока автор выложит файл и тогда просто ответить на вопрос почему Excel не хочет выполнять определенную строку)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Дмитрий(The_Prist) Щербаков, файл примера (работающий без ссылки на Лист1) прикладываю
 
Цитата
HYPNO написал:
работающий без ссылки на Лист1
Вы бы еще написали, какое конкретно значение было в B10. В текущем файле невозможно сохранить, т.к. в тексте есть двоеточие.
Но если его поменять на корректное - никаких ошибок. Поэтому повторю:
Цитата
Дмитрий(The_Prist) Щербаков написал:
Скиньте хотя бы скрин экрана в момент ошибки и скрин книги, которая активная на данный момент. есть подозрение, что в активной на данный момент книге нет листа с именем "Лист1".Да, и текст с номером ошибки тоже не помешает - а то может проблема вообще в пути к файлу...
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Дмитрий(The_Prist) Щербаков, Наименование - любое слово, например "Колесо".
не будет никаких символов, спецзнаков и тд. обычное слово.
 
Цитата
HYPNO написал:
Наименование - любое слово, например "Колесо"
еще раз
Цитата
Дмитрий(The_Prist) Щербаков написал:
Но если его поменять на корректное - никаких ошибок. Поэтому повторю:
мы так и будем в гадалки играть или уже увидим текст ошибки и все остальное, что я просил? Тут куча вариантов: от неверного пути, до отказа в доступе. Без этого помочь нечем - код отрабатывает на ура, никаких ошибок не выдает.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Дмитрий(The_Prist) Щербаков, вот
 
А где же хваленое расширение xlsx на скрине в строке сохранения? Хотя и без него отработает - но лучше добавлять. Далее, для xlsx тип xlOpenXMLWorkbook, а не xlOpenXMLStrictWorkbook.
Скрина с активной книгой так и не увидел, увы. Поэтому могу только предложить дописать корректно строку сохранения:
Код
ActiveWorkbook.SaveAs path & Application.PathSeparator & ActiveSheet.Name & " " & ActiveWorkbook.Worksheets("Лист1").Range("B10").Value & ".xlsx", FileFormat:=xlOpenXMLWorkbook
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
у несохранённой книги не может быть Thisworkbook.path, path - пусто. На сколько вижу по Screenshot_6.jpg
Изменено: New - 22.11.2022 13:50:31
 
Цитата
New написал:
у несохранённой книги не может быть Thisworkbook.path
так path назначается ДО метода Copy - а значит путь берется из книги с кодом. А она, как я понял - сохранена где-то.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Дмитрий(The_Prist) Щербаков, не работает ваша предложенная строка, объясню почему:
для чего я прислал образец файла ? - макрос запускается с кнопки со второго листа под наименованием "НД", именно поэтому и нужна ссылка для макроса на Лист1!!!
В таком случае опять выдает ошибку.

Если же перейти в "Лист1"  и выполнить данный макрос - то он, конечно , выполнится, но во-первых: это мне не нужно ,а в во-вторых, если я уже нахожусь на "Лист1" - зачем мне ссылки делать? я бы оставил "B10" и все.


Если вы действительно хотите помочь - прошу, откройте файл примера и запустите макрос с кнопке на листе "НД".
 
Наконец-то домучали ТС, чтобы появился файл
Код
Sub Сохранить_лист()
    Dim path As String, iLinks As Variant, I As Long
    Dim vopros As VbMsgBoxResult
 
    vopros = MsgBox("Сохранить форму?", vbYesNo + vbQuestion, "Сохранение")
    
    Application.ScreenUpdating = False
    
    If vopros = vbYes Then
        path = ThisWorkbook.path
        ActiveSheet.Copy
        iLinks = ActiveWorkbook.LinkSources(xlExcelLinks)
        If Not IsEmpty(iLinks) Then
            For I = 1 To UBound(iLinks)
                ActiveWorkbook.BreakLink Name:=iLinks(I), Type:=xlExcelLinks
            Next I
        End If
    
        If ActiveSheet.Shapes.Count > 0 Then ActiveSheet.Shapes(1).Delete           'удаляю кнопку СОХРАНЕНИЯ в новом файле!!!
        
        Application.DisplayAlerts = False
        ActiveWorkbook.SaveAs path & Application.PathSeparator & ActiveSheet.Name & " " & Range("B10").Value & ".xlsx", FileFormat:=xlOpenXMLWorkbook
        Application.DisplayAlerts = True
    
        ActiveWorkbook.Close (False)
        MsgBox "Форма сохранена в текущую папку.", vbInformation, "Сообщение:"
    End If
    
    Application.ScreenUpdating = True
End Sub
Изменено: New - 22.11.2022 14:13:14
 
Цитата
HYPNO написал:
именно поэтому и нужна ссылка для макроса на Лист1!!!
и что? А я на какой лист ссылку поставил?
Вы бы вместо претензий написали что хотите в итоге получить и как что надо делать. Моя строка формирует ровно то, что Вы просили изначально:
Цитата
HYPNO написал:
Вместо ячейки "B10" нужно указать "Лист1, ячейка B10"
А то, что Вы ни разу не понимаете как и что работает - это другой вопрос. Я не просто так просил скрин - а что за активная книга у Вас на момент выполнения ошибочной строки? Посмотрели? Нашли в этой книге "Лист1"? И я думаю, что нет. Да и не хотели, т.к. искали причину только в том, что Вам тут советуют не то что-то. А чтобы посоветовать то, что надо - надо понимать от и до что делается и на какой результат рассчитываете. А Вы заладили "Лист1" - это и получили.
А раз уж такие претензии вместо того, чтобы подумать и сделать наконец то, что просят - вот так будет максимально корректно:
Код
Sub Сохранить_лист()
Application.ScreenUpdating = False
Dim path As String, iLinks As Variant, I As Long
 
vopros = MsgBox("Сохранить форму?", vbYesNo, "Сохранение")
If vopros = vbYes Then
 
    path = ThisWorkbook.path
    Dim sFName$
    sFName = path & Application.PathSeparator & ActiveSheet.Name & " " & ActiveWorkbook.Worksheets("Лист1").Range("B10").Value & ".xlsx"
    ActiveSheet.Copy
    iLinks = ActiveWorkbook.LinkSources(xlExcelLinks)
        If Not IsEmpty(iLinks) Then
            For I = 1 To UBound(iLinks)
            ActiveWorkbook.BreakLink Name:=iLinks(I), Type:=xlExcelLinks
            Next I
        End If
    
    If ActiveSheet.Shapes.Count > 0 Then ActiveSheet.Shapes(1).Delete           'удаляю кнопку СОХРАНЕНИЯ в новом файле!!!
     ActiveWorkbook.SaveAs sFName, FileFormat:=xlOpenXMLWorkbook  'не работает
    
     ActiveWorkbook.Close (False)
     MsgBox "Форма сохранена в текущую папку.", vbInformation, "Сообщение:"
End If
End Sub
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Интересно, Дмитрий после такой ветки подпись придумал? )
Изменено: МатросНаЗебре - 22.11.2022 14:17:46
 
Цитата
New написал:
ActiveSheet.Name & " " & Range("B10").Value
не то будет. Я намекал на это изначально не раз. Если запустить код из листа НД, то активный будет лист НД, т.к. копируем именно его. И в этой полученной книге нет других листов - только этот НД и все...А новое имя файла именно в книге с кодом в Лист1.
Хотя можно было и иначе, на самом-то деле:
Код
path & Application.PathSeparator & ThisWorkbook.ActiveSheet.Name & " " & ThisWorkbook.Worksheets("Лист1").Range("B10").Value & ".xlsx"
но это не самый правильный путь. Лучше делать через переменную - надежнее и в отладке куда проще и нагляднее.
Изменено: Дмитрий(The_Prist) Щербаков - 22.11.2022 14:18:40
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
New, да файл я еще 2 часа назад прикрепил...
 
Дмитрий(The_Prist) Щербаков, +1, я не прочитал, что написано в ячейке ))
Страницы: 1 2 След.
Наверх