Newsgroup: it.comp.lang.visual-basic
Titolo: excel e VB

Innanzitutto volevo chiarire che non ho esperienze di programmazione a parte
qualche nozione da appassionato di computer, ho realizzato con excel una
scheda che mi aiuti a fare dei calcoli che spesso ho bisogno di fare, una
volta finiti i calcoli sono solito salvare la scheda in un file che porta il
nome contenuto nella cella A2 all'interno di una directory che porta il nome
contenuto in A1. Volevo automatizzare questa operazione, a tale scopo ho
realizzato un pulsante e poi ho tentato registrando una macro, ovviamente
non ci sono riuscito ho provato con l'editor di visual basic ma cercando fra
proprieta e metodi a tentativi sono riuscito solo a selezionare la cella, e'
possibile realizzare quello che voglio se si mi date qualche consiglio?
Ciao e grazie.

> Pako:

Vediamo.
A1: C:\Pippo
A2: Pluto
Salviamo col registratore di macro attivato e otteniamo:
Option Explicit
Sub Macro1()
'
' Macro1 Macro
' Macro registrata il 25/01/2001 da Maurizio Borrelli
'
'
    ActiveWorkbook.SaveAs _
        Filename:="C:\Pippo\pluto.xls" _
      , FileFormat:=xlNormal _
      , Password:="" _
      , WriteResPassword:="" _
      , ReadOnlyRecommended:=False _
      , CreateBackup:=False
End Sub
che modificheremo in:
Option Explicit
Public Sub Macro1( _
)
  On Error GoTo ErrHandler
  Const c_strPROC As String = "Macro1"
  Const c_strFOLDER_RANGE   As String = "A1"
  Const c_strFILENAME_RANGE As String = "A2"
  Dim strFolder       As String
  Dim strFileName     As String
  With ActiveWorkbook
    With .ActiveSheet
      strFolder = .Range(c_strFOLDER_RANGE)
      strFileName = .Range(c_strFILENAME_RANGE)
    End With
    .SaveAs _
        FileName:= _
          GetFullFileName_XLWorkbook( _
              Folder:=strFolder _
            , FileName:=strFileName) _
      , FileFormat:=xlNormal _
      , Password:="" _
      , WriteResPassword:="" _
      , ReadOnlyRecommended:=False _
      , CreateBackup:=False
  End With
  Exit Sub
ErrHandler: ShowErr ErrObj:=Err, ProcName:=c_strPROC
End Sub
Public Sub ShowErr( _
  ByRef ErrObj As ErrObject _
, Optional ByVal ProcName As String _
)
  With ErrObj
    If Len(ProcName) = 0 _
    Then _
      ProcName = .Source
    MsgBox _
        Prompt:= _
          "ERRORE: " & .Number & vbCrLf & .Description _
      , Buttons:=vbCritical + vbOKOnly _
      , Title:=ProcName
  End With
End Sub
Public Function GetFullFileName_XLWorkbook( _
  ByVal Folder As String _
, ByVal FileName As String _
) As String
  Application.Volatile True
  If Len(Folder) = 0 _
  Then _
    Folder = CurDir$
  If Right$(Folder, 1) <> "\" _
  Then _
    Folder = Folder & "\"
  If Right$(FileName, 4) <> ".xls" _
  Then _
    FileName = FileName & ".xls"
  GetFullFileName_XLWorkbook = Folder & FileName
End Function
ottenendo cosi, come sottoprodotto, oltre a "ShowErr" (1), una "funzione
utente" che, usata in questo modo:
A1: C:\Pippo
A2: Pluto
A3: =GetFullFileName_XLWorkbook(A1;A2)
ti permette, prima di lanciare la macro, di sapere in anticipo che uso
verra` fatto del contenuto di A1 e A2.
______
(1) che potresti spostare nella cartella delle macro private per ogni uso
futuro, e questo vale anche per "GetFullFileName_XLWorkbook", ma metterei in
personal.xls anche la stessa "Macro1", magari con un nome piu` cristiano.
--
Ciao.
Maurizio
--------
?SPQR(C)
 X
--------

Spettacolare sei un grande!
Funziona perfettamente, l'unica cosa e' che per funzionare la directory deve
gia' esistere, io intendo creare la directory nel caso non esista o
semplicemente spostarmi all'interno di essa se esiste e poi scrivere il
file, cosa che quest'ultima funziona perfettamente.
Provero a lavorarci se invece hai ancora voglia di darmi una mano ogni
consiglio e' ben accetto.
Ciao e grazie ancora.
Marco

 Provero a lavorarci se invece hai ancora voglia di darmi una mano ogni
consiglio e' ben accetto.
Perche' non posti il tuo codice e ci facciamo sopra qualche ragionamento?


 file, cosa che quest'ultima funziona perfettamente.
potresi fare così.
prima del SaveAs metti una righetta di codice che farebbe piu o meno così
if dir$(CellaA1$+"\") <>"" then
    ' esiste già
else
    ' non esiste, la creiamo
    ' mkdir (CellaA1$)
end if
mi raccomando, nelll'If la stringa che identifica la directory deve finire
con "\", sennò lui non la rileva mai, e crede si tratti di un file.
MarioH

 end if
e' meglio
if Dir(CellaA1,vbDirectory) = "" Then
      MkDir CellaA1
End If
beppe
-----------------------------------------------------------
Visita il sito del WWF AltoFerrarese
http://www.comune.cento.fe.it/wwfaf
-----------------------------------------------------------

Perfetto!
di nuovo grazie a tutti.
Ciao Marco