|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Oct 2009
Messaggi: 49
|
[VBA/EXCEL '07] Un Range.Pastespecial che non "pasta"
Salve a tutti,
avrei un problema che non riesco a risolvere. O meglio 1 problema che non so se esiste o meno Faccio partire il codice seguente: Codice:
Private Sub CommandButton1_Click() 'STAMPA IL MESE PER AGENZIA
'LA PRIMA VOLTA CHE SI AVVIA LA STAMPA DA ERRORE IN => Range("DZ63:DZ64").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
'oppure in Range("DZ59:DZ62").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False 'incolla il nome e cognome nelle caselle
'NON CAPISCO IL MOTIVO. Il foglio risulta sbloccato e poi una volta che avviene l'errore e vado col debug, non modificando assolutamente nulla, faccio ripartire il tutto e funge O_O*
'FA LA STESSA COSA PER LA STAMPA INTERNO
Dim IntervalloNome2 As Range
Dim IntervalloIndirizzo2 As Range
Dim IntervalloRecapiti2 As Range
Dim PagaTecnico2 As Range
Dim Contratto2 As Range
Dim Altro2 As Range
Dim CostoAgenzia2 As Range
Dim IntervalloDati2 As Range
Dim TABELLA2 As Range
Dim IntervalloNome As Range
Dim IntervalloDati As Range
Dim DataIn As Object
If ComboBox1.text = "" Then
msg = MsgBox("Nessun MESE selezionato." & Chr(13) & "Seleziona il MESE dall'elenco a discesa.", vbInformation, "Informazione")
ComboBox1.DropDown
ElseIf ComboBox2.text = "" Then
msg = MsgBox("Nessun ANNO selezionato." & Chr(13) & "Seleziona l'ANNO dall'elenco a discesa.", vbInformation, "Informazione")
ComboBox2.DropDown
ElseIf TextBox1.Value = 0 And TextBox2.Value = 0 Then
msg = MsgBox("Non è stato scelto il tipo di prospetto. Inserire il numero di copie del prospetto che si desidera stampare.", vbInformation, "Informazione")
Else: A = ComboBox2.Value ' prendi l'anno
M = PrendiMese(ComboBox1.Value) ' prendi il mese
Set zona = Range(Range("AA82"), Range("AA82").End(xlDown)).Rows
DataBox = CDate(CStr(M) & "/" & CStr(A))
Giorni = Day(DateSerial(A, M + 1, 0))
For Each DataIn In zona
If DataBox = DataIn Then
msg = MsgBox("Il mese " & ComboBox1.text & Chr(32) & ComboBox2.text & " del tecnico " _
& Range("F13").text & Chr(32) & Range("F11").text & " è presente in contabilità." & Chr(13) & _
"Vuoi procedere con la stampa di N° " & TextBox1.Value & " prospetti per l'agenzia e di N° " & TextBox2.Value & " prospetto/i per l'interno?", vbYesNo + vbExclamation, "Avviso")
If msg = vbYes Then
If TextBox1.Value <> 0 Then 'STAMPA PER AGENZIA
Application.ScreenUpdating = False
Set IntervalloNome = Union(Range("F11"), Range("F13"), Range("F15"), Range("F19")) ', Range("M23"), Range("M27")) 'prende il NOME E COGNOME ECC.
IntervalloNome.Copy ' lo copia
Sheets("MODULISTICA").Unprotect
Sheets("MODULISTICA").Select
Range("DZ59:DZ62").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False 'incolla il nome e cognome nelle caselle
Worksheets(".COGNOME NOME").Select 'va a mio modulo cioè al nome e cognome che prende dai dati appena inseriti in modulistica
Set IntervalloDati = Union(Range("M23"), Range("M27")) 'Numero contratto e la scadenza.
IntervalloDati.Copy ' lo copia
Worksheets("MODULISTICA").Select
Range("DZ63:DZ64").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False 'incolla il nome e cognome nelle caselle
Worksheets(".COGNOME NOME").Select 'va a mio modulo cioè al nome e cognome che prende dai dati appena inseriti in modulistica
DataIn.Select 'seleziona DataIn che poi è la DataBox
X = ActiveCell.Row 'identifica che numero di riga è
'data, giorno, assenza, ore lavoro inizio e fine H, ore totali h, ore tot %, pagate %, srtd %, fest %
Set IntervalloDati = Union(Range(Cells(X, 27), Cells(X + Giorni - 1, 28)), Range(Cells(X, 30), Cells(X + Giorni - 1, 32)), Range(Cells(X, 35), Cells(X + Giorni - 1, 35)), Range(Cells(X, 40), Cells(X + Giorni - 1, 43)))
IntervalloDati.Copy 'copio l'intervallo selezionato
Worksheets("MODULISTICA").Select
Range("DU71").Select 'vado a modulistica
ActiveCell.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False 'incolla tutto
Worksheets(".COGNOME NOME").Select
Range("A1").Copy 'COPIA IL PERCORSO DELL'IMMAGINE
Worksheets("MODULISTICA").Select
Range("ED57").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
'ActiveSheet.Shapes("Rettangolo 1").Fill.UserPicture (Range("ED57").Value) 'inserisci immagine
Range("DU58:ED118").Select 'vado a modulistica e seleziono l'area da stampare
Application.CutCopyMode = False
With ActiveSheet.PageSetup 'CONDIZIONI DI STAMPA
.LeftHeader = ""
.CenterHeader = ""
.RightHeader = ""
.LeftFooter = ""
.CenterFooter = ""
.RightFooter = ""
.LeftMargin = Application.InchesToPoints(0.196850393700787)
.RightMargin = Application.InchesToPoints(0.196850393700787)
.TopMargin = Application.InchesToPoints(0.196850393700787)
.BottomMargin = Application.InchesToPoints(0)
.HeaderMargin = Application.InchesToPoints(0)
.FooterMargin = Application.InchesToPoints(0)
.PrintHeadings = False
.PrintGridlines = False
.PrintComments = xlPrintNoComments
.PrintQuality = 600
.CenterHorizontally = True
.CenterVertically = True
.Orientation = xlPortrait
.Draft = False
.PaperSize = xlPaperA4
.FirstPageNumber = xlAutomatic
.Order = xlDownThenOver
.BlackAndWhite = False
.Zoom = False
.FitToPagesWide = 1
.FitToPagesTall = 1
.PrintErrors = xlPrintErrorsDisplayed
.OddAndEvenPagesHeaderFooter = False
.DifferentFirstPageHeaderFooter = False
.ScaleWithDocHeaderFooter = True
.AlignMarginsHeaderFooter = True
.EvenPage.LeftHeader.text = ""
.EvenPage.CenterHeader.text = ""
.EvenPage.RightHeader.text = ""
.EvenPage.LeftFooter.text = ""
.EvenPage.CenterFooter.text = ""
.EvenPage.RightFooter.text = ""
.FirstPage.LeftHeader.text = ""
.FirstPage.CenterHeader.text = ""
.FirstPage.RightHeader.text = ""
.FirstPage.LeftFooter.text = ""
.FirstPage.CenterFooter.text = ""
.FirstPage.RightFooter.text = ""
End With
Selection.PrintOut Copies:=TextBox1.Value
Range("DZ59:DZ64").ClearContents
Range("DU71:ED101").ClearContents
Range("ED57").ClearContents
'ActiveSheet.Shapes("Rettangolo 1").Fill.UserPicture ("C:\TECNICI\no foto.gif") 'inserisci immagine
Worksheets(".COGNOME NOME").Select
DataIn.Select
C = C + 1
Application.ScreenUpdating = True
End If
Spero possiate aiutarmi. 1 saluto |
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Mar 2001
Città: PV Milano Nord
Messaggi: 3851
|
Quote:
__________________
"W la foca, che dio la benedoca"
poteva risolvere tutto la sinistra negli anni in cui ha governato e non l'ha fatto. O sono incapaci o sta bene anche a "loro" cosi. L'una o l'altra inutile scandalizzarsi.[plutus] |
|
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Oct 2009
Messaggi: 49
|
zuper già avevo provato a zippapre ma purtroppo il file supera i 24.4 kb necessari per allegare...
ome famo??
|
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Mar 2001
Città: PV Milano Nord
Messaggi: 3851
|
Quote:
prova a sproteggerlo a mano all'inizio
__________________
"W la foca, che dio la benedoca"
poteva risolvere tutto la sinistra negli anni in cui ha governato e non l'ha fatto. O sono incapaci o sta bene anche a "loro" cosi. L'una o l'altra inutile scandalizzarsi.[plutus] |
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Mar 2001
Città: PV Milano Nord
Messaggi: 3851
|
se no prova a spezzettare il copy, almeno non devi star li a fare la union...
prendi cella per cella e la copi
__________________
"W la foca, che dio la benedoca"
poteva risolvere tutto la sinistra negli anni in cui ha governato e non l'ha fatto. O sono incapaci o sta bene anche a "loro" cosi. L'una o l'altra inutile scandalizzarsi.[plutus] |
|
|
|
|
|
#6 | ||
|
Member
Iscritto dal: Oct 2009
Messaggi: 49
|
Quote:
Quote:
ciaociao |
||
|
|
|
|
|
#7 |
|
Member
Iscritto dal: Oct 2009
Messaggi: 49
|
ma poi perchè l'union dovrebbe riportarmi problemi sul range paste special??
ariciao |
|
|
|
|
|
#8 |
|
Member
Iscritto dal: Oct 2009
Messaggi: 49
|
zupper nenache col spezzettare l'union riesce anzi si blocca ad ogni range paste special
se potessi inviarti il file in qualche modo... email o altro ma non vorrei escludere il resto del forum dall'argomento. ciaociao |
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Più che spezzettare l'Union inizierei a cercare ed eliminare le possibili ambiguità presenti nel tuo codice.
Ad esempio vedo questo ( ho solo cambiato i rif. di cella ) : Codice:
Dim IntervalloDati As Range
Worksheets("Foglio1").Select
Set IntervalloDati = Union(Range("A1"), Range("A3"))
IntervalloDati.Copy
Worksheets("Foglio2").Select
Range("A1:A2").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Codice:
Dim IntervalloDati As Range
With Worksheets("Foglio1")
Set IntervalloDati = Union(.Range("A1"), .Range("A3"))
End With
IntervalloDati.Copy
Worksheets("Foglio2").Range("A1:A2").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Codice:
With Worksheets("Foglio1")
Union(.Range("A1"), .Range("A3")).Copy
End With
Worksheets("Foglio2").Range("A1:A2").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
|
|
|
|
|
|
#10 |
|
Member
Iscritto dal: Oct 2009
Messaggi: 49
|
MarcoGG grazie per l'intervento. Le porzioni di codice da te postate sicuramente hanno accorciato di molto molto il mio codice ma purtoppo non hanno risolto il problema. VBA mi segnala ancora una volta l'errore di run time 1004: Errore nel metodo paste special per la classe range.
ciaociao |
|
|
|
|
|
#11 |
|
Member
Iscritto dal: Oct 2009
Messaggi: 49
|
Marco facendo un pò di modifiche mi sono accorto che l'errore avviene solo quando vado a ribloccargli il foglio. Difatti: Aziono la macro, va in debug, controllo il foglio dove deve pastare ed è "sprotetto". Quindi faccio ripartire la macro e fila tutto liscio. Se una volta che mi va in debug riblocco manualmente il foglio dove deve pastare, riazionando la macro mi ritorna in debug.
Credo che quindi il problema sia prorpio della protezione del foglio. Di conseguenza la domanda: Ma Sheets("MODULISTICA").Unprotect cosa fa allora? E' possibile che applichi tale comando solo dopo averne completati altri. Ciò magari dovuto ad un Application.ScreenUpdating = False. Fammi sapere. Ciaociao |
|
|
|
|
|
#12 |
|
Member
Iscritto dal: Oct 2009
Messaggi: 49
|
Quoto quanto detto sopra.
L'errore era dovuto (o almeno cosi ho risolto) alla propedeuticictà tra Application.ScreenUpdating = False e Sheets("MODULISTICA").Unprotect. Difatti spostando il comando .Unprotect PRIMA dell' Application.ScreenUpdating fila tutto liscio regolarmente senza alcun debug. Unica pecca è che mi mostra il foglio "modulistica" Grazie mille a tutti ciaociao |
|
|
|
|
|
#13 | |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
|
|
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 21:36.




















