Макрос заполнения ячеек из выбранного файла - VBA

Узнай цену своей работы

Формулировка задачи:

Помогите, подскажите что делаю не так? Нужен макрос с выбором файла и заполнением ячеек из этого файла. Но получается что на каждую заполняемую ячейку выходит диалоговое окно выбора файла.
Листинг программы
  1. Public Function GetFilePath(Optional ByVal Title As String = "Выберите файл КДРО", _
  2. Optional ByVal InitialPath As String = "c:\", _
  3. Optional ByVal FilterDescription As String = "Книги Excel", _
  4. Optional ByVal FilterExtention As String = "*.xls*") As String
  5. On Error Resume Next
  6. With Application.FileDialog(msoFileDialogOpen)
  7. .ButtonName = "Выбрать": .Title = Title: .InitialFileName = InitialPath
  8. .Filters.Clear: .Filters.Add FilterDescription, FilterExtention
  9. If .Show <> -1 Then Exit Function
  10. GetFilePath = .SelectedItems(1): PS = Application.PathSeparator
  11. End With
  12. End Function
  13. Sub Выбор_файла()
  14. Dim ИмяФайла As String
  15. Dim Fn As String
  16. ИмяФайла = GetFilePath
  17. If ИмяФайла = "" Then Exit Sub
  18. MsgBox ИмяФайла
  19. Range("D10").Select
  20. ActiveCell.FormulaR1C1 = "=[ИмяФайла]Анализ!R11C4"
  21. Range("D11").Select
  22. ActiveCell.FormulaR1C1 = "=[ИмяФайла]Анализ!R12C4"
  23. Range("D12").Select
  24. End Sub

Решение задачи: «Макрос заполнения ячеек из выбранного файла»

textual
Листинг программы
  1. 'Option Explicit используется в самом верху модуля.
  2. 'Option Explicit заставляет объявлять все переменные и константы.
  3. 'Это нужно, чтобы не допускать ошибки в именах переменных и констант.
  4. Option Explicit
  5.  
  6. Sub Выбор_файла()
  7.  
  8.     'Перед переменными и константами лучше добавлять префикс,
  9.    'чтобы имя переменной или константы не совпало с зарезирвированным словом.
  10.    'Я добавляю префикс в зависимости от типа данных.
  11.    'В данном случае добавил префикс "s".    
  12.    Dim sFilePath As String
  13.     Dim sFileName As String
  14.     Dim sFormula As String
  15.    
  16.     sFilePath = GetFilePath
  17.    
  18.     If sFilePath = "" Then Exit Sub
  19.    
  20.     MsgBox sFilePath
  21.  
  22.     'Получаем имя книги.
  23.    sFileName = Mid(sFilePath, InStrRev(sFilePath, "\") + 1)
  24.    
  25.     'Получаем путь к книге.
  26.    sFilePath = Mid(sFilePath, 1, InStrRev(sFilePath, "\"))
  27.    
  28.     'Формируем общую часть для всех формул.
  29.    sFormula = "='" & sFilePath & "[" & sFileName & "]Анализ'!"
  30.    
  31.     Range("D10").FormulaR1C1 = sFormula & "R11C4"
  32.     Range("D11").FormulaR1C1 = sFormula & "R12C4"
  33.  
  34. End Sub
  35.  
  36. Public Function GetFilePath() As String
  37.    
  38.     Const sTitle As String = "Выберите файл КДРО"
  39.     Const sInitialPath As String = "c:\"
  40.     Const sFilterDescription As String = "Книги Excel"
  41.     Const sFilterExtention As String = "*.xls*"
  42.    
  43.     With Application.FileDialog(msoFileDialogOpen)
  44.         .ButtonName = "Выбрать": .Title = sTitle: .InitialFileName = sInitialPath
  45.         .Filters.Clear: .Filters.Add sFilterDescription, sFilterExtention
  46.        
  47.         If .Show = 0 Then Exit Function
  48.        
  49.         GetFilePath = .SelectedItems(1)
  50.        
  51.     End With
  52.    
  53. End Function

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.6 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы