Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

problema con macro in vba

Hai problemi con i file Zip, vuoi formattare l'HD, non sai come funziona FireFox? O magari ti serve proprio quel programmino di cui non ricordi il nome! Ecco il forum dove poter risolvere i tuoi problemi.

Moderatori: Dylan666, hydra, gahan

problema con macro in vba

Postdi mofa » 27/02/02 14:28

ho registrato una macro in vba cosi composta:

sub
Sheets("ddt").Select
Sheets("ddt").Copy
Range("B3:K59").Select
Selection.Locked = True
Selection.FormulaHidden = True
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
Range("H19").Select
Windows("gestione5.xls").Activate
Range("D14").Select
Selection.ClearContents
Range("F14").Select
Selection.ClearContents
Range("C17:C54").Select
Selection.ClearContents
Range("I17:K54").Select
Selection.ClearContents
ActiveWindow.ScrollRow = 30
ActiveWindow.ScrollRow = 33
Range("D56:I59").Select
Selection.ClearContents
Range("G33").Select
Windows("Cartel1").Activate
End Sub

in pratica salvo il documento, che inizialmente è composto da piu' fogli,
su un documento(cartel1), composto da un foglio solo.
fin qui tutto perfetto, ma quando salvo con nome "crtel1" e torno sul documento principale
per continuare il lavoro e cerco di salvare un'altro foglio mi appare un errore di debug sulla
riga: "Windows("Cartel1").Activate", questo perche la cartella di salvataggio è diventata "cartel2"(e cosi via)
quindi il conseguente errore.

cosa posso fare per evitare l'errore di debug?
(cosa devo scriver, e dove)?(sono alle prime armi con vba)
grazie per l'aiuto che saprete sicuramente darmi.
:) :) :)
mofa
Utente Senior
 
Post: 150
Iscritto il: 01/02/02 01:00

Sponsor
 

Postdi Triumph Of Steel » 27/02/02 14:46

Potresti provare con un contatore...

io non conosco VBA ... ma andando a logica...
Avatar utente
Triumph Of Steel
Moderatore
 
Post: 7852
Iscritto il: 22/08/01 01:00

Postdi JClark » 28/02/02 08:14

' usa sempre l'opzione seguente ... anche se sei un programmatore
' meticoloso ti aiuterà parecchio :lol:
Option Explicit

' nel tuo codice mancava il nome della sub, tu lo mettevi ?
Sub copia()

Sheets("ddt").Select
Sheets("ddt").Copy

Range("B3:K59").Select
Selection.Locked = True
Selection.FormulaHidden = True
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
Range("H19").Select

' suppongo che gestione5.xls, fosse già aperto !
Windows("gestione5.xls").Activate

'Range("D14").Select
'Selection.ClearContents

' abbrevia così ...
Range("D14").ClearContents
Range("F14").ClearContents
Range("C17:C54").ClearContents
Range("I17:K54").ClearContents
Range("D56:I59").ClearContents

' ... è inutile lo scroll se poi ti posizioni ...
'ActiveWindow.ScrollRow = 30
'ActiveWindow.ScrollRow = 33

Range("G33").Select

Windows("Cartel1").Activate
End Sub

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

in pratica salvo il documento, che inizialmente è composto da piu' fogli,
su un documento(cartel1), composto da un foglio solo.

Questo salvataggio avviene quindi in modo manuale ? Perchè in questo pezzo di macro non lo vedo fatto da programma. Non basta il solo:

Sheets("ddt").Select
Sheets("ddt").Copy

"... fin qui tutto perfetto ( :?: ), ma quando salvo con nome "crtel1" (volevi dire CARTEL1 ?) e torno sul documento principale per continuare il lavoro e cerco di salvare un'altro foglio mi appare un errore di debug sulla riga: "Windows("Cartel1").Activate", questo perche la cartella di salvataggio è diventata "cartel2"(e cosi via) quindi il conseguente errore ..."

cosa posso fare per evitare l'errore di debug ?
Dipende, se salvi a mano o da programma :)

- PS, aveva funzionato poi il salvataggio mono foglio che ti avevo suggerito ?
Il brutto tempo non esiste ... il brutto tempo è quello che passo senza andare in moto !

Bye Frank
:-)
JClark
Utente Senior
 
Post: 416
Iscritto il: 24/09/01 01:00
Località: Voghera

Postdi JClark » 28/02/02 08:22

SCUSA SCUSA SCUSA :oops: , ho verificato meglio il comando Sheets.Copy ed effettivamente genera il foglio in automatico.

Il problema è che Excel inizializza alla partenza alcuni contatori tra cui quello dei file creati, appena penso qualcosa te lo faccio sapere !
Il brutto tempo non esiste ... il brutto tempo è quello che passo senza andare in moto !

Bye Frank
:-)
JClark
Utente Senior
 
Post: 416
Iscritto il: 24/09/01 01:00
Località: Voghera

Postdi JClark » 28/02/02 13:03

Premetto che quanto segue si amalgama con la tua macro e non richiede la gestione di contatori a patto che:

1 siano già aperti i file Gestione5.xls ed il file originale che contiene la macro
2 tu chiuda il nuovo file creato con la Sheets.Copy prima di rilanciare la macro (*)

Al posto di
Windows("Cartel1").Activate

metti
ActiveWindow.ActivateNext

(*) nel caso ci siano più files aperti, il problema non è tanto sapere il nome del file, quanto su quale tu vuoi andare a posizionarti ...
Il brutto tempo non esiste ... il brutto tempo è quello che passo senza andare in moto !

Bye Frank
:-)
JClark
Utente Senior
 
Post: 416
Iscritto il: 24/09/01 01:00
Località: Voghera

Postdi mofa » 28/02/02 14:43

intanto grazie mille.
allora, per quanto riguarda Gestione5.xls, questo è aperto dall'inizio e la macro è contenuta in quest' ultimo.
a me interessa che dopo aver salvato il documento, denominato da excel "cartel1", e rinominato da me(con altro nome),chiudendo "cartel1"(rinominato), possa proseguire a creare ddt senza dover per forza chiudere "gestione5".
spero di essere stato piu' chiaro.

x Frank
comunque adesso provo il tuo suggerimento.

p.s. i consigli della volta scorsa li ho provati, il primo funziona, ma come vedi ho cercato di complicare un po' di piu' la cosa.
mentre il secondo(quello piu' lungo) mi dava vari errori di debug,
no so se ho sbagliato io qualche cosa.
grazie comunque.
mofa
Utente Senior
 
Post: 150
Iscritto il: 01/02/02 01:00

Postdi mofa » 28/02/02 15:07

Frank grazie ora funziona bene.
un'altra domanda:
dai documenti salvati posso eliminare i collegamenti automatici con il documento "gestione5" (sempre nella stessa macro)?
mofa
Utente Senior
 
Post: 150
Iscritto il: 01/02/02 01:00

Postdi JClark » 01/03/02 08:24

Ciao

se mi rimandi la macro che salva in xls4 ci riguardo xchè l'avevo provata e funzionava. Indicami x cortesia anche che gli errori ti segna e dove.

>dai documenti salvati posso eliminare i collegamenti automatici con il documento "gestione5" (sempre nella stessa macro)?

Quello della gestione dei collegamenti esterni è un problema annoso che ho avuto anche io in Excel97 e che non so se nella 2K è stato migliorato.
Cmq la soluzione che ti propongo è di fare delle ricerche e sostituzioni come se si trattasse di testo normale:

(questo che segue è tratto dall'esempio standard dell'help di Excel97)

With Worksheets(1).Range("a1:a500")
Set c = .Find("c:\Documenti\gestione5.xls", lookin:=xlValues)
If Not c Is Nothing Then
primoIndirizzo = c.Address
Do
'
' inserisci qui la tua procedurina di sostituzione del path esempio ("c:\Documenti\gestione5.xls") ad esempio con un bel blank "" et voilà che sparisce il riferimento al foglio esterno
'
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> primoIndirizzo
End If
End With
Il brutto tempo non esiste ... il brutto tempo è quello che passo senza andare in moto !

Bye Frank
:-)
JClark
Utente Senior
 
Post: 416
Iscritto il: 24/09/01 01:00
Località: Voghera

Postdi mofa » 02/03/02 16:27

questa è la macro che mi hai dato, non ho piu' provato a scriverla.
appena posso ti faccio sapere dove mi dava gli errori(ripeto, non vorrei aver sbagliato qulcosa io).

Option Explicit

Sub EsportaFoglio()
Call MioSave("Fattura", "C:Documenti")
Call MioSave("DDT", "C:Documenti")
End Sub

Function MioSave(mySheet, myPath)
' crea una nuova cartella
Workbooks.Add
' torna al file Origine
Windows("Origine").Activate
' va al foglio che mi interessa
Sheets(mySheet).Select
' lo copia nel nuovo file al primo posto
Sheets(mySheet).Copy Before:=Workbooks("Cartel2").Sheets(1)
' Seleziono i 3 fogli creati di default con la Workbooks.Add ...
Sheets(Array("Foglio1", "Foglio2", "Foglio3")).Select
Sheets("Foglio3").Activate
' ... e li cancello
ActiveWindow.SelectedSheets.Delete
' salvo il file nel formato Excel attivo
ActiveWorkbook.SaveAs FileName:=myPath & mySheet & ".xls"
' chiudo il file fattura appena creato
ActiveWorkbook.Close
End Function


H :-? :-? o provato ad usare la tua proposta per evitare di avere un collegamento con il documento principale, ed ho fatto cosi':

"mia macro"(e come tu mi hai proposto, giustamente, ho sostituito "Windows("Cartel1").Activate" con "ActiveWindow.ActivateNext")


With Worksheets(1).Range("a1:a500")
Set c = .Find("c:\Documenti\gestione5.xls", lookin:=xlValues)
If Not c Is Nothing Then
primoIndirizzo = c.Address
Do
'
' blank ""
'
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> primoIndirizzo
End If
End With

end sub

"end sub" l'ho messo alla fine perche mettendolo prima di
"With Worksheets(1).Range("a1:a500")"
mi dava errore.
cosi composta la macro non funziona.
dove ho sbagliato?

un' ultima domanda:
sai come far aprire automaticamente salva con nome?(ovviamente inserito nella macro iniziale)

é doveroso da parte mia, e credo, anche da tutti gli altri farti i miei migliori ringraziamenti per come ti(e vi) impegni/ate per dare una mano agli altri.

ciao.
mofa
Utente Senior
 
Post: 150
Iscritto il: 01/02/02 01:00

Postdi JClark » 04/03/02 08:42

Questo per il SAVE-AS

Dim myName As String
...
valorizzazione della var myName
...
ActiveWorkbook.SaveAs FileName:="C:\Documenti\Temp\" & myName & ".xls", FileFormat:=xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, CreateBackup:=False

----

Per quanto riguarda l'altro tips, il codice relativo alla Sub EsportaFoglio() e Function MioSave(mySheet, myPath):

una possibilità d'errore può essere che il secondo dei parametri che tu passi con la Sub è il path in cui scrivere

Call MioSave("Fattura", "C:Documenti")
Call MioSave("DDT", "C:Documenti")

ora, se nel percorso attuale ("C:Documenti") la cartella Documenti non esiste, il tutto va in errore. Crea quindi, se già non esiste, tale cartella e fammi sapere :)

----

La ricerca e sostituzione è un ciccio più complessa, se vuoi divertirti a trovare tu una soluz meglio, altrimenti ti mando la mia, che lungi dall'essere il meglio visto al mondo nell'universo programmoso ha il vantaggio di essere già fatta e FUNZIONARE :lol:
Il brutto tempo non esiste ... il brutto tempo è quello che passo senza andare in moto !

Bye Frank
:-)
JClark
Utente Senior
 
Post: 416
Iscritto il: 24/09/01 01:00
Località: Voghera

Calendario in Excel

Postdi tgnsa » 05/09/02 15:01

Anzitutto un saluto agli amici centauri

Problema: Come posso fare generare ad Excel un calendario dandogli solo le date di inizio e di fine?

Per i problemi di mofa credo che abbia risolto altrimenti mi metto in moto, ho una discreta pratica sempre da autodidatta ovviamente

8)
tgnsa
Utente Junior
 
Post: 35
Iscritto il: 19/07/02 14:03

Postdi Frengo78 » 05/09/02 16:27

Non ricordo come si fa ma ti do l'idea per farlo.

Le date sono convertibili in un numero da 1 a 365 che corrisponde all'ordine in cui si susseguono. Converti le date di inizio e di fine e cicla la conversione dei numeri intermedi in date in formato standard stampandole nelle celle che ti servono.

cioè se devi andare dal 1 febbraio al primo marzo avrai:

data iniziale = 032
data finale = 050

in un ciclo che in cui GIORNO va da 32 a 50...
-converti giorno in una data nel formato gg mm aaaa
-stampala in una colonna
-incrementa giorno di un unita
-incrementa colonna
chiudi ciclo
Knowledge is a weapon
Frengo78
Utente Senior
 
Post: 8985
Iscritto il: 16/07/02 08:41
Località: Torino

Postdi JClark » 06/09/02 07:39

Ciao tgnsa

se mi mandi un riferimento e-mail ti mando un file per generare in
1 sec. un intero anno.

Te lo guardi e se ti piace lo tieni e te lo studi
Il brutto tempo non esiste ... il brutto tempo è quello che passo senza andare in moto !

Bye Frank
:-)
JClark
Utente Senior
 
Post: 416
Iscritto il: 24/09/01 01:00
Località: Voghera

Re: Calendario in Excel

Postdi piercing » 06/09/02 09:04

tgnsa ha scritto:Anzitutto un saluto agli amici centauri

Problema: Come posso fare generare ad Excel un calendario dandogli solo le date di inizio e di fine?

Per i problemi di mofa credo che abbia risolto altrimenti mi metto in moto, ho una discreta pratica sempre da autodidatta ovviamente

8)


ehm.... non c'è l'autocomposizione per i calendari?
Avatar utente
piercing
Moderatore
 
Post: 7569
Iscritto il: 10/04/02 10:34
Località: Roma

:

Postdi tgnsa » 06/09/02 09:37

Visto che questo topic è abbastanza vecchio x' non ci spostiamo su VBA Excel?
Colgo l'occasione per ringraziare per la partecipazione e mi scuso per aver usato più topics per lo stesso problema. :roll:
Cmq adesso ho qualche idea per il calendario, grazie
tgnsa
Utente Junior
 
Post: 35
Iscritto il: 19/07/02 14:03


Torna a Software Windows


Topic correlati a "problema con macro in vba":


Chi c’è in linea

Visitano il forum: Nessuno e 25 ospiti