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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.08.2021, 09:11   #1
Iskin
Форумчанин
 
Регистрация: 22.09.2008
Сообщений: 307
По умолчанию Оператор Option Explicit перенос на другую книгу

Здравствуйте всем!
Есть:
Код:
Option Explicit
Sub DoSomething()
    Dim iLastRow As Integer
    Dim i As Integer
    Dim sA As String, sB As String
    Dim dict  As Scripting.Dictionary
    Set dict = New Scripting.Dictionary
    iLastRow = [A100].End(xlUp).Row
    For i = 3 To iLastRow
        sA = Cells(i, "A").Value2
        sB = Cells(i, "B").Value2
        If Not dict.exists(sB) Then
            dict.Add sB, sA
        Else
            dict(sB) = dict(sB) & "* " & sA
        End If
    Next i
    For i = 0 To dict.Count - 1
        Cells(i + 3, "f") = i
        Cells(i + 3, "g") = dict.Keys(i)
        Cells(i + 3, "h") = dict.Items(i)
    Next i
End Sub
Но при переносе на другую книгу, где есть и другие макросы. Почему-то код не работает. Помогите исправить плиз
Думайте глобально - действуйте локально!
Iskin вне форума Ответить с цитированием
Старый 06.08.2021, 21:19   #2
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

уберите от сюда Option Explicit
проверяйте как работает ваш код. ничего не поменялось?

есть желание скопировать код в другую книгу? - вот именно код и копируйте
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 09.08.2021, 06:58   #3
Iskin
Форумчанин
 
Регистрация: 22.09.2008
Сообщений: 307
По умолчанию

я так пробовал, жалуется на:
Код:
 Dim dict  As Scripting.Dictionary
Думайте глобально - действуйте локально!
Iskin вне форума Ответить с цитированием
Старый 09.08.2021, 10:02   #4
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Есть три варианта.
1. Чтобы использовать раннее связывание, необходимо подключить в редакторе VBA ссылку на библиотеку Microsoft Scripting Runtime.
2. До объявления словаря при раннем связывании подключить эту библиотеку с помощью кода:
Код:
Sub VBProject_References()
    Dim i As Integer, Fname As String
    Fname = Environ("WinDir") & "\System32\Scrrun.dll"
    If Dir(Fname) <> "" Then
        With ThisWorkbook.VBProject.References
            For i = 1 To .Count
                If .Item(i).FullPath = Fname Then Exit Sub
            Next
            .AddFromFile Filename:=Fname
        End With
    End If
End Sub
3. Использовать позднее связывание. Т.е. так:
Код:
Dim dict As Object
Set dict = CreateObject("Scripting.Dictionary")
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 10.08.2021, 11:09   #5
Iskin
Форумчанин
 
Регистрация: 22.09.2008
Сообщений: 307
По умолчанию

1 вариант, понятен и работает, уже спасибо! Заинтересовал 2 вариант. Поставил код на открытие книги, жалуется на:
Код:
With ThisWorkbook.VBProject.References
3-й вариант не понял куда именно вставлять в ранее предложенный код )
Думайте глобально - действуйте локально!
Iskin вне форума Ответить с цитированием
Старый 10.08.2021, 20:15   #6
Elixi
Форумчанин
 
Регистрация: 10.05.2019
Сообщений: 163
По умолчанию

Цитата:
Сообщение от Iskin Посмотреть сообщение
3-й вариант не понял куда именно вставлять в ранее предложенный код )
Код:
Sub DoSomething()
    Dim iLastRow As Integer
    Dim i As Integer
    Dim sA As String, sB As String
'    Dim dict  As Scripting.Dictionary
'    Set dict = New Scripting.Dictionary
    Dim dict As Object
    Set dict = CreateObject("Scripting.Dictionary")
    iLastRow = [A100].End(xlUp).Row
    For i = 3 To iLastRow
        sA = Cells(i, "A").Value2
        sB = Cells(i, "B").Value2
        If Not dict.exists(sB) Then
            dict.Add sB, sA
        Else
            dict(sB) = dict(sB) & "* " & sA
        End If
    Next i
    For i = 0 To dict.Count - 1
        Cells(i + 3, "f") = i
        Cells(i + 3, "g") = dict.Keys()(i)
        Cells(i + 3, "h") = dict.Items()(i)
    Next i
End Sub
Elixi вне форума Ответить с цитированием
Старый 11.08.2021, 07:09   #7
Iskin
Форумчанин
 
Регистрация: 22.09.2008
Сообщений: 307
По умолчанию

код открывает ту старую книгу. файл переименовал, теперь программа пишет не нашел "ту старую книгу" )
Думайте глобально - действуйте локально!
Iskin вне форума Ответить с цитированием
Старый 11.08.2021, 11:18   #8
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Цитата:
Сообщение от Iskin Посмотреть сообщение
жалуется на:
Код:
With ThisWorkbook.VBProject.References
Откройте Excel и найдите:
Файл -> Параметры -> Центр управления безопасностью -> Параметры центра управления безопасностью -> Параметры макросов.
Поставьте птичку "Доверять доступ к объектной модели проектов VBA".
После этого Excel перестанет ругаться.

P.S. О какой "той старой книге" идет речь?
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 11.08.2021, 11:50   #9
Iskin
Форумчанин
 
Регистрация: 22.09.2008
Сообщений: 307
По умолчанию

"той старой книге" - книга, где лежит исходник.
Поставьте птичку "Доверять доступ к объектной модели проектов VBA". - сделал. Ситуация такая же
Цитата:
Сообщение от Iskin Посмотреть сообщение
код открывает ту старую книгу.
Думайте глобально - действуйте локально!
Iskin вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выборка данных и их перенос в другую книгу xaker_sokol Microsoft Office Excel 3 27.10.2015 23:17
Перенос данных из форма в другую книгу Alex-sib Microsoft Office Excel 1 06.03.2012 18:10
Перенос/копирование макроса в другую книгу Olper Microsoft Office Excel 7 21.12.2011 17:34
Перенос данных в другую книгу при нажатии кнопки ElenaKorneva Microsoft Office Excel 7 12.04.2010 12:01
Перемещение листа в другую книгу GWolf Microsoft Office Excel 4 04.03.2009 14:53