Utilizza l'intervallo, le celle, per impostare una cella specifica in una string, quindi unire e centrare?

Sto tentando di impostare una cella specifica al nome del file che ho appena aperto utilizzando il mio codice. Ho tutto funzionante correttamente se non riesco a get il valore della cella come il nome della cartella di lavoro. Quando esegui il debug del mio codice, posso vedere che la mia variabile per il nome wb è la string corretta. Nel codice qui sotto, quando viene chiamata questa subroutine, wbTempName viene passato come il path della cartella di lavoro appena aperta (penso) e iTemp è solo un integer che era la prima colonna vuota (trovata in una sottoprogramma separata). Ecco il codice:

Sub CMM_93Cam(ByVal wbTempName As Workbook, ByVal iTemp As Integer) ' ' CMM_93Cam Macro ' 'Set necessary variables sColumnTwo = ConvertToLetter(iTemp + 2) 'Paste filename into sheet wbTempName.Activate sWBName = ActiveWorkbook.Name Range(Cells(2, iTemp)).Value = sWBName Range(Cells(2, iTemp), Cells(2, iTemp + 2)).Select Selection.Merge 'Code that works End Sub 

Quando chiamo questo codice, ottengo un errore di runtime 1004 sull'intervallo (Cells (2, iTemp)). Valore = sWBName "line:" Metodo 'Campo' dell'object '_Global' fallito ".

L'altro problema è che non credo che il mio codice per unire e centrare le celle indicato stava funzionando (in origine avevo prima della linea where cerco di impostare il valore della cella, pensando che stava causando problemi).

Qualcuno sa cosa sto facendo male?

Provare a modificare il codice come segue:

 Sub CMM_93Cam(ByVal wbTempName As Workbook, ByVal iTemp As Integer) Application.DisplayAlerts = False 'Set necessary variables sColumnTwo = ConvertToLetter(iTemp + 2) 'Paste filename into sheet sWBName = wbTempName.Name With ThisWorkbook.ActiveSheet .Cells(2, iTemp).Value = sWBName .Range(.Cells(2, iTemp), .Cells(2, iTemp + 2)).Merge End With 'Code that works Application.DisplayAlerts = True End Sub Con ThisWorkbook.ActiveSheet Sub CMM_93Cam(ByVal wbTempName As Workbook, ByVal iTemp As Integer) Application.DisplayAlerts = False 'Set necessary variables sColumnTwo = ConvertToLetter(iTemp + 2) 'Paste filename into sheet sWBName = wbTempName.Name With ThisWorkbook.ActiveSheet .Cells(2, iTemp).Value = sWBName .Range(.Cells(2, iTemp), .Cells(2, iTemp + 2)).Merge End With 'Code that works Application.DisplayAlerts = True End Sub Fine con Sub CMM_93Cam(ByVal wbTempName As Workbook, ByVal iTemp As Integer) Application.DisplayAlerts = False 'Set necessary variables sColumnTwo = ConvertToLetter(iTemp + 2) 'Paste filename into sheet sWBName = wbTempName.Name With ThisWorkbook.ActiveSheet .Cells(2, iTemp).Value = sWBName .Range(.Cells(2, iTemp), .Cells(2, iTemp + 2)).Merge End With 'Code that works Application.DisplayAlerts = True End Sub 

Notare che questa macro passa il nome della cartella di lavoro alla cella nella cartella di lavoro in cui è in esecuzione il codice di macro corrente. Se si desidera incollare il nome della cartella di lavoro nella cella nella cartella di lavoro wbTempName , cambiare la linea With ThisWorkbook.ActiveSheet a With wbTempName.ActiveSheet