Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
54 / 39 / 3
Регистрация: 25.01.2013
Сообщений: 368
1

Чтение и запись данных с имен

18.12.2014, 14:58. Показов 819. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый вечер!
Почему при присвоении имени диапазона листа значение и формулы посредством FormulaLocal, при чтении RefersToLocal и RefersTo возвращает ошибку?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.12.2014, 14:58
Ответы с готовыми решениями:

Чтение файла, чтение названия папки где находится файл, запись данных на PHP
Допустим у нас есть структура с папками типа Large -> Vehicles -> Firetruck_0 В этой папке лежит...

Open/Save Dialog. Сериализация данных. Запись/чтение данных объектов в/из потока.
Описана файловая переменная FileOfFilms: file of TFilmArr и переменная, содержащая имя файла...

Чтение текстового файла. Парсинг его данных. Создание исключений для данных. Запись свойств объектов в файл
Проблема такая. Есть файл data.txt. В нем например какие-то данные. Landon Donovan, 150, A...

Чтение и запись данных
Здравствуйте, я записываю данные в файл (длинный код): vsevolod-s10.hut4.ru\открытия.txt И читаю я...

4
5606 / 1592 / 412
Регистрация: 23.12.2010
Сообщений: 2,382
Записей в блоге: 1
18.12.2014, 16:35 2
Если полььзоваться примером из Справки ошибок не возникает.
Visual Basic
1
2
3
4
5
6
7
8
9
10
Sub dd()
    Dim NewSheet, i, nm
    Set NewSheet = ActiveWorkbook.Worksheets.Add
    i = 1
    For Each nm In ActiveWorkbook.Names
        NewSheet.Cells(i, 1).Value = nm.NameLocal
        NewSheet.Cells(i, 2).Value = "'" & nm.RefersToLocal
        i = i + 1
    Next
End Sub
Добавлено через 5 минут
А вот обращение к данным именнованого диапазона можно делать как к обычному Range.
[Имя1].Cells(1,2)
либо брать все данные целиком в массив
Visual Basic
1
2
Dim A
A= [Имя1].Value
0
54 / 39 / 3
Регистрация: 25.01.2013
Сообщений: 368
19.12.2014, 08:36  [ТС] 3
KoGG, спасибо, но мне нужно выгрузить и загрузить формулы
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
Private Sub ExportFormulasВПР()
    Dim iList  As Worksheet
    Dim iSource As Range, iCell As Range
    With Application
        .EnableCancelKey = xlDisabled
        .ScreenUpdating = False
        .DisplayAlerts = False
        .EnableEvents = False
        .Calculation = xlManual
        For Each iList In ActiveWorkbook.Worksheets
            If iList.ProtectContents = True Then
                MsgBox "Рабочий лист " & iList.Name & " защищён ", vbCritical, "Ошибка пользователя !!!"
                Exit Sub
            End If
            On Error Resume Next
            '        On Error GoTo ErrHandler
            Set iSource = iList.UsedRange.SpecialCells(xlFormulas)
            sh1 = iList.Name: If InStr(1, sh1, " ", vbTextCompare) > 0 Then sh1 = Replace(sh1, " ", "")
            For Each iCell In iSource
                If InStr(1, iCell.Formula, "ВПР") > 1 Then
                    ff = Application.ConvertFormula(Formula:=iCell.Address, FromReferenceStyle:=xlA1, _
                            ToReferenceStyle:=xlA1, ToAbsolute:=xlRelative)
                    SaveValue iList, "ИмяПерем" & sh1 & "_" & ff, iCell.FormulaLocal
                    iCell.Value = iCell.Value
                    '                SaveValue iList, "ИмяПерем" & sh1 & "_" & ff, iCell.Formula
                End If
            Next
            '        For Each n In iList.Names
            '            If InStr(1, GetValue(iList, n.Name), "ВПР") > 1 Then
            '                iList.Range(Split(n.Name, "_")(1)) = iList.Evaluate(GetValue(iList, n.Name))
            '            End If
            '        Next
            'ErrHandler:
            '        If Err.Number <> 0 Then
            '            MsgBox Err.Description, vbCritical, Err.Number
            '        End If
        Next
        .Calculation = xlAutomatic
        .EnableEvents = True
        .DisplayAlerts = True
        .ScreenUpdating = True
        .EnableCancelKey = xlInterrupt
    End With
End Sub
Private Sub ImportFormulasВПР()
    Dim iList  As Worksheet
    With Application
        .EnableCancelKey = xlDisabled
        .ScreenUpdating = False
        .DisplayAlerts = False
        .EnableEvents = False
        .Calculation = xlManual
        For Each iList In ActiveWorkbook.Worksheets
            If iList.ProtectContents = True Then
                MsgBox "Рабочий лист " & iList.Name & " защищён ", vbCritical, "Ошибка пользователя !!!"
                Exit Sub
            End If
            For Each n In iList.Names
                If InStr(1, GetValue(iList, n.Name), "ВПР") > 1 Then
                    iList.Range(Split(n.Name, "_")(1)) = GetValue(iList, n.Name)
                End If
            Next
        Next
        .Calculation = xlAutomatic
        .EnableEvents = True
        .DisplayAlerts = True
        .ScreenUpdating = True
        .EnableCancelKey = xlInterrupt
    End With
End Sub
Private Sub SaveValue(ByRef sh As Worksheet, ByVal Parameter As String, ByVal NewValue As String)
    ' создаёт в книге WB скрытое имя Parameter со значением NewValue
    Dim n      As Name: On Error Resume Next: Err.Clear
    NewValue = "#" & NewValue & "#"
    sh.Names(Parameter).RefersTo = NewValue
    If Err Then sh.Names.Add Parameter, NewValue
    sh.Names(Parameter).Visible = False
End Sub
Private Function GetValue(ByRef sh As Worksheet, ByVal Parameter As String) As String
    ' возвращает ранее сохранённое значение в скрытом свойстве книги
    On Error Resume Next
    GetValue = sh.Names(Parameter).RefersTo
    GetValue = Split(GetValue, "#")(1)
'    If InStr(1, GetValue, "ЕСЛИ", 1) > 1 Then
'        GetValue = Replace(GetValue, "ЕСЛИ", "IF")
'        GetValue = Replace(GetValue, "ДЛСТР", "LEN")
'    End If
End Function
но когда происходит загрузка локальной формулы, возникает ошибка
сама формула =ВПР2(Протокол;13;2;$C$144;3;3;C50;ЕСЛИ(ДЛСТР(C50)<=2;2;3);4;F50;0)
0
5606 / 1592 / 412
Регистрация: 23.12.2010
Сообщений: 2,382
Записей в блоге: 1
23.12.2014, 13:44 4
Строка 60 , процедура ImportFormulasВПР
Visual Basic
1
iList.Range(Split(n.Name, "_")(1)).FormulaLocal = GetValue(iList, n.Name)
Что за объектный аргумент Протокол непонятно.
1
54 / 39 / 3
Регистрация: 25.01.2013
Сообщений: 368
25.12.2014, 10:11  [ТС] 5
Цитата Сообщение от KoGG Посмотреть сообщение
Что за объектный аргумент Протокол непонятно.
да, именованный диапазон ячеек
0
25.12.2014, 10:11
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.12.2014, 10:11
Помогаю со студенческими работами здесь

Чтение данных из Excel и их запись в БД
Привет всем! Как реализовать чтение данных из Excel и их последующую запись в существующую...

Чтение и запись бинарных данных
Здравствуйте! Хочу реализовать чтение из файла скорей всего в коллекцию BitArray. После этого...

Запись и чтение данных из БД Access
Подскажите код для простой базы данных. Есть форма. На ней DataGreedView с подключенным файлом...

Чтение и запись данных в файл
Срочно нужна программа Заданы два файла an_1.DAT и an_2.DAT напишите программу которая дописывает...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru