[VBA] Как поместить тект в буфер обмена?

durka82

Следующий код почему-то не работает (ругается на последнюю строчку):

Dim MyData As DataObject
Dim splitString As Variant
Dim joinString As String
Set MyData = New DataObject
MyData.GetFromClipboard
splitString = Split(MyData.GetText(1 " ")
splitString(1) = splitString(1) & " "
For i = LBound(splitString) + 1 To UBound(splitString)
splitString(i) = Mid(splitString(i 1, 1) & "."
Next
joinString = Join(splitString)
MyData.SetText joinString
MyData.PutInClipboard

Но если предыдущую строчку поменять на
MyData.SetText "любая строка" 
, ошибка пропадает
Чем ему не нравится моя строка?
Или как это лучше сделать?
п.с.: По VBA вообще есть нормальная помощь? А то та, которая идет вместе с офисом, как-то не очень, особенно навигация там паршивая

Varvara2002

Я не спец, но что такое DataObject?
У меня на этом деле ругается.
З.Ы. Сор, понимаю, что проблема не в этом.

durka82

что такое DataObject
Это взято из примера из помощи к vba.
Эта штука используется для доступа к буферу обмена.
Почему именно так сделано, я тоже не понял.
В том же vb это сделано через Clipboard.
Вообще-то я использую пример несколько в ином виде.
Вот:
Dim MyData As DataObject ' это в общем модуле
Sub ConvertText
Dim splitString As Variant
Dim joinString As String
Set MyData = New DataObject
MyData.GetFromClipboard
splitString = Split(MyData.GetText(1 " ")
splitString(1) = splitString(1) & " "
For i = LBound(splitString) + 1 To UBound(splitString)
splitString(i) = Mid(splitString(i 1, 1) & "."
Next
joinString = Join(splitString)
MyData.SetText joinString
MyData.PutInClipboard
End Sub

Так должно ругаться в правильном месте

Varvara2002

Думаю, надо явно задать тип splitString как массив строк, так как
вроде возвращается Variant Split - ом
http://www.tek-tips.com/faqs.cfm?fid=4342
З.Ы. Все равно ругается у меня на DataObject .

Varvara2002

А буфер не пустой?

durka82

Большое спасибо!
Поменял на
Dim splitString As String
- и все заработало
Круто
Все равно ругается у меня на DataObject
А как ругается?
Если что, у меня 2002 офис.

Varvara2002

У меня 2003.
Можешь дать файлик посмотреть (если он не секретный просто хотелось бы понять, почему не видит это дело.

durka82

Вот все, что есть в этом файле (я сохраняю в шаблоне. если что, могу и весь шаблон выложить):
Dim MyData As DataObject
Sub PasteTextOnly
Selection.PasteSpecial Link:=False, DataType:=wdPasteText, Placement:=wdInLine, DisplayAsIcon:=False
End Sub
Sub ConvertAndPasteTextOnly
Dim splitString As String
Dim joinString As String
Set MyData = New DataObject
MyData.GetFromClipboard
' MsgBox "<" & MyData.GetText(1) & ">"
splitString = Split(MyData.GetText(1 " ")
' MsgBox "<" & splitString(1) & ":" & LBound(splitString) & ":" & UBound(splitString) & ">"
splitString(1) = splitString(1) & " "
For i = LBound(splitString) + 1 To UBound(splitString)
splitString(i) = Mid(splitString(i 1, 1) & "."
Next
joinString = Join(splitString)
' MsgBox "<" & joinString & ">"
MyData.SetText joinString
' MsgBox "<" & MyData.GetText(1) & ">"
' MsgBox "IV=<" & IsObjectValid(MyData.GetText(1 & ">"
MyData.PutInClipboard
PasteTextOnly
End Sub

Даже закомментаренные msgbox-ы оставил

durka82

Только вот как-то оно при работе глючит - буду разбираться...
Оставить комментарий
Имя или ник:
Комментарий: