powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / dll-библиотеки, копии книг
44 сообщений из 44, показаны все 2 страниц
dll-библиотеки, копии книг
    #34847914
nPUBET
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
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.
Sub TOMAT()
Sheets("Kyda").Activate
Range("A5:AA1000").ClearContents
    Dim cnn As ADODB.Connection
    Dim rst As ADODB.Recordset
    
    Set cnn = New ADODB.Connection
    Set rst = New ADODB.Recordset
    Dim ishFile As String
    
    ishFile = Range("B3").Value
    cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
      "Data Source=" & ishFile & ";" & _
      "Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"""
    
    rst.Open "SELECT * FROM [ucx$A1:aa1000]", cnn
    
    Range("A6").CopyFromRecordset rst
    
    rst.Close
    cnn.Close
    
    Set rst = Nothing
    Set cnn = Nothing

End Sub

По этому алгоритму копирую данные с одной книги в другую.
Только вот в книгу =Kyda= переходят только значения с зелёными треугольниками в верхнем левом углу (но без форматирования).
Подскажите, пожалуйста, как скопировать сразу и значения, и цвета ячеек, и рамки ячеек в одной связке?

И как автоматически подключать библиотеки из =References= при открытии книги (см. рис.)?
...примерно так:
Код: plaintext
1.
2.
3.
Private Sub Worksheet_Activate()
Microsoft DAO  3 . 6  Object Library. Installed=True '  'как правильно?
Microsoft ActiveX Data Objects Library. Installed=True  'как правильно?
End Sub
...
Рейтинг: 0 / 0
dll-библиотеки, копии книг
    #34847920
nPUBET
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот файл =Kyda= (куда копирую данные)...
...
Рейтинг: 0 / 0
dll-библиотеки, копии книг
    #34847921
nPUBET
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
здесь таблица, откуда беру данные ...
...
Рейтинг: 0 / 0
dll-библиотеки, копии книг
    #34848641
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По первому вопросу: С помощью технологий ADO или DAO копирование с форматами невозможно
надо так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Sub TOMAT2()
    Dim xlWb As Workbook
    Dim rng As Range
    Dim ishFile As String

    Range("A5:AA1000").ClearContents
    ishFile = ThisWorkbook.Path & Range("B3").Value
    Application.ScreenUpdating = False
    Set xlWb = Workbooks.Open(ishFile, , True)
    Set rng = xlWb.Worksheets("ucx").Range("A1:AA1000")
    
    rng.Copy Destination:=ThisWorkbook.Worksheets("Kyda").Range("A6")
    
    Set rng = Nothing
    xlWb.Close
    Set xlWb = Nothing
    Application.ScreenUpdating = True
End Sub
что касается ссылок
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Sub mReferens()
    Dim ref As Object 'или  Reference но тогда нужно подключить "Microsoft Visual Basic for Applications Extensibility 5.3"
    Dim msg As String
    For Each ref In ActiveWorkbook.VBProject.References
        msg = msg & ref.Name & vbCrLf
        msg = msg & ref.Description & vbCrLf
        msg = msg & ref.fullpath & vbCrLf
    Next
    MsgBox msg
End Sub
...
Рейтинг: 0 / 0
dll-библиотеки, копии книг
    #34848668
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вместо
Код: plaintext
Range("A5:AA1000").ClearContents
надо
Код: plaintext
Range("A5:AA1000").Clear
...
Рейтинг: 0 / 0
dll-библиотеки, копии книг
    #34848985
nPUBET
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkodorвместо
Код: plaintext
Range("A5:AA1000").ClearContents
надо
Код: plaintext
Range("A5:AA1000").Clear


Большое спасибо!
Изучаю...
...
Рейтинг: 0 / 0
dll-библиотеки, копии книг
    #34849444
nPUBET
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Когда запускаю =TOMAT2=, появляется сообщение „Сохранить изменения в =ADO_10_TOMAT.xls=?“, т.е. в файле, откуда копируются данные.

Как сделать, чтобы не появлялось это сообщение?
И как удалять в листе =Kyda= все элементы управления (CheckBox, OptionBox и т.д.), кроме =CommandButton=? Т.е. кнопки оставляю, а всё остальное убираю.
...
Рейтинг: 0 / 0
dll-библиотеки, копии книг
    #34849466
nPUBET
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Когда запускаю =TOMAT2=, появляется сообщение „Сохранить изменения в =ADO_10_TOMAT.xls=?“, т.е. в файле, откуда копируются данные.

Как сделать, чтобы не появлялось это сообщение?
И как удалять (с помощью VBA) в листе =Kyda= все элементы управления (CheckBox, OptionBox и т.д.), кроме =CommandButton=? Т.е. кнопки оставляю, а всё остальное убираю.
...вручную могу удалять, программно не знаю, как...
...
Рейтинг: 0 / 0
dll-библиотеки, копии книг
    #34849718
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для того чтобы не задавал вопросы поставь
Код: plaintext
xlWb.Close False
для удаления
Код: plaintext
1.
2.
3.
    Dim oble As OLEObject
    For Each oble In Sheets("Kyda").OLEObjects
        If TypeName(oble.Object) <> "CommandButton" Then oble.Delete
    Next
...
Рейтинг: 0 / 0
dll-библиотеки, копии книг
    #34849747
nPUBET
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkodorдля того чтобы не задавал вопросы поставь
Код: plaintext
xlWb.Close False
для удаления
Код: plaintext
1.
2.
3.
    Dim oble As OLEObject
    For Each oble In Sheets("Kyda").OLEObjects
        If TypeName(oble.Object) <> "CommandButton" Then oble.Delete
    Next


Спасибо! Работает
...
Рейтинг: 0 / 0
dll-библиотеки, копии книг
    #34850939
nPUBET
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
связал некоторые ячейки файла =ADO_10_TOMAT.xls=, откуда копирую, с ячейками другого файла при помощи функции ВПР.
Запускаю =Sub TOMAT2()=, в листе =Kyda= в некоторых ячейках появляется ошибка = #ССЫЛ!= (как раз в тех ячейках, в которых стоят формулы в листе =ucx=, а не значения), т.е. значения ВПР из =ucx= в =Kyda= не копируются, а переходят формулы.

Подскажите, пожалуйста, как скопировать значения без формул, но со всеми остальными форматами (рамки, цвет шрифта и ячеек).

Пытался так, не выходит:
Код: plaintext
1.
2.
    Set xlWb = Workbooks.Open(ishFile, , True)
    Set rng = xlWb.Worksheets("ucx").Range("A1:AA1000")    ' .SpecialCells(xlCellValue)
...
Рейтинг: 0 / 0
dll-библиотеки, копии книг
    #34850995
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
    rng.Copy
    ThisWorkbook.Worksheets("Kyda").Range("A6").PasteSpecial xlPasteValues
    ThisWorkbook.Worksheets("Kyda").Range("A6").PasteSpecial xlPasteFormats
    Application.CutCopyMode = False
...
Рейтинг: 0 / 0
dll-библиотеки, копии книг
    #34851044
nPUBET
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkodor
Код: plaintext
1.
2.
    rng.Copy
   ...
    Application.CutCopyMode = False


Спасибо!
Получается...
...
Рейтинг: 0 / 0
dll-библиотеки, копии книг
    #34851077
nPUBET
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Перед копированием вылетает окно с запроcом:
"Нужно ли пересчитать цифры заново в файле =ADO_10_TOMAT.xls=?".
...ставлю постоянно "Нет".

Подскажите, пожалуйста, как подавлять этот запрос, т.е. копировать без запросов на обновление данных?
..примерно так же как с =Close= только для оператора =Copy=:
Код: plaintext
1.
2.
xlWb.Close False
' rng.Copy False
...
Рейтинг: 0 / 0
dll-библиотеки, копии книг
    #34851211
nPUBET
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
После копирования значения выходят, как-то странно (см. рис.).
...значение =D5= на листе показываются как иероглифы, а, где окно функция - символ какой-то буквой плюс понятный текст.
Как это форматировать (чтобы и символ и текст отображались правильно)?
...
Рейтинг: 0 / 0
dll-библиотеки, копии книг
    #34853034
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nPUBETПеред копированием вылетает окно с запроcом:
"Нужно ли пересчитать цифры заново в файле =ADO_10_TOMAT.xls=?".
...ставлю постоянно "Нет".

Подскажите, пожалуйста, как подавлять этот запрос, т.е. копировать без запросов на обновление данных?
..примерно так же как с =Close= только для оператора =Copy=:
Код: plaintext
1.
2.
xlWb.Close False
' rng.Copy False

вот эта строка
Код: plaintext
Application.CutCopyMode = False
очищает буфер
поставь её перед копированием
...
Рейтинг: 0 / 0
dll-библиотеки, копии книг
    #34853065
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nPUBETПосле копирования значения выходят, как-то странно (см. рис.).
...значение =D5= на листе показываются как иероглифы, а, где окно функция - символ какой-то буквой плюс понятный текст.
Как это форматировать (чтобы и символ и текст отображались правильно)?
Формат лучше всего текстовый.
1. Попробуй поменять шрифт.
2. Попробуй запускать макрос при русской раскладке на клавиатуре.
...
Рейтинг: 0 / 0
dll-библиотеки, копии книг
    #34853438
nPUBET
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkodor...вот эта строка
Код: plaintext
Application.CutCopyMode = False
очищает буфер
поставь её перед копированием
Спасибо!
Поставил вот так.
Код: plaintext
1.
2.
Set rng = xlWb.Worksheets("ucx").UsedRange
Application.CutCopyMode = False
rng.Copy Destination:=ThisWorkbook.Worksheets("Kyda").Range("A1")
Всё равно вылетает окно:
- запускаю макрос;
- появляется окно запроса: "Файл содержит ссылки на другие файлы, обновить данные или нет, ставлю "Нет";
- появляется окно сохранения файла;
- выбираю "Отменить" сохранение;
- потом начинается копирование (у меня там Чекбох, так вот этот элемент управления начинает мигать примерно 10 раз).

Кстати, этот запрос на обновление данных появляется 1-й раз при открытии файла =Кyda=, во 2-ой раз при запуске макроса в файле =Kyda=.

По иероглифам: с текстовым форматом и изменением раскладки тоже не получется (файл приложил).
...
Рейтинг: 0 / 0
dll-библиотеки, копии книг
    #34853575
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ааа!!! обновление.
если надо не обновлять то второй аргумент - False
Код: plaintext
Set xlWb = Workbooks.Open(ishFile, False, True)
...
Рейтинг: 0 / 0
dll-библиотеки, копии книг
    #34853605
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nPUBETПосле копирования значения выходят, как-то странно (см. рис.).
...значение =D5= на листе показываются как иероглифы, а, где окно функция - символ какой-то буквой плюс понятный текст.
Как это форматировать (чтобы и символ и текст отображались правильно)?
Мне не удается воспроизвести такое поведение на своём компе (извини)
попробуй перед символом Ø поставить апостроф (')
...
Рейтинг: 0 / 0
dll-библиотеки, копии книг
    #34853713
nPUBET
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkodor nPUBETПосле копирования значения выходят, как-то странно (см. рис.).
...значение =D5= на листе показываются как иероглифы, а, где окно функция - символ какой-то буквой плюс понятный текст.
Как это форматировать (чтобы и символ и текст отображались правильно)?
Мне не удается воспроизвести такое поведение на своём компе (извини)
попробуй перед символом Ø поставить апостроф (')
Запрос на обновление не появляется, вылетает только окно на сохранение (обновлённых данных). ...это окно сохранения пока не так важно, важны эти китайские иероглифы..
Поставил так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
 
Set xlWb = Workbooks.Open(ishFile, False, True)

    Set rng = xlWb.Worksheets("ucx").Range("A1:AA1000")
    '********
          
    rng.Copy
    ThisWorkbook.Worksheets("Kyda").Range("A1").PasteSpecial xlPasteValues
    ThisWorkbook.Worksheets("Kyda").Range("A1").PasteSpecial xlPasteFormats
    Application.CutCopyMode = False
    '********
        
    '********  Этот шаг не получается
    Dim rngB As Range
    Set rngB = xlWb.Worksheets("ucx").Range("C:C")
    rng.Copy
    ThisWorkbook.Worksheets("Kyda").Range("C1").PasteSpecial xlPasteAll
    Set rngB = Nothing
    '*****  Этот шаг не получается
    Set rng = Nothing
    xlWb.Close False
    Set xlWb = Nothing

Пока так:
- копирую по =xlPasteValues=, =xlPasteFormats=;
- вставляю;
- копирую 3-ий столбец в листе =ucx= с формулами (=xlPasteAll=);
- тут барьер:
*3-ий столбец в листе =Кyda= удаляется,
*в листе =Кyda= 3-ий столбец стоит пустым.


Пытаюсь обойти иероглифы следующим образом:


1. Копирую лист без формул =ucx= в лист =Kyda= (по xlPasteValues, xlPasteFormats) - здесь без проблем,

2. Копирую в листе =ucx= 3-ий столбец и ячейку =Т3= с формулами, т.е. со всеми форматами (формулы, значения - всё равно нужно скопировать текст), накладываю 3-ий столбец (плюс ячейка =Т3=) с формулами на 3-ий столбец (+ =T3=) без формул. Этот шаг не получается ,

3. В листе =Кyda= 3-ий столбец и ячейка =Т3= имеют все форматы из листа =ucx=, все остальные столбцы и ячейки в листе =Kyda= содержат только значения и рамки из листа =ucx=.
...
Рейтинг: 0 / 0
dll-библиотеки, копии книг
    #34853810
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
        
    '********  Этот шаг не получается
    Dim rngB As Range
    Set rngB = xlWb.Worksheets("ucx").Range("C:C")
    rng.Copy
    ThisWorkbook.Worksheets("Kyda").Range("C1").PasteSpecial xlPasteAll
    Set rngB = Nothing
    '*****  Этот шаг не получается
Ты наверно хотел не rng.Copy а rngB.Copy
...
Рейтинг: 0 / 0
dll-библиотеки, копии книг
    #34853856
nPUBET
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkodor
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
        
    '********  Этот шаг не получается
    Dim rngB As Range
    Set rngB = xlWb.Worksheets("ucx").Range("C:C")
    rng.Copy
    ThisWorkbook.Worksheets("Kyda").Range("C1").PasteSpecial xlPasteAll
    Set rngB = Nothing
    '*****    Этот шаг не получается
Ты наверно хотел не rng.Copy а rngB.Copy

Да, rngB.Copy.
Т.е. в =rngB= помещаю 3-ий столбец из =ucx=. А где ошибка?
...
Рейтинг: 0 / 0
dll-библиотеки, копии книг
    #34853872
nPUBET
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
        
    '********  Этот шаг теперь получается
    Dim rngB As Range
    Set rngB = xlWb.Worksheets("ucx").Range("C:C")

    rngB.Copy  ' <==

    ThisWorkbook.Worksheets("Kyda").Range("C1").PasteSpecial xlPasteAll
    Set rngB = Nothing
    '*****  Этот шаг теперь получается
...
Рейтинг: 0 / 0
dll-библиотеки, копии книг
    #34853948
nPUBET
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
     
    rng.Copy
    ThisWorkbook.Worksheets("Kyda").Range("A1").PasteSpecial xlPasteValues
    ThisWorkbook.Worksheets("Kyda").Range("A1").PasteSpecial xlPasteFormats
    Application.CutCopyMode = False
    '********
    Dim rngB As Range
    Set rngB = xlWb.Worksheets("ucx").Range("C:C")
    rngB.Copy
    ThisWorkbook.Worksheets("Kyda").Range("C1").PasteSpecial xlPasteAll
    Set rngB = Nothing
    '********

    Set rng = Nothing
    xlWb.Close False
    Set xlWb = Nothing
    Range("A1").Select  ' т.к. после выполнения макроса вся таблица остается выделенной
    Application.ScreenUpdating = True
    mReferens
End Sub

Хотя стоят =Nothing=, перед запуском алгоритма появляется сообщение:
"У Вас в буфере куча информации. Хотите вставить эти данные где-нибудь?"

Как сделать, чтобы это сообщение не появлялось?
...
Рейтинг: 0 / 0
dll-библиотеки, копии книг
    #34854011
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nPUBET
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
     
    rng.Copy
    ThisWorkbook.Worksheets("Kyda").Range("A1").PasteSpecial xlPasteValues
    ThisWorkbook.Worksheets("Kyda").Range("A1").PasteSpecial xlPasteFormats
    Application.CutCopyMode = False
    '********
    Dim rngB As Range
    Set rngB = xlWb.Worksheets("ucx").Range("C:C")
    rngB.Copy
    ThisWorkbook.Worksheets("Kyda").Range("C1").PasteSpecial xlPasteAll
    Application.CutCopyMode = False ' очистка буфера
    Set rngB = Nothing
    '********

    Set rng = Nothing
    xlWb.Close False
    Set xlWb = Nothing
    ThisWorkbook.Worksheets("Kyda").Range("A1").Select  ' т.к. после выполнения макроса вся таблица остается выделенной
    Application.ScreenUpdating = True
    mReferens
End Sub

Хотя стоят =Nothing=, перед запуском алгоритма появляется сообщение:
"У Вас в буфере куча информации. Хотите вставить эти данные где-нибудь?"

Как сделать, чтобы это сообщение не появлялось?

смотри строку
Application.CutCopyMode = False ' очистка буфера
...
Рейтинг: 0 / 0
dll-библиотеки, копии книг
    #34854049
nPUBET
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkodor...
смотри строку
Application.CutCopyMode = False ' очистка буфера
Большое спасибо!
...думаю, мне нужно для надёжности:
после каждого =PasteSpecial= или =rng.Copy Destination:=ThisWorkbook.Worksheets...=,
всегда ставить в следующей строке такое выражение:

Код: plaintext
Application.CutCopyMode = False
...
Рейтинг: 0 / 0
dll-библиотеки, копии книг
    #34854516
nPUBET
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
    With Button
        .Caption = "Сохранить все книги"
        .Style = msoButtonIcon
        .OnAction = "SaveBook1" & "SaveBook2"  '  здесь ошибка
       ' .OnAction = "SaveBook1", "SaveBook2"  '  здесь ошибка
    End With

Подскажите, пожалуйста, как сделать, чтобы при нажатии кнопки "Сохранить все книги" запускались 2 макроса поочерёдно.
Т.е хотел бы прикрепить к =.OnAction= названия 2-х макросов.
...
Рейтинг: 0 / 0
dll-библиотеки, копии книг
    #34854719
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nPUBET
Код: plaintext
1.
2.
3.
4.
5.
    With Button
        .Caption = "Сохранить все книги"
        .Style = msoButtonIcon
        .OnAction = "SaveBook1" & "SaveBook2"  '  здесь ошибка
       ' .OnAction = "SaveBook1", "SaveBook2"  '  здесь ошибка
    End With

Подскажите, пожалуйста, как сделать, чтобы при нажатии кнопки "Сохранить все книги" запускались 2 макроса поочерёдно.
Т.е хотел бы прикрепить к =.OnAction= названия 2-х макросов.
Так не получится.
сделай макрос который будет запускать твои два
Код: plaintext
1.
2.
3.
Sub temp()
    Application.Run "Module1.SaveBook1"
    Application.Run "Module1.SaveBook2"
End Sub
а кнопке присвой этот созданный макрос
Код: plaintext
.OnAction "temp"
...
Рейтинг: 0 / 0
dll-библиотеки, копии книг
    #34854888
nPUBET
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkodor
....Так не получится.
сделай макрос который будет запускать твои два
Код: plaintext
1.
2.
3.
Sub temp()
    Application.Run "Module1.SaveBook1"
    Application.Run "Module1.SaveBook2"
End Sub
а кнопке присвой этот созданный макрос
Код: plaintext
.OnAction "temp"

Большое спасибо!

Работает...
...
Рейтинг: 0 / 0
dll-библиотеки, копии книг
    #34861093
nPUBET
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
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.
Sub TOMAT452()
 Application.ScreenUpdating = False
 
    Dim xlWb As Workbook
    Dim rng As Range
    Dim ishFile As String
    Sheets("452").Activate
    '********
    ishFile = ThisWorkbook.Path & ActiveWorkbook.Sheets("A3").Range("B1").Value
    Set xlWb = Workbooks.Open(ishFile, False, True)
    Set rng = xlWb.Worksheets("452").Range("D1:D10")
    
    '***************************************************
'     Dim iPT As Long
'     Dim iNo As Long
'
'        iKOT = rng.Range("1:1").Find("KOT", LookIn:=xlFormulas, LookAt:= _
'        xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=True).Column
'
'        iCH = rng.Range("1:1").Find("OC-H", LookIn:=xlFormulas, LookAt:= _
'        xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=True).Column
    
    
    '********
    rng.Copy
    ThisWorkbook.Worksheets("452").Range("N11").PasteSpecial xlPasteValues
    
    Application.CutCopyMode = False
    '********
    
    Set rng = Nothing
    xlWb.Close False
    Set xlWb = Nothing

    '*******
    Range("A1").Select
    
    Application.ScreenUpdating = True
    mReferens
End Sub

Пытаюсь соорудить следующее:
1. Иду в файл =452.xls=
2. Иду в 1-ую строку. Ищу столбцы с названиями "KOT и "OC-H".
3. Присваиваю им номера iKOT и iOC.
4. Перехожу в файл =Кyda.xls=.
5. Иду в строку, в которой с 1-го столбца по 5-й столбец есть текст.
6. Ищу в найденной строке названия столбцa =ABTO=.
7. Присваиваю ему номер iABT.
8. Если значение в столбце iOC равно значению в столбце iABT, тогда копирую значение iKOT
9. перехожу в файл =Kyda.xls=, лист =452= и вставляю скопированную ячейку в столбец N, начиная с N11 (т.е. в ту строку, где значения в столбцах iOC, iABT одинаковые).
10. если в столбце iKOT значение ячейки пустое (или равно 0), тогда эту строку в файле =452.xls= не сравниваю, не копирую, т.е. прохожу мимо, игнорирую.

Подскажите, пожалуйста, как это построить.
...
Рейтинг: 0 / 0
dll-библиотеки, копии книг
    #34861101
nPUBET
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот файл, откуда копирую ячейки.
...
Рейтинг: 0 / 0
dll-библиотеки, копии книг
    #34862318
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
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.
89.
90.
91.
92.
93.
94.
95.
Sub TOMAT452()
    Dim xlWb As Workbook
    Dim rng As Range
    Dim ishFile As String
     Dim iKOT As Long
     Dim iOC As Long
     Dim iABT As Long
    Dim nSh As String
    Dim i As Long
    'для отмены мелькания на экране
    Application.ScreenUpdating = False
'    Sheets("452").Activate
    '********
    'берем название обрабатываемого листа с ячейки "B1" листа "A3" этой книги
    nSh = CStr(ThisWorkbook.Sheets("A3").Range("B1").Value)
    'берем название файла с ячейки "B1" листа "A3" _
    (т.к. мы установили в ячейке нужный формат и храним в значение только название без расширения то надо брать text)
    ishFile = ThisWorkbook.Path & ThisWorkbook.Sheets("A3").Range("B1").Text
    'проверка существования файла
    If Dir(ishFile, vbNormal) = "" Then
        MsgBox "Проверьте путь и файл"
        Exit Sub
    End If
    'открытие файла
    Set xlWb = Workbooks.Open(ishFile, False, True)
    ' поиск столбца "KOT"
    Set rng = xlWb.Worksheets(CStr(ThisWorkbook.Sheets("A3").Range("B1"))).Cells.Find( _
        "KOT", LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByRows, _
        SearchDirection:=xlNext, MatchCase:=True)
    If rng Is Nothing Then
        Set rng = Nothing
        xlWb.Close
        Set xlWb = Nothing
        MsgBox "Не найден столбец ""KOT""", vbCritical, "Проверка"
        Exit Sub
    Else
        iKOT = rng.Column
    End If
    ' поиск столбца "OC-H"
    Set rng = xlWb.Worksheets( 1 ).Cells.Find("OC-H", LookIn:=xlFormulas, LookAt:= _
        xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=True)
    If rng Is Nothing Then
        Set rng = Nothing
        xlWb.Close
        Set xlWb = Nothing
        MsgBox "Не найден столбец ""OC-H""", vbCritical, "Проверка"
        Exit Sub
    Else
        iOC = rng.Column
    End If
    ' поиск столбца "ABTO"
    Set rng = ThisWorkbook.Worksheets(nSh).Cells.Find("ABTO", LookIn:=xlFormulas, LookAt:= _
        xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=True)
    If rng Is Nothing Then
        Set rng = Nothing
        xlWb.Close
        Set xlWb = Nothing
        MsgBox "Не найден столбец ""ABTO""", vbCritical, "Проверка"
        Exit Sub
    Else
        iABT = rng.Column
    End If
    ' определяем нижнюю ячейку в столбце "OC-H"
    nisiOC = xlWb.Worksheets( 1 ).Cells(Rows.Count, iOC).End(xlUp).Row
    ' определяем нижнюю ячейку в столбце "ABTO"
    nisiABT = ThisWorkbook.Worksheets(nSh).Cells(Rows.Count, iABT).End(xlUp).Row
    '***************************************************
    For i =  2  To nisiOC 'делаем пробег по столбцу "iOC" со второй строки по "nisiOC"
        With ThisWorkbook.Worksheets(nSh)
            'проверка есть ли значение в столбце "KOT" и "iOC"
            If xlWb.Worksheets( 1 ).Cells(i, iOC) <> "" And _
                xlWb.Worksheets( 1 ).Cells(i, iKOT) <> "" Then
                ' ищем значение столбца "OC-H" в столбце "ABTO"
                Set rng = .Range(.Cells( 2 , iABT), .Cells(nisiABT, iABT)).Find( _
                    xlWb.Worksheets( 1 ).Cells(i, iOC), _
                    LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByRows, _
                    SearchDirection:=xlNext, MatchCase:=True)
                'проверка найдено ли значение
                If Not rng Is Nothing Then
'                    rng.Copy
'                    ThisWorkbook.Worksheets("452").Cells(rng.Row, "N").PasteSpecial xlPasteValues
                    'т.к. нужно только значение то не будем использовать метод "Copy"
                    ThisWorkbook.Worksheets("452").Cells(rng.Row, "N") = _
                        xlWb.Worksheets( 1 ).Cells(i, iKOT) ' название листа стоит сделать переменной

                End If
            End If
        End With
    Next

    Set rng = Nothing
    xlWb.Close False
    Set xlWb = Nothing

    Application.ScreenUpdating = True
End Sub
...
Рейтинг: 0 / 0
dll-библиотеки, копии книг
    #34862639
nPUBET
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkodor
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Sub TOMAT452()
    Dim xlWb As Workbook
    Dim rng As Range
    Dim ishFile As String
     Dim iKOT As Long
     ......
                End If
            End If
        End With
    Next

    Set rng = Nothing
    xlWb.Close False
    Set xlWb = Nothing

    Application.ScreenUpdating = True
End Sub


vkodor

спасибо!
Большое спасибо!
...
Рейтинг: 0 / 0
dll-библиотеки, копии книг
    #34864108
nPUBET
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
    Set rng = xlWb.Worksheets(ThisWorkbook.Sheets("A3").Range("B1")).Cells.Find( _
        "KOT", LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByRows, _
        SearchDirection:=xlNext, MatchCase:=True)  ' <==  выделяет жёлтым цветом, ошибка 9

поменял =B1= на =B2=.
Появляется ошибка 9.
Т.е. с листа =468= не получается скопировать ячейки с =K=.

Как исправить ошибку?
...
Рейтинг: 0 / 0
dll-библиотеки, копии книг
    #34864146
nPUBET
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
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.
Sub TOMAT452()
    Dim xlWb As Workbook
    Dim rng As Range
    Dim ishFile As String
     Dim iKOT As Long
     Dim iOC As Long
     Dim iABT As Long
    Dim nSh As String
    Dim i As Long
    'для отмены мелькания на экране
    Application.ScreenUpdating = False
'    Sheets("452").Activate
    '********
    'берем название обрабатываемого листа с ячейки "B2" листа "A3" этой книги
    nSh = CStr(ThisWorkbook.Sheets("A3").Range("B2").Value)
    'берем название файла с ячейки "B2" листа "A3" _
   '  (т.к. мы установили в ячейке нужный формат и храним в значение только название без расширения то надо брать text)
    ishFile = ThisWorkbook.Path & ThisWorkbook.Sheets("A3").Range("B2").Text
    'проверка существования файла
    If Dir(ishFile, vbNormal) = "" Then
        MsgBox "Проверьте путь и файл"
        Exit Sub
    End If
    'открытие файла
    Set xlWb = Workbooks.Open(ishFile, False, True)
    ' поиск столбца "KOT"
'********** ошибка 9
Set rng = xlWb.Worksheets(CStr(ThisWorkbook.Sheets("A3").Range("B2"))).Cells.Find( _
        "KOT", LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByRows, _
        SearchDirection:=xlNext, MatchCase:=True) ' <== ошибка 9
'********** ошибка 9

здесь '***** ошибка 9
...
Рейтинг: 0 / 0
dll-библиотеки, копии книг
    #34864177
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
перед
Код: plaintext
1.
2.
3.
4.
'********** ошибка 9
Set rng = xlWb.Worksheets(CStr(ThisWorkbook.Sheets("A3").Range("B2"))).Cells.Find( _
        "KOT", LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByRows, _
        SearchDirection:=xlNext, MatchCase:=True) ' <== ошибка 9
'********** ошибка  9 
поставь
Код: plaintext
1.
msgbox CStr(ThisWorkbook.Sheets("A3").Range("B2"))
msgbox ThisWorkbook.Sheets("A3").Range("B2")
И посмотри что выводится?
...
Рейтинг: 0 / 0
dll-библиотеки, копии книг
    #34864188
nPUBET
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Изменил =452= на =А452=.
Ошибка 9.

"\"0".xls"

Как вместо =0= вводить текст?
...
Рейтинг: 0 / 0
dll-библиотеки, копии книг
    #34864204
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
измени формат в ячейке "В2" листа "А3"
сделай его таким-же как в ячейке "В1"
и впиши туда не формулу
Код: plaintext
="\"&A2&".xls"
а просто 468
...
Рейтинг: 0 / 0
dll-библиотеки, копии книг
    #34864209
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а вместо
Код: plaintext
1.
2.
    Set rng = xlWb.Worksheets(CStr(ThisWorkbook.Sheets("A3").Range("B1"))).Cells.Find( _
        "KOT", LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByRows, _
        SearchDirection:=xlNext, MatchCase:=True)
напиши
Код: plaintext
1.
2.
    Set rng = xlWb.Worksheets(nSh).Cells.Find( _
        "KOT", LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByRows, _
        SearchDirection:=xlNext, MatchCase:=True)
...
Рейтинг: 0 / 0
dll-библиотеки, копии книг
    #34864348
nPUBET
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkodorа вместо
Код: plaintext
1.
2.
    Set rng = xlWb.Worksheets(CStr(ThisWorkbook.Sheets("A3").Range("B1"))).Cells.Find( _
        "KOT", LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByRows, _
        SearchDirection:=xlNext, MatchCase:=True)
напиши
Код: plaintext
1.
2.
    Set rng = xlWb.Worksheets(nSh).Cells.Find( _
        "KOT", LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByRows, _
        SearchDirection:=xlNext, MatchCase:=True)


Поменял. Не работает.
У меня проблемы с форматом. Вместо =452= поставил =А452=.
Т.е. "\"0".xls" не читает текст ().
...
Рейтинг: 0 / 0
dll-библиотеки, копии книг
    #34864359
nPUBET
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
dll-библиотеки, копии книг
    #34864395
nPUBET
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkodor

Большое спасибо за поддержку!
По различным причинам смогу вернутся к этому топику месяца через два (если повезёт).
...
Рейтинг: 0 / 0
dll-библиотеки, копии книг
    #34865398
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nPUBETУ меня проблемы с форматом. Вместо =452= поставил =А452=.
Т.е. "\"0".xls" не читает текст ().
вместо 0 надо @
пример: "\"@".xls"
...
Рейтинг: 0 / 0
44 сообщений из 44, показаны все 2 страниц
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / dll-библиотеки, копии книг
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]