Rakstīt ziņojumu 
 
Pavediena vērtējums:
  • 0 balsis - 0 vidējais
  • 1
  • 2
  • 3
  • 4
  • 5
Visual Basic for MS Word
Autors Ziņa
Mezha_lauminja Atslēdzies
Senior Member
****

Ziņojumi: 529
Pievienojās: Sep 2005
Reputācija: 9
Ziņojums: #1
Visual Basic for MS Word
Vai kaads, luudzu, var paliidzeet? Kaa uzrakstiit makrosu (visual basic worda makrosu videe), kas panaak, ka aktiivajaa dokumentaa visas vietaas, kur ir vairaak kaa viena atstarpe (piemeeram astonjas atstarpes peec kaartas), taas visas aizvietotu ar vienu?
06.07.2006 13:53
Apskatīt lietotāja interneta adresi Atrast visus šī lietotāja rakstītos ziņojumus Citēt šo ziņu atbildē
Ronalds Atslēdzies
Junior Member
**

Ziņojumi: 8
Pievienojās: May 2006
Reputācija: 0
Ziņojums: #2
RE: Visual Basic for MS Word
Izskatās, ka Tev vajadzēs lietot VBA. Problēma algoritmiski izskatās gaužām vienkārša - skrienam cauri visiem simboliem, ja sastopam atstarpi, piefiksējam, ka sastapām, un skatamies kāds ir nākošais simbols. Ja atstarpe - izņemam. Tiklīdz sastopam citu simbolu, šo piefiksējumu svītrojam.
Lielākā problēma laikam ir saprast Word objektu modeli, t.i. kā reāli tikt pie tā dokumenta teksta no VBA. Bet domāju, ka nedaudz paskatoties atbilstošajā VBA helpā visu varēs atrast. Labs palīgs būs Object Browser logs (manā wordā F2 no VBA Editora loga).
Tātad būtu jāņem Tools -> Macros -> Visual Basic Editor (vai kaut kā tā, nemāku precīzi pateikt, jo esmu uzlicis 2007 wordu un tur ir nedaudz savādāk), uztaisi jaunu moduli, kur likt funkciju, uzraksti pašu funkciju un tad izsauc viņu no Worda Macro loga.
Starp citu, kādai Worda versijai Tev vajag šo efektu panākt?

EDIT: Tikko nedaudz paskatījos to helpu. Tātad, pie teksta varēsi tikt caur ActiveDocument.Content property lauku. Tas Tev atgriezīs Range objektu, kam savukārt ir Text property lauks, kas atgriež parastu string mainīgo. Ar šo mainīgo var veikt kādas manipulācijas vien ir vajadzīgas. Easy
(Šo ziņojumu pēdējo reizi modificēja: 06.07.2006 19:49 Ronalds.)
06.07.2006 19:43
Atrast visus šī lietotāja rakstītos ziņojumus Citēt šo ziņu atbildē
ernesto Atslēdzies
Junior Member
**

Ziņojumi: 30
Pievienojās: Mar 2005
Reputācija: 0
Ziņojums: #3
RE: Visual Basic for MS Word
Ronalds rakstīja:Problēma algoritmiski izskatās gaužām vienkārša - skrienam cauri visiem simboliem, ja sastopam atstarpi, piefiksējam, ka sastapām, un skatamies kāds ir nākošais simbols. Ja atstarpe - izņemam. Tiklīdz sastopam citu simbolu, šo piefiksējumu svītrojam.
problēma ir vēl gaužam viekāršāka, tikai vajag padomāt, kā mēs šo problēmu risinātu dzīvē!
elementārākais piemērs Find - Replace: find divus space un replace ar vienu...
un visa koda gatavošana sanāk šāda - record macro; ctrl+h; saraksta visus vajadziigos pribambasus; OK; stop macro; ieliekam mako loopā un uz priekšu.. Wink
06.07.2006 20:07
Atrast visus šī lietotāja rakstītos ziņojumus Citēt šo ziņu atbildē
Ronalds Atslēdzies
Junior Member
**

Ziņojumi: 8
Pievienojās: May 2006
Reputācija: 0
Ziņojums: #4
RE: Visual Basic for MS Word
Arī šādi to var risināt. Ja mērķis ir tikt galā ar 2 atstarpēm, tad šis ir ideāls risinājums. Vienīgā problēma tad ir tajā, ka Words aizvietos 4 atstarpes ar 2, 8 ar 4, 10 ar 5 utt.. Rezultātā tas makro būs jāpalaiž vairākas reizes līdz Replace neko vairs neatrod. Turklāt, tad jau nav vērts to makro ierakstīt - atliek atvērt Replace lodziņu, ailē Find what: ierakstīt: <atstarpe><atstarpe> un Replace with: <atstarpe>. Tad tikai pāris reizītes jāpaklikšķina uz Replace All un nav nekādu problēmu.. Ja vajag sakārtot tikai vienu dokumentu, tad varbūt tas ir tieši tas kas meitenei vajadzīgs.
Es jau palieku pie sava - vērtīgāk uzrakstīt vienkāršu makro. Bet tāds jau es esmu - patīk visu sarežģīt.
(Šo ziņojumu pēdējo reizi modificēja: 06.07.2006 22:40 Ronalds.)
06.07.2006 22:32
Atrast visus šī lietotāja rakstītos ziņojumus Citēt šo ziņu atbildē
Mezha_lauminja Atslēdzies
Senior Member
****

Ziņojumi: 529
Pievienojās: Sep 2005
Reputācija: 9
Ziņojums: #5
RE:  Visual Basic for MS Word
Ronalds rakstīja:Arī šādi to var risināt. Ja mērķis ir tikt galā ar 2 atstarpēm, tad šis ir ideāls risinājums. Vienīgā problēma tad ir tajā, ka Words aizvietos 4 atstarpes ar 2, 8 ar 4, 10 ar 5 utt.. Rezultātā tas makro būs jāpalaiž vairākas reizes līdz Replace neko vairs neatrod.

Nu luuk shiis vieniigaas probleemas deelj man tas risinaajums vairs neder Smile

man to vajag xp word'am

a kaa var uzrakstiit kaut ko, kas srien cauri visam tekstam un atgriezh pa vienam simbolam? Embarassed
07.07.2006 12:42
Apskatīt lietotāja interneta adresi Atrast visus šī lietotāja rakstītos ziņojumus Citēt šo ziņu atbildē
Mezha_lauminja Atslēdzies
Senior Member
****

Ziņojumi: 529
Pievienojās: Sep 2005
Reputācija: 9
Ziņojums: #6
RE: Visual Basic for MS Word
ernesto risinaajums dereetu tad, ja vareetu kaut kaa panaakt, ka Find dokumentu caurskata nevis vienu reizi, bet atkal un atkal tik ilgi kameer vairs mekleejamais strings neatrodaas... Vai var kaut kaa identificeet (t.i. kaa to paarbaudi uzrakstiit...), ka visaa dokumentaa nekas nav atrasts???
07.07.2006 12:45
Apskatīt lietotāja interneta adresi Atrast visus šī lietotāja rakstītos ziņojumus Citēt šo ziņu atbildē
ernesto Atslēdzies
Junior Member
**

Ziņojumi: 30
Pievienojās: Mar 2005
Reputācija: 0
Ziņojums: #7
RE: Visual Basic for MS Word
Mezha_lauminja rakstīja:ernesto risinaajums dereetu tad, ja vareetu kaut kaa panaakt, ka Find dokumentu caurskata nevis vienu reizi, bet atkal un atkal tik ilgi kameer vairs mekleejamais strings neatrodaas... Vai var kaut kaa identificeet (t.i. kaa to paarbaudi uzrakstiit...), ka visaa dokumentaa nekas nav atrasts???
jā var tādu pārbaudi uztaisīt.. es to realizēju tā: uztaisam ciklu kas ilgst tik ilgi kamēr teksts pirms replace un pēc replace atšķiras.. ja teksts pirms un pēc replace neatšķirsies, tad tas nozīmēs, ka vairs nekas netiks aizstāts..
lai atvieglotu tavu problēmu, tad šeit būs kods.. strādā uz office 2003, nez kā būs ar xp.. bet varbūt Smile

Sub Macro1()

Dim previous_string
previous_string = ActiveDocument.Content + "a"


While StrComp(previous_string, ActiveDocument.Content) <> 0 Or StrComp(previous_string, ActiveDocument.Content) <> Null
previous_string = ActiveDocument.Content
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = " "
.Replacement.Text = " "
.Forward = True
.Wrap = wdFindAsk
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
Wend
End Sub
(Šo ziņojumu pēdējo reizi modificēja: 07.07.2006 13:18 ernesto.)
07.07.2006 13:15
Atrast visus šī lietotāja rakstītos ziņojumus Citēt šo ziņu atbildē
Mezha_lauminja Atslēdzies
Senior Member
****

Ziņojumi: 529
Pievienojās: Sep 2005
Reputācija: 9
Ziņojums: #8
RE: Visual Basic for MS Word
straadaat straadaa... Smile
tiesa gan, tas variants kljuust taads viegli ekstreems, ja dokumentam ir kaadas 350.lpp vai vairaak... Laughing
10.07.2006 20:07
Apskatīt lietotāja interneta adresi Atrast visus šī lietotāja rakstītos ziņojumus Citēt šo ziņu atbildē
Rakstīt ziņojumu 


Lēciens uz forumu:



Kontaktifizmati.lvAtgriezties uz augšuAtgriezties pie saturaArhīva skatsRSS sindikācija