Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.04.2019, 16:35   #1
krong
Новичок
Джуниор
 
Регистрация: 25.04.2019
Сообщений: 5
По умолчанию Вернуть значение ячейки из листа книги (название листа меняется)

Господа и дамы, вопрос жизни и смерти! Хелп.

С программированием в Excel ранее не сталкивался.

Задача такая - в главный файл возвращать значение ячеек из второстепенного файла. Названия листов второстепенного файла постоянно меняются, но они находятся в одном и том же порядке. Собственно вот весь мой код:

Sub GetDataFromFile()

Range("h7").Formula = "='C:\[Апрель.xlsx]sheet(4)'!D29"
Range("h8").Formula = "='C:\[Апрель.xlsx]sheet(4)'!I29"
Range("h9").Formula = "='C:\[Апрель.xlsx]sheet(4)'!N29"
Range("h10").Formula = "='C:\[Апрель.xlsx]sheet(4)'!S29"

End Sub

Это и есть вся программа, но строк будет гораздо больше. В данном случае лист второстепенного файла идет четвертым по счету слева на право.
Вопрос:
1) Я ссылаюсь не на имя листа, а на его индекс (порядковый номер слева направо)? Или это не так и я делаю какую-то ерунду.
2) Почему при выполнении этого макроса одним нажатием заполняется лишь одна ячейка? Приходится делать 4 нажатия.
3) Почему ячейки не заполняются автоматически? При каждом нажатии вылетает окно и предлагает выбрать вручную лист второстепенного файла, откуда брать информацию.

Последний раз редактировалось krong; 26.04.2019 в 03:13.
krong вне форума Ответить с цитированием
Старый 25.04.2019, 18:06   #2
krong
Новичок
Джуниор
 
Регистрация: 25.04.2019
Сообщений: 5
По умолчанию

update
krong вне форума Ответить с цитированием
Старый 26.04.2019, 03:12   #3
krong
Новичок
Джуниор
 
Регистрация: 25.04.2019
Сообщений: 5
По умолчанию

update
krong вне форума Ответить с цитированием
Старый 26.04.2019, 08:33   #4
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Код:
Option Explicit

Sub GetDataFromFile()
    Dim shN As String
    Dim fileName As String
    Dim path As String
    Dim filePath As String
    filePath = "C:\"
    fileName = "April.xlsx"
    
    shN = Get4thSheetName(filePath & fileName)
    If (shN <> vbNullString) Then
        path = filePath & "[" & fileName & "]" & shN
        Debug.Print path
        Debug.Print "='" & path & "'!D29"
        Range("h7").Formula = "='" & path & "'!D29"
        Range("h8").Formula = "='" & path & "'!I29"
        Range("h9").Formula = "='" & path & "'!N29"
        Range("h10").Formula = "='" & path & "'!S29"
    End If
    
End Sub

Function Get4thSheetName(file)
    Dim sh As Object
    Dim c As Worksheet
    Set sh = GetObject(file).Worksheets
    If sh.Count >= 4 Then
        Get4thSheetName = sh(4).Name
    Else
        Get4thSheetName = vbNullString
    End If
End Function
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 26.04.2019, 16:23   #5
krong
Новичок
Джуниор
 
Регистрация: 25.04.2019
Сообщений: 5
По умолчанию

Цитата:
Сообщение от Aleksandr H. Посмотреть сообщение
Код:
Option Explicit

Sub GetDataFromFile()
    Dim shN As String
    Dim fileName As String
    Dim path As String
    Dim filePath As String
    filePath = "C:\"
    fileName = "April.xlsx"
    
    shN = Get4thSheetName(filePath & fileName)
    If (shN <> vbNullString) Then
        path = filePath & "[" & fileName & "]" & shN
        Debug.Print path
        Debug.Print "='" & path & "'!D29"
        Range("h7").Formula = "='" & path & "'!D29"
        Range("h8").Formula = "='" & path & "'!I29"
        Range("h9").Formula = "='" & path & "'!N29"
        Range("h10").Formula = "='" & path & "'!S29"
    End If
    
End Sub

Function Get4thSheetName(file)
    Dim sh As Object
    Dim c As Worksheet
    Set sh = GetObject(file).Worksheets
    If sh.Count >= 4 Then
        Get4thSheetName = sh(4).Name
    Else
        Get4thSheetName = vbNullString
    End If
End Function
Спасибо большое! Все работает. Работа оптимизирована =)
krong вне форума Ответить с цитированием
Старый 27.04.2019, 06:42   #6
krong
Новичок
Джуниор
 
Регистрация: 25.04.2019
Сообщений: 5
По умолчанию

Вопрос можно закрыть

Последний раз редактировалось krong; 27.04.2019 в 07:16.
krong вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сохранение определенного листа книги в файл с именем из ячейки. Nikitasun Помощь студентам 3 10.12.2016 13:59
Ссылка ячеек одного листа на ячейки другого листа n0str0m0 Microsoft Office Excel 10 31.12.2011 12:11
отображение данных первого листа, при активации ячейки второго листа Akmal-Sharipov Microsoft Office Excel 4 03.12.2010 14:48
вставка из ячейки листа в название файла (A1_B1.xsl) ramzan_s Microsoft Office Excel 2 01.10.2010 17:16
Название листа, по значению ячейки kzld Microsoft Office Excel 1 11.09.2010 12:03