Имя: Пароль:
1C
1С v8
"Вытащить" картинку с Shape (Word, VBA - есть знатоки?)
0 e2e4
 
21.07.15
21:40
Да знаю, что не про 1С - но может, кто по VBA тут хорошо шарит?)) а то как-то уныло на других форумах после мисты - задаешь вопрос и как в гробу; а тут, даже если никто не знает что сказать - так хоть морально поддержат, ну или постебаются дружно)))
Короче, у меня в документе много раз фигачится прямоугольник и заполняется картинкой:
Код Visual Basic
ActiveDocument.Shapes.AddShape(msoShapeRectangle, блабла).Select
Selection.ShapeRange.Fill.UserPicture путь_к_картинке

Потом эти картинки могут вручную смениться пользователем (через Формат автофигуры - Способы заливки - Рисунок); в конце концов мне надо посчитать, сколько раз каждая картинка встретилась в документе.

Запускаю
Sub Посчитать()
Dim sh As Shape
    For Each sh In ActiveDocument.Shapes
        sh.Select
    Next
End Sub

смотрю в дебаггере и вижу, что sh.Fill.TextureName - <Application-defined or object-defined error>...Почему..??? Или вообще каким-то другим свойством надо воспользоваться?

(Раскладчик керамической плитки творю, есличо:))
1 Garykom
 
гуру
21.07.15
21:44
(0) делать сразу в 1С и не вы...ся не предлагать?
2 Garykom
 
гуру
21.07.15
21:44
(1)+ потом экспорт в файлу Word'у если нуна
3 Garykom
 
гуру
21.07.15
21:46
4 e2e4
 
21.07.15
21:47
(1) вооот...я ж говорю - тут человека в беде не бросают))
Чем меня привлекли шейпы в Ворде -- ЛЮБОЙ пользователь ворда сможет вручную сделать с ними что захочет. То есть, поскольку раскладка плитки не формализуемый заранее на 100% процесс, то надо брать инструмент, позволяющий конечному пользователю в перспективе все, что угодно...
5 Garykom
 
гуру
21.07.15
21:48
(3)+ попробовать добавить проверку

If sh.Fill.TextureType = msoTexturePreset Then
sh.Fill.PresetTexture...
Else
sh.Fill.TextureName...
End If
6 e2e4
 
21.07.15
21:48
(5) дак я к этому и пришел - см. (0):
в дебаггере вижу, что sh.Fill.TextureName - <Application-defined or object-defined error>...
7 Garykom
 
гуру
21.07.15
21:50
(4) ну да только если сразу в 1С сделать то оно автоматом кол-во нужных плиток подсчитает... с ценой за это извращение :)

(6) а чему равно в отладчике "sh.Fill.TextureType" ?
8 e2e4
 
21.07.15
21:53
(7) msoTextureUserDefined
9 Garykom
 
гуру
21.07.15
21:54
(8) тогда галюны какие то...
10 e2e4
 
21.07.15
21:54
11 Garykom
 
гуру
21.07.15
21:57
12 e2e4
 
21.07.15
21:59
(11) ну-кась, счас курну...
13 Garykom
 
гуру
21.07.15
21:59
и да picture и texture это немного разные вещи скажем...
14 Garykom
 
гуру
21.07.15
22:01
https://msdn.microsoft.com/en-us/library/office/aa209980(v=office.11).aspx

If .TextureType = msoTextureUserDefined Then
If .TextureName = "C:\brick.bmp" Then
.UserTextured "C:\stone.bmp"
End If
End If
15 e2e4
 
21.07.15
22:07
(13) да, совсем разные....
но даже если отвлечься от того, что метод не так, как мне надо заполняет шейп - все равно, TextureName - <Application-defined or object-defined error>
https://yadi.sk/i/Ns5gD9SxhztEt
(я без проверок, напрямую вкорячил свой рисунок в шейп:
        .ShapeRange.Fill.UserTextured pic
)
16 e2e4
 
21.07.15
22:08
(да: у меня 2007-й ворд)
17 e2e4
 
21.07.15
22:11
абыдна, в общем...ладно, хоть не буду теперь думать, что вообще не в ту сторону (TextureName) смотрел - не могут же два таких крутых мэна одновременно одинаково заблуждаться!))) =|_| |_|=
18 Garykom
 
гуру
21.07.15
22:12
а может туда нужно сначала присвоить? это "TextureName" = "" ?
19 e2e4
 
21.07.15
22:14
(18) Read-only String.
И к тому же - как юзер, пользуясь штатными методами редактирования, сделал бы такой финт?)
20 e2e4
 
21.07.15
22:16
+(19) сам замысел такой: сделать 60-80% работы на автомате, потом человек доделывает нюансы, потом жмет Посчитать - и с учетом всех его изменений выдается кол-во всех разных плиток (==картинок)
21 Garykom
 
гуру
21.07.15
22:17
(20) моя бы в 1С делать... или вообще веб сервис...

у нас к примеру ворда не везде
22 e2e4
 
21.07.15
22:25
(21) тогда сразу же вопрос: пользователь захочет подвигать автоматически вкоряченные плитки, заранее не предсказуемым образом. Порезать их. Как 1С это позволит?
Конечно, просто нарисовать MxN заданных плиток не проблема...
23 e2e4
 
21.07.15
22:26
похоже, это свойство вообще только для PowerPoint работает нормально:
"What if your client wants a custom texture? Not to worry, PowerPoint provides a
UserTextured method. This method takes one parameter, which is the fully qualified filename
of a picture file to tile across the background. This filename is stored in the TextureName
property (read-only). The TextureType property indicates which kind of texture is in use. The
TextureType property returns msoTexturePreset (1) or msoTextureUserDefined (2)."
http://portal.dfpug.de/dfpug/Dokumente/Partner/Hentzenwerke/Microsoft%20Office%20Automation%20with%20Visual%20FoxPro%20Chapter%2011.pdf
24 Garykom
 
гуру
21.07.15
22:35
(22) как бы не проблема двигать то... на том же ТабДок'е картинки

(23) MSO и VBA, 2 больших г...
25 e2e4
 
21.07.15
22:37
(24) (22) а может, и так...особо не задумывался, что 1С может дать нормальный редактор. Надо глянуть.
26 Garykom
 
гуру
22.07.15
00:02
(25) без опыта и знаний по возможностям "платформы 1с" тяжко это
на vba намного проще лабать, хотя и такие студенческие поделки в результате выходят которые совсем "не юзер френдли"
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший