[CDR 2017-2021] Импорт из Excel в Corel

Владимир1212

Участник
Топикстартер
Сообщения
5
Реакции
0
Добрый день. Есть макрос в exel , который по размерам из таблицы рисует прямоугольники в Corel . Каждый раз создавая новый документ. Можно ли сделать так , что бы документ очищался и в нем уже рисовались прямоугольники ?

Код:
Option Explicit

Dim MyAddress As String
Dim SelRows As Integer
Dim SelCols As Integer
Dim strTemp

Dim i, j, H As Long
Dim objCorel As New CorelDRAW.Application
Dim CrlDoc As New CorelDRAW.Document
Dim CurrX, buff_X As Long
Dim CurrY As Long
Const PageWidth = 8000
Const PageHeight = 6000

Sub MyMacro1()
'Читаем выделение в массив...
MyAddress = Selection.Address(ReferenceStyle:=xlA1, ColumnAbsolute:=False, RowAbsolute:=False)
Debug.Print MyAddress
SelRows = Selection.Rows.Count
Debug.Print SelRows
SelCols = Selection.Columns.Count
Debug.Print SelCols

ReDim mRect(1 To SelRows)

For i = 1 To SelRows
 mRect(i).Y = CSng(Selection.Cells(i, 1).Text)
 mRect(i).X = CSng(Selection.Cells(i, 2).Text)
  If SelCols > 2 Then
   mRect(i).Count = CSng(Selection.Cells(i, 3).Text)
  Else
     mRect(i).Count = 1
  End If
Next i

'Работа с коралом
Set objCorel = New CorelDRAW.Application

CurrX = 0
H = 0
CurrY = PageHeight
objCorel.Visible = True

Set CrlDoc = objCorel.CreateDocument

    objCorel.ActiveDocument.Unit = cdrMillimeter
    
  With objCorel.ActiveDocument.ActivePage
   .SetSize PageWidth, PageHeight
 
  End With





For i = 1 To SelRows
    H = H + mRect(i).Y + 80
   If (PageHeight - H) <= (mRect(i).Y) Then
     CurrX = CurrX + 500
     CurrY = PageHeight
     H = 0
   End If
    
      
    For j = 1 To mRect(i).Count
       If j = 1 Then
         buff_X = CurrX
       End If
        Call objCorel.ActiveLayer.CreateRectangle(CurrX, CurrY, CurrX + mRect(i).X, CurrY - (mRect(i).Y))
        CurrX = CurrX + mRect(i).X + 80
      If j = mRect(i).Count Then
        CurrX = buff_X
      End If
   Next j
 
   CurrY = CurrY - mRect(i).Y - 80
    
Next i

End Sub
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 228
Реакции
10 851
А сейчас как?
 
  • Спасибо
Реакции: Владимир1212

Владимир1212

Участник
Топикстартер
Сообщения
5
Реакции
0
Сейчас при запуске макроса , каждый раз создается новое окно . В конце рабочего дня , получается километровый список документов.
 

splxgf

12 лет на форуме
Сообщения
7 743
Реакции
3 425
Dim CrlDoc As New CorelDRAW.Document
ну так делаете
Dim CrlDoc и
set CrlDoc = objCorel.актив документ или objCorel.опен
 
  • Спасибо
Реакции: Владимир1212

Владимир1212

Участник
Топикстартер
Сообщения
5
Реакции
0
Спасибо, вроде работает, но только при открытом CorelDraw и созданом документе. Можно как нибудь сделать проверку наличия открытого документа ?
 

splxgf

12 лет на форуме
Сообщения
7 743
Реакции
3 425
  • Спасибо
Реакции: Владимир1212

Андрей84

Участник
Сообщения
6
Реакции
0
Добрый день. Есть макрос в exel , который по размерам из таблицы рисует прямоугольники в Corel . Каждый раз создавая новый документ. Можно ли сделать так , что бы документ очищался и в нем уже рисовались прямоугольники ?

End Sub[/CODE]

Здравствуйте. Очень заинтересовал этот макрос для нарисовки прямоугольников. Но выдает ошибку. Помогите разобраться, пожалуйста. Corel X7
 

Вложения

  • 0-02-05-15e8061275889c7c2510f9a7556ab7b636168e9398c01c00b90f6cda1f44633b_e9d822f.jpg
    0-02-05-15e8061275889c7c2510f9a7556ab7b636168e9398c01c00b90f6cda1f44633b_e9d822f.jpg
    213.6 КБ · Просм.: 410

splxgf

12 лет на форуме
Сообщения
7 743
Реакции
3 425
ref.jpg
 

Андрей84

Участник
Сообщения
6
Реакции
0

Вложения

  • 0-02-05-43d0db4abc612b664055bc0571ae0045d0b425a53def9ee610f31dc962886085_5e30773d.jpg
    0-02-05-43d0db4abc612b664055bc0571ae0045d0b425a53def9ee610f31dc962886085_5e30773d.jpg
    247.7 КБ · Просм.: 364
  • 0-02-05-416f8d830c664750b2f387afa9825895c1a0833ef942537060da6ffe2576ca7a_e22bd7ae.jpg
    0-02-05-416f8d830c664750b2f387afa9825895c1a0833ef942537060da6ffe2576ca7a_e22bd7ae.jpg
    239.5 КБ · Просм.: 357

splxgf

12 лет на форуме
Сообщения
7 743
Реакции
3 425
У вас интерпретируемый язык, окна Immerdiate, Locals - все под боком для отладки. Разобраться вполне по силам.
s1200.jpg
 

Андрей84

Участник
Сообщения
6
Реакции
0

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 228
Реакции
10 851

Андрей84

Участник
Сообщения
6
Реакции
0
Это не команды а массивы, объявленные выше через Dim
Вы вообще с бейсиком дело имели или вам в рамках этой темы нужен ликбез по основам программирования вообще?
По сути не имел. Но данный макрос очень нужен, поэтому попытаюсь разобраться.
 

splxgf

12 лет на форуме
Сообщения
7 743
Реакции
3 425
  • Спасибо
Реакции: _MBK_

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 228
Реакции
10 851

Андрей4343

Участник
Сообщения
1
Реакции
0
Здравствуйте. Подскажите, пожалуйста, как сделать проверку пустых строк? Чтобы макрос их пропускал и переходил к следующим?

Код:
ReDim mRect(1 To SelRows)

For i = 1 To SelRows
mRect(i).Y = CSng(Selection.Cells(i, 1).Text)
mRect(i).X = CSng(Selection.Cells(i, 2).Text)
  If SelCols > 2 Then
   mRect(i).Count = CSng(Selection.Cells(i, 3).Text)
  Else
     mRect(i).Count = 1
  End If
Next i

В этом случае , макрос отрисовывает по размерам, только до пустой строки.
2020-06-22_10-42-17.png