WORD Assegnare ad una variabile il risultato di incolla

martedì 05 dicembre 2006 - 15.49

esseaemme Profilo | Newbie

Ciao a tutti,

mi sono appena iscritta e scrivo per la prima volta, sono 3 giorni che sto mangiucchiando VBA for applications. e non riesco a capire cosa sbaglio in questo codice:


Devo assegnare ad una variabile il valore che ho trovato
tramite con incolla

io ho al momento fatto questo :

Sub TEST1()
'
' TEST1 Macro

' Dichiaro la variabile che contiene il nome del protocollo
Dim strProtocollo as string
Const conPercorso As String = "C:\Offerte"

' Sposto il cursore inizio pagina, lo muovo dopo il nr. protocollo
Selection.HomeKey Unit:=wdStory
Selection.MoveRight Unit:=wdCharacter, Count:=11
' Seleziono il nr. di protocollo e lo copio
Selection.MoveRight Unit:=wdCharacter, Count:=17, Extend:=wdExtend
Selection.Copy
strProcollo = Selection.Paste
'ho provato anche con strProtocollo = ActiveDocument.Selection.Paste
Selection.TypeParagraph
Selection.TypeText "Ecco la funzione incolla"
Selection.MoveRight Unit:=wdCharacter, Count:=2
Selection.InsertAfter strProtocollo

'strProtocollo contiene quindi la variabile, che sarà passata poi come nome file con questi 'comandi:

ChangeFileOpenDirectory conPercorso
ActiveDocument.SaveAs FileName:=strProtocollo, FileFormat:=wdFormatDocument, LockComments:=False, Password:="", AddToRecentFiles:=False

Però mi da errore, dice che strProtocollo=Selection.Paste è il
.Paste che non gli piace ,

Praticamente lui salva negli appunti il numero di protocollo, ma non lo passa alla variabile...



Ho trovato dei tutorial in excel, ma non c'è quello che mi serve.




Grazie in anticipo ,
Sam

esseaemme Profilo | Newbie

Riproviamo:

In breve, volevo testare che il valore passato alla variabile esista, mi spiego meglio incollandoti il codice e commentandolo

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Lo scopo della mia funzione, è quello di copiare il numero di protocollo presente nel documento, e lo faccio quando faccio la selezione. Salvare il file con numero di protocolo, nella directory conPercorso=c:/Offerte


Ho provato anche questa opzione
.ActiveDocument.SaveAs FileName:=strProtocollo,
ma non funziona lo stesso


Quindi mi chiedo,

1) come faccio passare ad una variabile il testo selezionato?
2) come faccio a testare che la variabile contenga il testo che le ho passato?
3) come faccio a salvare il file con il nome che contenga la variabile?

Ho forse sbagliato sintassi?

Ho sottomano due testi (presi in biblio...): :book:
il primo è Le macro di office di DavidBoctor, ma è vecchio
il secondo è Word: Macro e VBA da dove ho tratto parte del codice, ma ciò che nel libro sembra funzionare, tipo selection.insertAfter NomeVariabile da me non va.


Grazie x qualsiasi help,
Sam

squilibrium Profilo | Junior Member

Hai provato ad assegnare il valore alla variabile con:

Variabile = Selection.Text

Ciao

esseaemme Profilo | Newbie

Buongiorno Squilibrium

si alla fine ci sono arrivata variabile = selection.text purtroppo non funzia, vorrei vedermi stampato a video la variabile, per capire se ha copiato:

Dim strProtocollo As String

With Selection
.HomeKey unit:=wdStory
.MoveRight unit:=wdCharacter, Count:=11
.MoveRight unit:=wdCharacter, Count:=17, Extend:=wdExtend
strProtocollo = .text
.InsertAfter strProtocollo
.copy
.paste
End With

Se io faccio così, il selection.paste mi incolla la selezione, ma purtroppo la variabile risulta essere vuota, con .InsertAfter

Se tu vuoi stampare ciò che hai buttato dentro ad una variabile come fai?

Grazie infinite,
Sam

squilibrium Profilo | Junior Member

Prova così

Dim i As Integer
Dim app As String

app = ""

Selection.Copy

For i = 1 To Selection.Words.Count
app = app & Selection.Words(i).Text
Next i

app dovrebbe contenere il valore

Ciao

esseaemme Profilo | Newbie

Ciao Squilibrium,

sei stato gentilissimo, perchè ora mi copia l'ultimo pezzo del numero procollo che mi serve.

Mi spiego, il codice protocollo è tipo OFF-01150-VTXJ-v0 oppure SAM-01150-VTXJ-v0 oppure MAS-01150-VTXJ-v0

allora con il codice da te impostato mi quando gli dico .insertafter app mi incolla solo v0

Allora ho pensato che x ogni parola divisa dal - devo fare il ciclo come lo hai scritto tu.

Sono 4 words, mi sono detta devo fare 4 cicli.

Ho iniziato con il primo e il secondo e qui sotto trovi il codice di prova.

Purtroppo, con questo codice mi scrive la seconda words, ma la la prima words app1 misteriosamente viene persa.

E mi servirebbero tutte le app1+app2+app3+app4 x avere il codice protocollo completo, in modo da assegnarlo al nome del file.

Come faccio a non perdere le app fatte prima, io credevo che dando il nome diverso lui tenesse le variabili in memoria, perchè le perde?



Sub TEST1()
'
' TEST1 Macro
' Macro registrata il 06/12/06
'
Dim w1 As Integer
Dim w2 As Integer

Dim app1 As String
Dim app2 As String

app1 = ""
app2 = ""

'Estraggo prima parte offerta
With Selection
.HomeKey unit:=wdStory
.MoveRight unit:=wdCharacter, Count:=11
.MoveRight unit:=wdCharacter, Count:=3, Extend:=wdExtend
.Copy
End With


For w1 = 1 To Selection.Words.Count
app1 = Selection.Words(w1).Text
Next w1

With Selection
.MoveRight unit:=wdCharacter, Count:=1
.MoveRight unit:=wdCharacter, Count:=5, Extend:=wdExtend
.Copy
End With

For w2 = 1 To Selection.Words.Count
app2 = Selection.Words(w2).Text
Next w2


With Selection
.TypeParagraph
.InsertAfter app1
.TypeText "-"
.InsertAfter app2
End With
End Sub


Grazie infinite,
Sam

squilibrium Profilo | Junior Member

Non ho capito perchè fai ogni volta il ciclo

For w2 = 1 To Selection.Words.Count
app2 = Selection.Words(w2).Text
Next w2

secondo me ti basta fare così

app1 = Selection.Words(1).Text
app2 = Selection.Words(2).Text
app3 = Selection.Words(3).Text
app4 = Selection.Words(4).Text

oppure usi solo una variabile e concateni il valore ad ogni ciclo

For w = 1 To Selection.Words.Count
app = app & Selection.Words(w).Text
Next w

Ciao

esseaemme Profilo | Newbie

Buongiorno Squilibrium,

appena ho un attimo provo la tua dritta, cmq ho trovato la soluzione, cercando sul Forum Microsoft ho trovato una funzione che ho riadattato al mio caso, metterò il numero di protocollo all'inizio del documento, con carattere bianco x renderlo invisibile. USO una x come marcatore, che metterò prima del protocollo, e questo è il codice:

Sub test2()
'
' test2 Macro
' Macro registrata il 06/12/06 da -
'
Const conPercorso As String = "c:\offerte"
Dim rTMp As Range
Dim prot As String

Set rTMp = Selection.Paragraphs(1).Range

If rTMp.Characters(1) = "x" Then
rTMp.Start = rTMp.Start + 1
rTMp.End = rTMp.End - 1
rTMp.Select
' which is redundant
' for retrieving the text
MsgBox rTMp
prot = rTMp
ChangeFileOpenDirectory conPercorso
ActiveDocument.SaveAs FileName:=prot


Else
Exit Sub
End If

End Sub

:)

Ciao e grazie mille ancora!
Samantha
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5