[VBA Outlook / Word 2010] select first ipv replace all

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Anand
  • Registratie: Februari 2001
  • Laatst online: 20-01 08:05

Anand

Thank you, come again!

Topicstarter
In Outlook 2010 wordt in een formulier een tekst ingevoerd die uit 60 regels bestaat. Deze tekst wordt via VBA in Word 2010 geopend om bewerkt te worden (53 vaste bewerkingen).

Nu loop ik tegen de 'harde enters' aan = Chr(13). Dit zouden in Word 'zachte enters' moeten zijn = Chr(11). Om alle Chr(13)'s naar Chr(11)'s om te zetten gebruik onderstaande code, maar die selecteert slechts de eerste Chr(13) en doet niets aan replacing.

Wat mis ik?


Private Sub CommandButton1_Click()

Set wdApp = CreateObject("Word.Application")
wdApp.Visible = True

Set wdDoc = wdApp.Documents.Add
Set wdSelection = wdDoc.ActiveWindow.Selection

wdSelection.TypeText (Me.TextBox1.Value)

wdSelection.GoTo What:=wdGoToSection, Which:=wdGoToFirst

With wdSelection.Find

.ClearFormatting
.Text = Chr(13)
.Replacement.ClearFormatting
.Replacement.Text = Chr(11)
.Forward = True
.Wrap = wdFindContinue
.Execute Replace:=wdReplaceAll

End With

End Sub

[ Voor 0% gewijzigd door Anand op 11-08-2015 10:26 . Reden: typo ]


Acties:
  • 0 Henk 'm!

  • nescafe
  • Registratie: Januari 2001
  • Laatst online: 20:47
Ten eerste, code-tags :) Als je [code=VB] om je code heen zet, is het voor iedereen beter leesbaar.
Ten tweede, zet aub even Option Explicit boven je code en declareer je variabelen; of indien je deze op een hoger niveau hebt gedeclareerd, verplaats de scope naar binnen de sub (aangezien je de variabelen binnen de sub instantieert).
Als laatste, isoleer het probleem; indien je de code binnen Word uitvoert werkt deze gewoon goed, dus wat is er anders tussen Outlook (de waarde van TextBox1.Value) en wat je in Word uitvoert en zou het hierin kunnen zitten?

Visual Basic .NET:
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
Option Explicit

Private Sub CommandButton1_Click()

    Dim wdApp As Word.Application
    Dim wdDoc As Word.Document
    Dim wdSelection As Word.Selection
    
    'Set wdApp = CreateObject("Word.Application") ' For Outlook
    Set wdApp = Me.Application ' For Word
    
    wdApp.Visible = True
    
    Set wdDoc = wdApp.Documents.Add
    Set wdSelection = wdDoc.ActiveWindow.Selection
    
    ' wdSelection.TypeText (Me.TextBox1.Value) ' For Outlook
    wdSelection.TypeText "Regel 1" & vbCrLf & "Regel 2" & vbCrLf & "Regel 3"
    
    wdSelection.GoTo What:=wdGoToSection, Which:=wdGoToFirst
    
    With wdSelection.Find
        .ClearFormatting
        .Text = Chr(13)
        .Replacement.ClearFormatting
        .Replacement.Text = Chr(11)
        .Forward = True
        .Wrap = wdFindContinue
        .Execute Replace:=wdReplaceAll
    End With
    
End Sub


Afbeeldingslocatie: http://content.screencast.com/users/nescafe2002/folders/Snagit/media/39c45348-78ff-4250-a4e8-79d15f08e10e/08.11.2015-13.00.png

Het lijkt me overigens dat je probeert om de regeleinden tussen alinea's te omzeilen? Dan zou je dit ook via stijlen kunnen aanpassen.

Visual Basic .NET:
1
2
3
4
5
'
    wdSelection.TypeText "Regel 1" & vbCrLf & "Regel 2" & vbCrLf & "Regel 3"
    
    wdSelection.WholeStory
    Selection.Style = ActiveDocument.Styles("Geen afstand")


Afbeeldingslocatie: http://content.screencast.com/users/nescafe2002/folders/Snagit/media/3539d84d-ebdd-4454-9c03-8de6783eb593/08.11.2015-13.01.png

Tip: Je kunt zelf VBA 'leren' (afkijken) door macro's op te nemen in Word terwijl je aanpassingen in het document doorvoert en daarna de gegenereerde code te bekijken.

* Barca zweert ook bij fixedsys... althans bij mIRC de rest is comic sans


Acties:
  • 0 Henk 'm!

  • Anand
  • Registratie: Februari 2001
  • Laatst online: 20-01 08:05

Anand

Thank you, come again!

Topicstarter
Ik krijg binnen Word prima de uitvoering die ik zoek. Maar in Outlook krijg ik voor alledrie onderstaande regels de foutmelding "Een door de gebruiker gedefinieerd gegevenstype is niet gedefinieerd".

[code=VB]
Dim wdApp As Word.Application
Dim wdDoc As Word.Document
Dim wdSelection As Word.Selection
[/code=VB]

Jammer, want Word voert precies uit wat ik nodig heb (nog wel na een kleine aanpassing van Me.Application naar Word.Application in regel 10).

Zeker bedankt voor alle tips, je ziet dat ik de codetags al gebruik :-)

[ Voor 7% gewijzigd door Anand op 11-08-2015 15:45 ]


Acties:
  • 0 Henk 'm!

  • nescafe
  • Registratie: Januari 2001
  • Laatst online: 20:47
In Outlook heb je geen directe verwijzing naar je Word-bibliotheek.

Je kunt deze variabelen als volgt declareren:

Visual Basic .NET:
1
2
3
Dim wdApp As Object
Dim wdDoc As Object
Dim wdSelection As Object


Waarom regel 10 wel werkt als je Word.Application gebruikt is mij een raadsel, juist omdat hij Word.Application in regel 5 niet kent. Het idee was juist dat je regel 9 kon gebruiken (uncommenten) in een Outlook-context en regel 10 in een Word-context.

* Barca zweert ook bij fixedsys... althans bij mIRC de rest is comic sans


Acties:
  • 0 Henk 'm!

  • Anand
  • Registratie: Februari 2001
  • Laatst online: 20-01 08:05

Anand

Thank you, come again!

Topicstarter
Oké, begrepen: As Object.

Kleine gok:

In Outlook kan ik dan ook niet wdGoToSection, wdGoToFirst, wdFindContinue en wdReplaceAll aanroepen?

Ze genereren in ieder geval een foutmelding in Outlook.

Edit: wacht. Referentie aanleggen naar Word-bibliotheek.

[ Voor 12% gewijzigd door Anand op 11-08-2015 21:13 ]